MyBatis3.X復雜Sql查詢的語句
MyBatis3.X復雜Sql查詢
MyBatis3.X的resultMap
1.Mybatis的sql語句返回的結(jié)果有兩種
- resultType
- 查詢出的字段在相應的pojo中必須有和它相同的字段對應,或者基本數(shù)據(jù)類型
- 適合簡單查詢
- resultMap
需要自定義字段,或者多表查詢,一對多等關(guān)系,比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復雜對象一對一查詢結(jié)果映射之a(chǎn)ssociation
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> <!--一對一訂單查詢,訂單內(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復雜對象一對多查詢結(jié)果映射之collection
collection: 一對多查詢結(jié)果查詢映射,比如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關(guān)聯(lián)查詢 VideoOrderMapper videoOrderMapper =sqlSession.getMapper(VideoOrderMapper.class); //resultmap collection測試 List<User> userList = videoOrderMapper.queryUserOrder(); System.out.println(userList.toString());
Mybatis3.X ResultMap復雜對象查詢總結(jié)
總結(jié)ResultMap的復雜對象查詢
- association映射的是一個pojo類,處理一對一的關(guān)聯(lián)關(guān)系。
- collection映射的一個集合列表,處理的是一對多的關(guān)聯(lián)關(guān)系。
- 模板
<!--column不做限制,可以為任意表的字段,而property須為type定義的pojo屬性--> <resultMap id=“唯一的標識”type=“映射的pojo對象"> <id column="表的主鍵字段,或查詢語句中的別名字段”jdbcrype="字段類型”property=“映射pojo對象的主鍵屬性"/> <result column="表的一個字段”jdbcrype="字段類型”property=“映射到pojo對象的一個屬性"/> <association property="pojo的一個對象屬性”javarype="pojo關(guān)聯(lián)的pojo對象"> <id column="關(guān)聯(lián)pojo對象對應表的主鍵字段”jdbcrype="字段類型”property="關(guān)聯(lián)pojo對象的屬性"/> <result column="表的字段”jdbcrype="字段類型”property="關(guān)聯(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>
到此這篇關(guān)于MyBatis3.X復雜Sql查詢的文章就介紹到這了,更多相關(guān)MyBatis復雜Sql查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot快速搭建ftpserver服務端的詳細步驟
基于springboot,使用ftpserver快速搭建一個FTP服務端,搭建過程很簡單,我們把過程分成4個步驟,一分鐘內(nèi)快速完成構(gòu)建,感興趣的朋友跟隨小編一起看看吧2023-11-11詳解SpringMVC中的四種跳轉(zhuǎn)方式、視圖解析器問題
這篇文章主要介紹了SpringMVC的四種跳轉(zhuǎn)方式、視圖解析器,springmvc核心配置文件和視圖解析器的使用,添加視圖解析器,通過案例講解四種跳轉(zhuǎn)方式,需要的朋友可以參考下2022-10-10新建Maven工程出現(xiàn)Process?Terminated的問題解決
當Maven出現(xiàn)"Process terminated"錯誤時,這通常是由于配置文件或路徑錯誤導致的,本文主要介紹了新建Maven工程出現(xiàn)Process?Terminated的問題解決,感興趣的可以了解一下2024-04-04SpringBoot整合mybatis-plus實現(xiàn)分頁查詢功能
這篇文章主要介紹了SpringBoot整合mybatis-plus實現(xiàn)分頁查詢功能,pringBoot分頁查詢的兩種寫法,一種是手動實現(xiàn),另一種是使用框架實現(xiàn),現(xiàn)在我將具體的實現(xiàn)流程分享一下,需要的朋友可以參考下2023-11-11JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql
這篇文章主要給大家介紹了關(guān)于JDBC中如何使用Java8的日期LocalDate和LocalDateTime的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-09-09JVM內(nèi)存結(jié)構(gòu):程序計數(shù)器、虛擬機棧、本地方法棧
JVM 基本上是每家招聘公司都會問到的問題,它們會這么無聊問這些不切實際的問題嗎?很顯然不是。由 JVM 引發(fā)的故障問題,無論在我們開發(fā)過程中還是生產(chǎn)環(huán)境下都是非常常見的2021-06-06