日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis深入了解(四)----输入输出映射

發(fā)布時(shí)間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis深入了解(四)----输入输出映射 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  • 輸入映射
    • 定義包裝類(lèi)型POJO
    • Mapperxml
    • Mapperjava
    • 測(cè)試代碼
  • 輸出映射
    • resultType
      • 輸出簡(jiǎn)單類(lèi)型-需求
      • Mapperxml
      • Mapperjava
      • 測(cè)試代碼
      • 小結(jié)
      • 輸出POJO對(duì)象和POJO列表
    • resultMap
      • 使用方法
      • 將下邊的sql使用User完成映射
      • 小結(jié)

輸入映射


????通過(guò)parameterType指定輸入?yún)?shù)的類(lèi)型,類(lèi)型可以是簡(jiǎn)單類(lèi)型、hashmap、POJO的包裝類(lèi)型。
????舉個(gè)栗子:完成用戶(hù)信息的綜合查詢(xún),需要傳入條件很復(fù)雜(可能包括用戶(hù)信息、其他信息,比如商品、訂單)。傳遞POJO的包裝類(lèi)對(duì)象,看下面的實(shí)例:

定義包裝類(lèi)型POJO

????針對(duì)上面的需求,建議將條件包裝進(jìn)自定義的POJO類(lèi)中。

package cn.itcast.mybatis.po;import java.util.List;/*** 包裝類(lèi)型* @author Administrator**/ public class UserQueryVo {private List<Integer> ids;//包裝所需要的查詢(xún)條件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;}//可以包裝其他的查詢(xún)條件,訂單、商品//....

Mapper.xml

????在UserMapper.xml中定義用戶(hù)信息綜合查詢(xún)(查詢(xún)條件復(fù)雜,通過(guò)高級(jí)查詢(xún)進(jìn)行復(fù)雜關(guān)聯(lián)查詢(xún))。

<!-- 用戶(hù)信息綜合查詢(xún)#{userCustom.sex}:取出pojo包裝對(duì)象中性別值${userCustom.username}:取出pojo包裝對(duì)象中用戶(hù)名稱(chēng)--><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的接口類(lèi)中定義接口:

//用戶(hù)信息綜合查詢(xún) 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è)置查詢(xún)條件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)行輸出映射,只有查詢(xún)出來(lái)的列名和POJO中的屬性名一致,該列才可以映射成功。

如果查詢(xún)出來(lái)的列名和pojo中的屬性名全部不一致,沒(méi)有創(chuàng)建pojo對(duì)象。
只要查詢(xún)出來(lái)的列名和pojo中的屬性有一個(gè)一致,就會(huì)創(chuàng)建pojo對(duì)象。

輸出簡(jiǎn)單類(lèi)型-需求

????用戶(hù)信息的綜合查詢(xún)列表總數(shù),通過(guò)查詢(xún)總數(shù)和上邊用戶(hù)綜合查詢(xún)列表才可以實(shí)現(xiàn)分頁(yè)。

Mapper.xml

<!-- 用戶(hù)信息綜合查詢(xún)總數(shù)parameterType:指定輸入類(lèi)型和findUserList一樣resultType:輸出結(jié)果類(lèi)型--><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

//用戶(hù)信息綜合查詢(xún)總數(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è)置查詢(xún)條件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é)

查詢(xún)出來(lái)的結(jié)果集只有一行且一列,可以使用 簡(jiǎn)單類(lèi)型進(jìn)行輸出映射。

輸出POJO對(duì)象和POJO列表

????不管是輸出的pojo單個(gè)對(duì)象還是一個(gè)列表(list中包括pojo),在mapper.xml中resultType指定的類(lèi)型是一樣的。
????在mapper.java指定的方法返回值類(lèi)型不一樣:

1. 輸出單個(gè)POJO對(duì)象,方法返回值是單個(gè)對(duì)象類(lèi)型 //根據(jù)id查詢(xún)用戶(hù)信息 public User findUserById(int id) throws Exception; 2. 輸出POJO對(duì)象list,方法返回值是List<POJO> //根據(jù)用戶(hù)名列查詢(xún)用戶(hù)列表 public List<User> findUserByName(String name) throws Exception;

生成的動(dòng)態(tài)代理對(duì)象中是根據(jù)mapper方法的返回值類(lèi)型確定是調(diào)用selectOne(返回單個(gè)對(duì)象調(diào)用)還是selectList (返回集合對(duì)象調(diào)用 )。

resultMap

????mybatis中使用resultMap完成高級(jí)輸出結(jié)果映射。

使用方法

????如果查詢(xún)出來(lái)的列名和POJO的屬性名不一致,通過(guò)定義一個(gè)resultMap對(duì)列名和POJO屬性名之間作一個(gè)映射關(guān)系。>

1. 定義resultMap 2. 使用resultMap作為statement的輸出類(lèi)型

將下邊的sql使用User完成映射

SELECT id id_,username username_ FROM USER WHERE id=#{value}

????User類(lèi)中屬性名和上邊查詢(xún)列名不一致。

  • 定義resultMap
<!-- 定義resultMap將SELECT id id_,username username_ FROM USER 和User類(lèi)中的屬性作一個(gè)映射關(guān)系type:resultMap最終映射的java對(duì)象類(lèi)型,可以使用別名id:對(duì)resultMap的唯一標(biāo)識(shí)--><resultMap type="user" id="userResultMap"><!-- id表示查詢(xún)結(jié)果集中唯一標(biāo)識(shí) column:查詢(xún)出來(lái)的列名property:type指定的pojo類(lèi)型中的屬性名最終resultMap對(duì)column和property作一個(gè)映射關(guān)系 (對(duì)應(yīng)關(guān)系)--><id column="id_" property="id"/><!-- result:對(duì)普通名映射定義column:查詢(xún)出來(lái)的列名property:type指定的pojo類(lèi)型中的屬性名最終resultMap對(duì)column和property作一個(gè)映射關(guān)系 (對(duì)應(yīng)關(guān)系)--><result column="username_" property="username"/></resultMap>
  • 使用resultMap作為statement的輸出映射類(lèi)型
<!-- 使用resultMap進(jìn)行輸出映射resultMap:指定定義的resultMap的id,如果這個(gè)resultMap在其它的mapper文件,前邊需要加namespace--><select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">SELECT id id_,username username_ FROM USER WHERE id=#{value}</select>
  • Mapper.java
//根據(jù)id查詢(xún)用戶(hù)信息,使用resultMap輸出 public User findUserByIdResultMap(int id) throws Exception;
  • 測(cè)試代碼
@Testpublic void testFindUserByIdResultMap() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();//創(chuàng)建UserMapper對(duì)象,mybatis自動(dòng)生成mapper代理對(duì)象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//調(diào)用userMapper的方法User user = userMapper.findUserByIdResultMap(1);System.out.println(user);}

小結(jié)

????使用resultType進(jìn)行輸出映射,只有查詢(xún)出來(lái)的列名和pojo中的屬性名一致,該列才可以映射成功。
????如果查詢(xún)出來(lái)的列名和pojo的屬性名不一致,通過(guò)定義一個(gè)resultMap對(duì)列名和pojo屬性名之間作一個(gè)映射關(guān)系。

總結(jié)

以上是生活随笔為你收集整理的Mybatis深入了解(四)----输入输出映射的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。