你不得不知道的MyBatis基礎知識之<resultMap>(4)
簡述
resultMap 元素是 MyBatis 中最重要最強大的元素。它可以讓你從 90% 的 JDBC ResultSets 資料提取程式碼中解放出來,並在一些情形下允許你進行一些 JDBC 不支援的操作。實際上,在為一些比如連線的複雜語句編寫對映程式碼的時候,一份 resultMap 能夠代替實現同等功能的數千行程式碼。ResultMap 的設計思想是,對簡單的語句做到零配置,對於複雜一點的語句,只需要描述語句之間的關係就行了。
一些注意事項
- MyBatis 屬於持久層 主要寫的就是sql
- 非查詢一定要手動的使用commit()!
- 產品依賴著產品型別 一個產品對應著一種產品型別
<//resultMap>是Maybatis的結果集封裝,搭配<//select><//association>等標籤的resultMap屬性使用
- 必須有id
- 必須是一個已存在的類
- <//association>標籤只能放在<//resultMap>標籤中的最後面
程式碼示例
我們這裡以山科超市的訂單模組為例:
訂單表的大致邏輯是:orderid, uid, orderprice, addtime, ordersdetails,一個訂單隻對應一個使用者,一個訂單可以對應多個訂單詳情;一個訂單詳情表中對應了一個產品,一個產品又對應了一個產品類別
OrdersMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lazy.mappers.OrdersMapper">
<sql id="orderSql"> o.orderid,u.uname,o.orderprice,o.addtime,p.pcode,p.pname,od.pnum</sql>
<sql id="orderUserSql">u.uname, o.orderid,o.orderprice,o.addtime,p.pcode,p.pname,od.pnum</sql>
<insert id="addOrder">
INSERT INTO orders (orderid,uid,orderprice) VALUES(#{orders.orderid},#{orders.uid.uid},#{orders.orderprice})
</insert>
<resultMap id="resOrder" type="com.lazy.domain.Orders">
<id property="orderid" column="orderid"/>
<result property="orderprice" column="orderprice"/>
<result property="addtime" column="addtime"/>
<association property="uid" javaType="com.lazy.domain.Users">
<id property="uid" column="uid"/>
<result property="uname" column="uname"/>
</association>
<!-- 一對多 -->
<collection property="details" ofType="com.lazy.domain.OrderDetails">
<id property="oddid" column="oddid"/>
<result property="pnum" column="pnum"/>
<association property="pid" javaType="com.lazy.domain.Products">
<id property="pid" column="pid"/>
<result property="pcode" column="pcode"/>
<result property="pname" column="pname"/>
<association property="ptid" javaType="com.lazy.domain.PType">
<id property="ptid" column="ptid"/>
<result property="ptname" column="ptname"/>
</association>
</association>
</collection>
</resultMap>
<select id="findByOrderId" resultMap="resOrder">
SELECT <include refid="orderSql"/>
FROM orders o
INNER JOIN orderdetails od ON o.orderid = od.orderid
INNER JOIN products p ON p.pid = od.pid
INNER JOIN ptype pt ON p.ptid = pt.ptid
INNER JOIN users u ON u.uid = o.uid
WHERE o.orderid = #{orderId,jdbcType=VARCHAR}
</select>
<select id="findByUserId" resultMap="resOrder">
SELECT <include refid="orderUserSql"/>
FROM orders o
INNER JOIN orderdetails od ON o.orderid = od.orderid
INNER JOIN products p ON p.pid = od.pid
INNER JOIN ptype pt ON p.ptid = pt.ptid
INNER JOIN users u ON u.uid = o.uid
WHERE u.uid = #{uid,jdbcType=VARCHAR}
</select>
</mapper>
OrdersMapper.java
這裡一共定義了三個介面,分別用於以訂單id查詢、以使用者id查詢,以及新增訂單
package com.lazy.mappers;
import com.lazy.domain.Orders;
import org.apache.ibatis.annotations.Param;
public interface OrdersMapper {
Orders findByOrderId(@Param("orderId") String orderId);
Orders findByUserId(@Param("uid") String uid);
int addOrder(@Param("orders") Orders orders);
}
相關文章
- Mybatis基礎知識MyBatis
- 不得不知道的golang知識點之nilGolang
- js基礎知識 你不知道的變數提升的坑JS變數
- 0基礎之你不知道的JDBCJDBC
- MyBatis 框架系列之基礎初識MyBatis框架
- CSS基礎知識總結(4)CSS
- MySQL指南之基礎知識MySql
- 你不得不瞭解的HTML知識HTML
- 構建高效能佇列,你不得不知道的底層知識!佇列
- jquery基礎知識你知道哪些?jQuery
- IOS 開發不得不知道的網路知識iOS
- 你必須知道的Java基礎知識Java
- 你應該知道的HTTP基礎知識HTTP
- corejava基礎知識(4)-萬用字元Java字元
- Python基礎知識之字典Python
- Python基礎知識之集合Python
- Java基礎知識整理之this用法Java
- Java基礎知識之概述(一)Java
- php基礎知識之$GET$POSTPHP
- oracle spatial 基礎知識之五Oracle
- 介面測試之基礎知識
- 你不知道的記憶體知識記憶體
- IdentityServer4系列 | 初識基礎知識點IDEServer
- 基礎知識
- 做IT的,這些安全知識你不得不懂!
- LUA的基礎知識
- SAP SD基礎知識之稅(Taxes)
- Java基礎知識整理之註解Java
- JVM學習之JVM基礎知識JVM
- Golang 基礎之併發知識 (三)Golang
- 前端基礎知識複習之CSS前端CSS
- 前端基礎知識複習之html前端HTML
- oracle spatial之基礎知識之一Oracle
- oracle spatial之基礎知識之二Oracle
- oracle spatial之基礎知識之三Oracle
- 《 Angular高階程式設計(第4版)》之“Angular 基礎知識”Angular程式設計
- 不得不知道的Python字串編碼相關的知識Python字串編碼
- MyBatis基礎:MyBatis關聯查詢(4)MyBatis