今天用Mybatis的時候發生一個問題,回傳的Data怎樣都是Null,確認SQL語法無任何問題,資料也都正常,查了半天才發現是我使用上的錯誤:
使用code如下:
UserMapper.xml
< select id="getByUserId" parametertype="String" resulttype="UserData"> SELECT * FROM UserData WHERE USERID = #{xx} </ select>
UserMapper.java
public interface UserDataMapper{ public UserData getByUserId(String userId); }
UserData.java
public class UserData { private String _userid; private int _money; ... }
但是不管我傳入甚麼userid,getByUserId(userid)永遠回傳Null,
查了好久才發現我使用方式錯誤,其實我們在UserMapper.xml中定義的<resultMap>
(resultMap使用請見MyBatis - 使用resultMap(1))
這種方式並不適用在使用resultType的時候,因此我們的UserMapper.xml得改為如下:
< select id="getByUserId" parameterType="String" resultType="UserData" > SELECT userid as _userid, money as _money FROM UserData WHERE USERID = #{xx} < /select>還是得乖乖用 sql field as java field name的方式一一指定而不能只是使用 SELECT * 否則就會發生一直都回傳Null的問題。
不過我也是mybatis的初學者,所以說不定有方式只是我還沒發現用法而已。
2013/10/19更新:
可以回傳*,mybatis設定欄位的方式為查找setter,setter的規則為setParamName
,因此假設SELECT * FROM TEST 其中一個欄位名稱為paramName,那麼只要對應的resultType擁有 setParamName這個名稱的setter,mybatis就會呼叫此setter將paramName的value丟入assign囉 (大小寫不限)
沒有留言:
張貼留言