MyBatis 作為一個 Java 項目過程中常用的持久層框架,主要是進行的是與數(shù)據(jù)庫交互的動作。本篇文章將為您介紹 MyBatis3.X 中復雜 Sql 查詢語句相關的知識總結,以下是詳情內容。
MyBatis3.X復雜Sql查詢
MyBatis3.X的resultMap
1.Mybatis的sql語句返回的結果有兩種
- resultType
- 查詢出的字段在相應的pojo中必須有和它相同的字段對應,或者基本數(shù)據(jù)類型
- 適合簡單查詢
- resultMap
需要自定義字段,或者多表查詢,一對多等關系,比resultType更強大
適合復雜查詢
<resultMap id="VideoResultMap" type="Video">
<!--
id 指定查詢列列的唯?一標示
column 數(shù)據(jù)庫字段的名稱
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復雜對象一對一查詢結果映射之association
association:映射到POJO的某個復雜類型屬性,比如訂單order對象里面包含user對象
<!-- 名稱空間,需要保存全局唯一,最好是和dao層的Java接口一致
可以映射sql語句到對應的方法名參數(shù)和返回值
mybatis是使用接口動態(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>
<!--
配置屬性一對一
property對應videoOrder里面的User
javaType對應這個屬性的類型
-->
<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>
<!--一對一訂單查詢,訂單內部包含用戶屬性-->
<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關聯(lián)查詢
VideoOrderMapper videoOrderMapper =sqlSession.getMapper(VideoOrderMapper.class);
List<VideoOrder> videoOrderList = videoOrderMapper.queryVideoOrderList();
System.out.println(videoOrderList.toString());
ResultMap復雜對象一對多查詢結果映射之collection
collection: 一對多查詢結果查詢映射,比如user有多個訂單
<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對象
-->
<collection property="videoOrderList" ofType="VideoOrder">
<!--配置主鍵,管理理order的唯?一標識-->
<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關聯(lián)查詢
VideoOrderMapper videoOrderMapper =sqlSession.getMapper(VideoOrderMapper.class);
//resultmap collection測試
List<User> userList = videoOrderMapper.queryUserOrder();
System.out.println(userList.toString());
Mybatis3.X ResultMap復雜對象查詢總結
總結ResultMap的復雜對象查詢
- association映射的是一個pojo類,處理一對一的關聯(lián)關系。
- collection映射的一個集合列表,處理的是一對多的關聯(lián)關系。
- 模板
<!--column不做限制,可以為任意表的字段,而property須為type定義的pojo屬性-->
<resultMap id=“唯一的標識”type=“映射的pojo對象">
<id column="表的主鍵字段,或查詢語句中的別名字段”jdbcrype="字段類型”property=“映射pojo對象的主鍵屬性"/>
<result column="表的一個字段”jdbcrype="字段類型”property=“映射到pojo對象的一個屬性"/>
<association property="pojo的一個對象屬性”javarype="pojo關聯(lián)的pojo對象">
<id column="關聯(lián)pojo對象對應表的主鍵字段”jdbcrype="字段類型”property="關聯(lián)pojo對象的屬性"/>
<result column="表的字段”jdbcrype="字段類型”property="關聯(lián)pojo對象的屬性"/>
</association>
<!--集合中的property 需要為oftype定義的pojo對象的屬性-->
<collection property="pojo的集合屬性名稱”ofType="集合中單個的pojo對象類型">
<id column="集合中pojo對象對應在表的主鍵字段”jdbcrype="字段類型”property=“集合中pojo對象的主鍵屬性”/>
<result column="任意表的字段”jdbcrype="字段類型”property="集合中的pojo對象的屬性”/>
</collection>
</resultMap>
以上就是關于MyBatis3.X復雜Sql查詢相關知識總結的全部內容,想要了解更多相關MyBatis框架的其他內容請搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持!