【MyBatis】資料庫的一對多查詢:關於resultMap的使用
阿新 • • 發佈:2018-12-16
利用resultMap,能夠將查詢到的複雜資料(比如查詢到幾個表中資料)對映到一個結果集當中。
(1)如下圖所示,在進行一對多查詢時:
(2)通常要求不能出現重複記錄,因此需要對結果資料可以進行整合
(3)解決方案:利用resultMap。程式碼如下:
import lombok.Data; import java.util.List; @Data public class Orders { /** * 訂單ID */ private Integer order_id; /** * 消費者ID */ private Integer consumer_id; /** * 消費者姓名 */ private String consumer_name; /** * 建立時間 */ private String createtime; /** * 消費者資訊 */ private Consumer consumer; /** * 訂單詳情 */ private List<OrderDetail> order_detail_list; }
orderDetailMapper.xml檔案程式碼:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.demo.mybatis.Dao.OrderDao"> <!-- 配置對映資訊 --> <resultMap type="com.demo.mybatis.mapper.Orders" id="ordersResultMap"> <!-- order_id:指定查詢列中的唯一標識。注意:若唯一標識由多個列組成,則需要配置多個id column:對應資料庫欄位 property: 對應Orders實體類的屬性 --> <id column="order_id" property="order_id"/> <result column="consumer_id" property="consumer_id"/> <result column="consumer_name" property="consumer_name" /> <result column="createtime" property="createtime"/> <!-- association:用於對映關聯查詢單個物件的資訊 --> <association property="consumer" javaType="com.demo.mybatis.mapper.consumer"> <id column="consumer_id" property="consumer_id"/> <result column="consumer_name" property="consumer_name"/> <result column="age" property="age"/> <result column="phone_num" property="phone_num"/> <result column="address" property="address"/> </association> <!-- collection:對關聯查詢到多條記錄對映到集合物件中 --> <collection property="order_detail_list" ofType="com.demo.mybatis.mapper.Orderdetail"> <id column="order_detail_id" property="order_detail_id"/> <result column="order_id" property="order_id"/> <result column="product_id" property="product_id"/> <result column="product_name" property="product_name"/> </collection> </resultMap> <!-- 查詢訂單關聯查詢使用者資訊,使用resultMap --> <select id="queryOrders" parameterType="com.demo.mybatis.mapper.OrderCriteria" resultMap="ordersResultMap"> SELECT o.*, c.age, c.phone_num, c.address, od.order_detail_id, od.product_id, od.product_name FROM orders o LEFT JOIN consumer c ON c.consumer_id = o.consumer_id LEFT JOIN order_detail od ON o.order_id = od.order_id WHERE o.consumer_id = 1 OR o.consumer_id = 3 </select> </mapper>