標籤: mybatisjava
[TOC]git
本文使用兩種方式(resultType和resultMap)實現一對一查詢,查詢訂單信息,關聯查詢建立訂單的用戶信息github
肯定查詢的主表:訂單表sql
肯定查詢的關聯表:用戶表mybatis
關聯查詢使用內鏈接?仍是外鏈接?app
因爲orders表中有一個外鍵(user_id),經過外鍵關聯查詢用戶表只能查詢出一條記錄,可使用內鏈接。學習
SELECT orders.*, USER.username, USER.sex, USER.address FROM orders, USER WHERE orders.user_id = user.id
將上邊sql查詢的結果映射到pojo中,pojo中必須包括全部查詢列名。測試
原始的Orders.java不能映射所有字段,須要新建立的pojo。網站
建立一個pojo繼承包括查詢字段較多的po類。this
對應數據表的幾個pojo類(Items,Orderdetail,Orders)就是把該類的屬性名設爲和數據表列字段名相同,併爲這些屬性添加getter和setter,在這裏就不貼代碼了,只貼出對應於關聯查詢的自定義pojo類OrdersCustom
的代碼
package com.iot.mybatis.po; /** * * <p>Title: OrdersCustom</p> * <p>Description: 訂單的擴展類</p> */ //經過此類映射訂單和用戶查詢的結果,讓此類繼承包括 字段較多的pojo類 public class OrdersCustom extends Orders{ //添加用戶屬性 /*USER.username, USER.sex, USER.address */ private String username; private String sex; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
<!-- 查詢訂單關聯查詢用戶信息 --> <select id="findOrdersUser" resultType="com.iot.mybatis.po.OrdersCustom"> SELECT orders.*, user.username, user.sex, user.address FROM orders, user WHERE orders.user_id = user.id </select>
//查詢訂單關聯查詢用戶信息 public List<OrdersCustom> findOrdersUser()throws Exception; }
使用resultMap將查詢結果中的訂單信息映射到Orders對象中,在orders類中添加User屬性,將關聯查詢出來的用戶信息映射到orders對象中的user屬性中。
<!-- 訂單查詢關聯用戶的resultMap 將整個查詢的結果映射到com.iot.mybatis.po.Orders中 --> <resultMap type="com.iot.mybatis.po.Orders" id="OrdersUserResultMap"> <!-- 配置映射的訂單信息 --> <!-- id:指定查詢列中的惟一標識,訂單信息的中的惟 一標識,若是有多個列組成惟一標識,配置多個id column:訂單信息的惟一標識列 property:訂單信息的惟一標識列所映射到Orders中哪一個屬性 --> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <!-- 配置映射的關聯的用戶信息 --> <!-- association:用於映射關聯查詢單個對象的信息 property:要將關聯查詢的用戶信息映射到Orders中哪一個屬性 --> <association property="user" javaType="com.iot.mybatis.po.User"> <!-- id:關聯查詢用戶的惟 一標識 column:指定惟 一標識用戶信息的列 javaType:映射到user的哪一個屬性 --> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="address" property="address"/> </association> </resultMap>
<!-- 查詢訂單關聯查詢用戶信息 --> <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap"> SELECT orders.*, user.username, user.sex, user.address FROM orders, user WHERE orders.user_id = user.id </select>
//查詢訂單關聯查詢用戶使用resultMap public List<Orders> findOrdersUserResultMap()throws Exception;
@Test public void testFindOrdersUserResultMap() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); // 建立代理對象 OrdersMapperCustom ordersMapperCustom = sqlSession .getMapper(OrdersMapperCustom.class); // 調用maper的方法 List<Orders> list = ordersMapperCustom.findOrdersUserResultMap(); System.out.println(list); sqlSession.close(); }
實現一對一查詢: