我們知道,mapper.xml是我們配置操作資料庫的sql語句的地方。其中每個sql語句對應著一個方法,每個方法都有自己的輸入輸出參數類型。那麼這些類型都是怎麼配置的呢?今天我們來一起學習下。 輸入映射 首先是輸入類型,輸入類型分為以下幾種:1.基本類型。2.pojo對象類型。3.pojo包裝對象。 ...
我們知道,mapper.xml是我們配置操作資料庫的sql語句的地方。其中每個sql語句對應著一個方法,每個方法都有自己的輸入輸出參數類型。那麼這些類型都是怎麼配置的呢?今天我們來一起學習下。
輸入映射
首先是輸入類型,輸入類型分為以下幾種:1.基本類型。2.pojo對象類型。3.pojo包裝對象。所謂的包裝對象,可以理解為,一個對象裡面包含著另外一個對象。簡單類型
簡單輸入類型,比較簡單。在傳入參數的時候,直接將參數類型配置到parameterType中,代碼如下:
<select id="findUserById" parameterType="int" resultType="cn.itcast.pojo.User"> SELECT * FROM user where id=#{id} </select>
其中的sql語句內的占位符或者拼接符中的內容可以隨意書寫,沒有實際意義。不過建議最好見名知意。以便於閱讀。
pojo對象
如果傳入的是一個對象的話,那麼情況就稍有不同了。除了傳入類型需要是對象的類型(可以直接寫類的全路徑,也可以通過在sqlConfig.xml中配置別名的方式,配置類的別名)。還需要註意的是在sql語句的占位符上也需要將我們的內容對應我們的對象的屬性值。代碼如下:
<select id="findUserByUserName" parameterType="cn.itcast.pojo.User" resultType="cn.itcast.pojo.User"> select * from user where username like'%${username}%' </select>
這裡的username必須對應User類中的屬性。也就是說,在User類中必須有username的屬性。而且我們在傳入參數的時候,需要將user對象的username賦值。用於被mybatis框架解析。
在sqlConfig.xml中配置別名的方法:
<!-- 自定義別名 --> <typeAliases> <!-- 給單個pojo起別名: type:pojo的全路徑名稱, alias:別名 --> <!-- <typeAlias type="cn.itcast.pojo.User" alias="user"/> --> <!-- 使用包掃描的方式將整個包下麵的pojo起別名 別名就是類名, 不區分大小寫, 建議按照java的命名規則來寫 --> <package name="cn.itcast.pojo"/> </typeAliases>
pojo包裝對象
如果傳入對象是一個包含有另外一個對象的對象,也就是說傳入對象是一個包裝對象的時候,我們該怎麼辦呢?其實也差不多,就是將占位符或者連接符中的值改為對象.屬性名具體代碼如下:
首先是pojo對象的代碼,我們可以看出,整個user對象都作為了queryVo對象的一個屬性值了,其欄位名稱為user:
package cn.itcast.pojo; public class QueryVo { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
然後是我們的映射文件,其中的${user.userneme}中,user和我們的QueryVo類中的user屬性名稱一致,而username對應的是User類中的username欄位:
<select id="findUserByVo" parameterType="cn.itcast.pojo.QueryVo" resultType="cn.itcast.pojo.User"> select * from user where username like'%${user.username}%' and sex =#{user.sex} </select>
輸出映射
輸出映射的配置和輸入映射基本一致。首先是簡單類型,mybatis中只有一種情況可以返回簡單類型,那就是我們的sql語句返回值只有一條的時候。可以返回簡單類型。
還有就是我們的pojo類型。我們的mybatis可以將返回的數據,封裝成為一個pojo對象,但是,pojo的對象屬性必須和我們的返回值的欄位名一致。才可以封裝進去。如果不一致仍然想封裝,那麼,就需要指定其對應關係。具體代碼及註釋如下:
<!-- 這裡的userListResultMap對應的是resultMap的唯一標示符 --> <select id="findUserByVo" parameterType="cn.itcast.pojo.QueryVo" resultMap="userListResultMap"> select * from user where username like'%${user.username}%' and sex =#{user.sex} </select> <!-- 這裡的cn.itcast.pojo.User代表的是User類也就是最終生成對象的類型;userListResultMap是這個resultMap的唯一標示符 --> <resultMap type="cn.itcast.pojo.User" id="userListResultMap"> <!-- 這裡的id_是從資料庫中查出的數據欄位名稱是主鍵;而id是我們的User對象中的屬性 --> <id column="id_" property="id"/> <!-- 這裡的result指的是其他欄位 --> <result column="userneme_" property="username"/> </resultMap>