Mybatis深入了解(四)----输入输出映射
- 輸入映射
- 定義包裝類型POJO
- Mapperxml
- Mapperjava
- 測(cè)試代碼
- 輸出映射
- resultType
- 輸出簡(jiǎn)單類型-需求
- Mapperxml
- Mapperjava
- 測(cè)試代碼
- 小結(jié)
- 輸出POJO對(duì)象和POJO列表
- resultMap
- 使用方法
- 將下邊的sql使用User完成映射
- 小結(jié)
- resultType
輸入映射
????通過(guò)parameterType指定輸入?yún)?shù)的類型,類型可以是簡(jiǎn)單類型、hashmap、POJO的包裝類型。
????舉個(gè)栗子:完成用戶信息的綜合查詢,需要傳入條件很復(fù)雜(可能包括用戶信息、其他信息,比如商品、訂單)。傳遞POJO的包裝類對(duì)象,看下面的實(shí)例:
定義包裝類型POJO
????針對(duì)上面的需求,建議將條件包裝進(jìn)自定義的POJO類中。
package cn.itcast.mybatis.po;import java.util.List;/*** 包裝類型* @author Administrator**/ public class UserQueryVo {private List<Integer> ids;//包裝所需要的查詢條件private UserCustom userCustom;public UserCustom getUserCustom() {return userCustom;}public void setUserCustom(UserCustom userCustom) {this.userCustom = userCustom;}public List<Integer> getIds() {return ids;}public void setIds(List<Integer> ids) {this.ids = ids;}//可以包裝其他的查詢條件,訂單、商品//....Mapper.xml
????在UserMapper.xml中定義用戶信息綜合查詢(查詢條件復(fù)雜,通過(guò)高級(jí)查詢進(jìn)行復(fù)雜關(guān)聯(lián)查詢)。
<!-- 用戶信息綜合查詢#{userCustom.sex}:取出pojo包裝對(duì)象中性別值${userCustom.username}:取出pojo包裝對(duì)象中用戶名稱--><select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom">SELECT * FROM USER WHERE user.sex=#{userCustom.sex} AND user.username LIKE '%${userCustom.username}%'</select>Mapper.java
????在UserMapper的接口類中定義接口:
//用戶信息綜合查詢 public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;測(cè)試代碼
@Testpublic void testFindUserList() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();//創(chuàng)建UserMapper對(duì)象,mybatis自動(dòng)生成mapper代理對(duì)象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//創(chuàng)建包裝對(duì)象,設(shè)置查詢條件UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();userCustom.setSex("1");userCustom.setUsername("張三豐");userQueryVo.setUserCustom(userCustom);//調(diào)用userMapper的方法List<UserCustom> list = userMapper.findUserList(userQueryVo);System.out.println(list); }????
輸出映射
resultType
????使用resultType進(jìn)行輸出映射,只有查詢出來(lái)的列名和POJO中的屬性名一致,該列才可以映射成功。
如果查詢出來(lái)的列名和pojo中的屬性名全部不一致,沒(méi)有創(chuàng)建pojo對(duì)象。
只要查詢出來(lái)的列名和pojo中的屬性有一個(gè)一致,就會(huì)創(chuàng)建pojo對(duì)象。
輸出簡(jiǎn)單類型-需求
????用戶信息的綜合查詢列表總數(shù),通過(guò)查詢總數(shù)和上邊用戶綜合查詢列表才可以實(shí)現(xiàn)分頁(yè)。
Mapper.xml
<!-- 用戶信息綜合查詢總數(shù)parameterType:指定輸入類型和findUserList一樣resultType:輸出結(jié)果類型--><select id="findUserCount" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="int">SELECT count(*) FROM USER WHERE user.sex=#{userCustom.sex} AND user.username LIKE '%${userCustom.user}%' </select>Mapper.java
//用戶信息綜合查詢總數(shù) public int findUserCount(UserQueryVo userQueryVo) throws Exception;測(cè)試代碼
@Testpublic void testFindUserCount() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();//創(chuàng)建UserMapper對(duì)象,mybatis自動(dòng)生成mapper代理對(duì)象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//創(chuàng)建包裝對(duì)象,設(shè)置查詢條件UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();userCustom.setSex("1");userCustom.setUsername("張三豐");userQueryVo.setUserCustom(userCustom);//調(diào)用userMapper的方法int count = userMapper.findUserCount(userQueryVo);System.out.println(count);}小結(jié)
查詢出來(lái)的結(jié)果集只有一行且一列,可以使用 簡(jiǎn)單類型進(jìn)行輸出映射。
輸出POJO對(duì)象和POJO列表
????不管是輸出的pojo單個(gè)對(duì)象還是一個(gè)列表(list中包括pojo),在mapper.xml中resultType指定的類型是一樣的。
????在mapper.java指定的方法返回值類型不一樣:
生成的動(dòng)態(tài)代理對(duì)象中是根據(jù)mapper方法的返回值類型確定是調(diào)用selectOne(返回單個(gè)對(duì)象調(diào)用)還是selectList (返回集合對(duì)象調(diào)用 )。
resultMap
????mybatis中使用resultMap完成高級(jí)輸出結(jié)果映射。
使用方法
????如果查詢出來(lái)的列名和POJO的屬性名不一致,通過(guò)定義一個(gè)resultMap對(duì)列名和POJO屬性名之間作一個(gè)映射關(guān)系。>
1. 定義resultMap 2. 使用resultMap作為statement的輸出類型將下邊的sql使用User完成映射
SELECT id id_,username username_ FROM USER WHERE id=#{value}????User類中屬性名和上邊查詢列名不一致。
- 定義resultMap
- 使用resultMap作為statement的輸出映射類型
- Mapper.java
- 測(cè)試代碼
小結(jié)
????使用resultType進(jìn)行輸出映射,只有查詢出來(lái)的列名和pojo中的屬性名一致,該列才可以映射成功。
????如果查詢出來(lái)的列名和pojo的屬性名不一致,通過(guò)定義一個(gè)resultMap對(duì)列名和pojo屬性名之間作一個(gè)映射關(guān)系。
總結(jié)
以上是生活随笔為你收集整理的Mybatis深入了解(四)----输入输出映射的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kaptcha图形验证码组件
- 下一篇: GCD的基本使用