MyBatis3.X復雜Sql查詢的語句
MyBatis3.X復雜Sql查詢
MyBatis3.X的resultMap
1.Mybatis的sql語句返回的結果有兩種
- resultType
- 查詢出的字段在相應的pojo中必須有和它相同的字段對應,或者基本數據類型
- 適合簡單查詢
- resultMap
需要自定義字段,或者多表查詢,一對多等關系,比resultType更強大
適合復雜查詢
<resultMap id="VideoResultMap" type="Video"> <!-- id 指定查詢列列的唯⼀一標示 column 數據庫字段的名稱 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語句到對應的方法名參數和返回值 mybatis是使用接口動態代理 --> <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關聯查詢 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關聯查詢 VideoOrderMapper videoOrderMapper =sqlSession.getMapper(VideoOrderMapper.class); //resultmap collection測試 List<User> userList = videoOrderMapper.queryUserOrder(); System.out.println(userList.toString());
Mybatis3.X ResultMap復雜對象查詢總結
總結ResultMap的復雜對象查詢
- association映射的是一個pojo類,處理一對一的關聯關系。
- collection映射的一個集合列表,處理的是一對多的關聯關系。
- 模板
<!--column不做限制,可以為任意表的字段,而property須為type定義的pojo屬性--> <resultMap id=“唯一的標識”type=“映射的pojo對象"> <id column="表的主鍵字段,或查詢語句中的別名字段”jdbcrype="字段類型”property=“映射pojo對象的主鍵屬性"/> <result column="表的一個字段”jdbcrype="字段類型”property=“映射到pojo對象的一個屬性"/> <association property="pojo的一個對象屬性”javarype="pojo關聯的pojo對象"> <id column="關聯pojo對象對應表的主鍵字段”jdbcrype="字段類型”property="關聯pojo對象的屬性"/> <result column="表的字段”jdbcrype="字段類型”property="關聯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復雜Sql查詢內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found