MyBatis3.X復(fù)雜Sql查詢的語(yǔ)句
MyBatis3.X復(fù)雜Sql查詢
MyBatis3.X的resultMap
1.Mybatis的sql語(yǔ)句返回的結(jié)果有兩種
- resultType
- 查詢出的字段在相應(yīng)的pojo中必須有和它相同的字段對(duì)應(yīng),或者基本數(shù)據(jù)類型
- 適合簡(jiǎn)單查詢
- resultMap
需要自定義字段,或者多表查詢,一對(duì)多等關(guān)系,比resultType更強(qiáng)大
適合復(fù)雜查詢
<resultMap id="VideoResultMap" type="Video">
<!--
id 指定查詢列列的唯⼀一標(biāo)示
column 數(shù)據(jù)庫(kù)字段的名稱
property pojo類的名稱
-->
<id column="id" property="id" jdbcType="INTEGER" />
<result column="video_tile" property="title" jdbcType="VARCHAR" />
<result column="summary" property="summary" jdbcType="VARCHAR" />
<result column="cover_img" property="coverImg" jdbcType="VARCHAR" />
</resultMap>
<select id="selectBaseFieldByIdWithResultMap" resultMap="VideoResultMap">
select id , title as video_tile, summary, cover_img from video where id = #{video_id}
</select>
ResultMap復(fù)雜對(duì)象一對(duì)一查詢結(jié)果映射之a(chǎn)ssociation
association:映射到POJO的某個(gè)復(fù)雜類型屬性,比如訂單order對(duì)象里面包含user對(duì)象
<!-- 名稱空間,需要保存全局唯一,最好是和dao層的Java接口一致
可以映射sql語(yǔ)句到對(duì)應(yīng)的方法名參數(shù)和返回值
mybatis是使用接口動(dòng)態(tài)代理
-->
<mapper namespace="net.xiaotiancai.online_class.dao.VideoOrderMapper">
<resultMap id="VideoOrderResultMap" type="VideoOrder">
<id column="id" property="id"></id>
<result column="user_id" property="userId"></result>
<result column="out_trade_no" property="outTradeNo"></result>
<result column="state" property="state"></result>
<result column="total_fee" property="totalFee"></result>
<result column="video_id" property="videoId"></result>
<result column="video_title" property="videoTitle"></result>
<!--
配置屬性一對(duì)一
property對(duì)應(yīng)videoOrder里面的User
javaType對(duì)應(yīng)這個(gè)屬性的類型
-->
<association property="user" javaType="User">
<id column="user_id" property="id"></id>
<result column="name" property="name"></result>
<result column="head_img" property="headImg"></result>
<result column="phone" property="phone"></result>
</association>
</resultMap>
<!--一對(duì)一訂單查詢,訂單內(nèi)部包含用戶屬性-->
<select id="queryVideoOrderList" resultMap="VideoOrderResultMap">
select
o.id id,
o.user_id,
o.out_trade_no,
o.state,
o.total_fee,
o.video_id,
o.video_title,
u.name,
u.head_img,
u.phone
from video_order o left join user u on o.user_id = u.id
</select>
</mapper>
代碼
// resultmap association關(guān)聯(lián)查詢 VideoOrderMapper videoOrderMapper =sqlSession.getMapper(VideoOrderMapper.class); List<VideoOrder> videoOrderList = videoOrderMapper.queryVideoOrderList(); System.out.println(videoOrderList.toString());
ResultMap復(fù)雜對(duì)象一對(duì)多查詢結(jié)果映射之collection
collection: 一對(duì)多查詢結(jié)果查詢映射,比如user有多個(gè)訂單
<resultMap id="UserOrderResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="headImg" column="head_img"/>
<result property="phone" column="phone"/>
<!--
property 填寫pojo類中集合類屬性的名稱
ofType 集合⾥里里⾯面的pojo對(duì)象
-->
<collection property="videoOrderList" ofType="VideoOrder">
<!--配置主鍵,管理理order的唯⼀一標(biāo)識(shí)-->
<id column="order_id" property="id"/>
<result column="user_id" property="userId"/>
<result column="out_trade_no" property="outTradeNo"/>
<result column="state" property="state"/>
<result column="total_fee" property="totalFee"/>
<result column="video_id" property="videoId"/>
<result column="video_title" property="videoTitle"/>
<result column="video_img" property="videoImg"/>
</collection>
</resultMap>
<select id="queryUserOrder" resultMap="UserOrderResultMap">
select
u.id,
u.name,
u.head_img,
u.phone,
o.id order_id,
o.out_trade_no,
o.user_id,
o.state,
o.total_fee,
o.video_id,
o.video_title
from user u left join video_order o on u.id = o.user_id
</select>
代碼
// resultmap association關(guān)聯(lián)查詢 VideoOrderMapper videoOrderMapper =sqlSession.getMapper(VideoOrderMapper.class); //resultmap collection測(cè)試 List<User> userList = videoOrderMapper.queryUserOrder(); System.out.println(userList.toString());
Mybatis3.X ResultMap復(fù)雜對(duì)象查詢總結(jié)
總結(jié)ResultMap的復(fù)雜對(duì)象查詢
- association映射的是一個(gè)pojo類,處理一對(duì)一的關(guān)聯(lián)關(guān)系。
- collection映射的一個(gè)集合列表,處理的是一對(duì)多的關(guān)聯(lián)關(guān)系。
- 模板
<!--column不做限制,可以為任意表的字段,而property須為type定義的pojo屬性--> <resultMap id=“唯一的標(biāo)識(shí)”type=“映射的pojo對(duì)象"> <id column="表的主鍵字段,或查詢語(yǔ)句中的別名字段”jdbcrype="字段類型”property=“映射pojo對(duì)象的主鍵屬性"/> <result column="表的一個(gè)字段”jdbcrype="字段類型”property=“映射到pojo對(duì)象的一個(gè)屬性"/> <association property="pojo的一個(gè)對(duì)象屬性”javarype="pojo關(guān)聯(lián)的pojo對(duì)象"> <id column="關(guān)聯(lián)pojo對(duì)象對(duì)應(yīng)表的主鍵字段”jdbcrype="字段類型”property="關(guān)聯(lián)pojo對(duì)象的屬性"/> <result column="表的字段”jdbcrype="字段類型”property="關(guān)聯(lián)pojo對(duì)象的屬性"/> </association> <!--集合中的property 需要為oftype定義的pojo對(duì)象的屬性--> <collection property="pojo的集合屬性名稱”ofType="集合中單個(gè)的pojo對(duì)象類型"> <id column="集合中pojo對(duì)象對(duì)應(yīng)在表的主鍵字段”jdbcrype="字段類型”property=“集合中pojo對(duì)象的主鍵屬性”/> <result column="任意表的字段”jdbcrype="字段類型”property="集合中的pojo對(duì)象的屬性”/> </collection> </resultMap>
到此這篇關(guān)于MyBatis3.X復(fù)雜Sql查詢的文章就介紹到這了,更多相關(guān)MyBatis復(fù)雜Sql查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決java-jar報(bào)錯(cuò):xxx.jar 中沒(méi)有主清單屬性的方法
在使用 java -jar xxx.jar 命令運(yùn)行 Java 應(yīng)用程序時(shí),遇到了以下錯(cuò)誤:xxx.jar 中沒(méi)有主清單屬性,這個(gè)錯(cuò)誤表示 JAR 文件缺少必要的啟動(dòng)信息,本文將介紹該錯(cuò)誤的原因以及如何通過(guò)修改 pom.xml 文件來(lái)解決,需要的朋友可以參考下2024-11-11
Spring Boot集成教程之異步調(diào)用Async
在項(xiàng)目中,當(dāng)訪問(wèn)其他人的接口較慢或者做耗時(shí)任務(wù)時(shí),不想程序一直卡在耗時(shí)任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線程來(lái)并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async。需要的朋友們下面來(lái)一起看看吧。2018-03-03
java 同步器SynchronousQueue詳解及實(shí)例
這篇文章主要介紹了java 同步器SynchronousQueue詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
SpringBoot 集成Kaptcha實(shí)現(xiàn)驗(yàn)證碼功能實(shí)例詳解
在一個(gè)web應(yīng)用中驗(yàn)證碼是一個(gè)常見(jiàn)的元素。今天給大家介紹一下kaptcha的和springboot一起使用的簡(jiǎn)單例子。感興趣的朋友參考下吧2017-08-08
Java讀取網(wǎng)頁(yè)內(nèi)容并下載圖片的實(shí)例
這篇文章主要介紹了Java讀取網(wǎng)頁(yè)內(nèi)容并下載圖片的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09

