MyBatis入門(二)—— 輸入映射和輸出映射、動態sql、關聯查詢

来源:https://www.cnblogs.com/gdwkong/archive/2018/05/01/8784272.html
-Advertisement-
Play Games

本文主要介紹MyBatis映射mapper.xml中,輸入映射和輸出映射、動態sql、關聯查詢等的寫法。 ...


 一、輸入映射和輸出映射

1. parameterType(輸入類型)

1.1 傳遞簡單類型

1 <select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User">
2   SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE id = #{id}
3 </select>

1.2 傳遞pojo對象

1 <insert id="insertUser" parameterType="com.cenobitor.pojo.User">
2      INSERT INTO USER (`username`,`birthday`,`sex`,`address`)
3      VALUES (#{username},#{birthday},#{sex},#{address})
4 </insert>

Mybatis使用ognl表達式解析對象欄位的值,#{}或者${}括弧中的值為pojo屬性名稱。

1.3 傳遞pojo包裝對象

1 <!-- 1、resultType:如果要返回數據集合,只需設定為每一個元素的數據類型
2     2、 包裝的pojo取值通過 "."來獲取,如取包裝的pojo中user屬性對象里的username屬性的表達式為:user.username
3 -->
4 <select id="getUserByQueryVo" parameterType="queryvo" resultType="com.cenobitor.mybatis.pojo.User">
5      SELECT * FROM USER WHERE username LIKE '%${user.username}%'
6 </select>

2. resultType(輸出類型)

2.1 輸出簡單類型

1 <!-- 查詢用戶總記錄數,演示返回簡單類型 -->
2 <select id="getUserCount" resultType="int">
3   SELECT COUNT(1) FROM USER
4 </select>

2.2 輸出pojo對象:

1 <select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User">
2    SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE id = #{id}
3 </select>

2.3輸出pojo列表

1 <select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User">
2    SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE sex = #{sex}
3 </select>

2.4 輸出resultMap

欄位與pojo屬性不一致時引出的resultMap

 1 <!-- resultMap入門
 2   type:映射成的pojo類型
 3   id:resultMap唯一標識
 4 -->
 5 <resultMap type="order" id="orderMap">
 6 
 7   <!-- id標簽用於綁定主鍵 -->
 8   <id property="id" column="id"/>
 9 
10   <!-- 使用result綁定普通欄位 -->
11   <result property="number" column="number"/>
12   <result property="createtime" column="createtime"/>
13   <result property="note" column="note"/>
14 </resultMap>
15 
16 <!-- 使用resultMap -->
17 <select id="getOrderListResultMap" resultMap="orderMap">
18   SELECT * FROM `order`
19 </select>
二、動態sql

2.1  If

由多查詢條件拼裝引出if標簽。

 1 <!-- 演示動態sql-if標簽的使用情景 -->
 2 <select id="getUserByWhere" parameterType="user" resultType="com.cenobitor.mybatis.pojo.User">
 3   SELECT * FROM USER where 1 = 1
 4   <!-- if標簽的使用 -->
 5   <if test="id != null">
 6     and id = #{id}
 7   </if>
 8   <if test="username != null and username != ''">
 9     and username LIKE '%${username}%'
10   </if>
11 </select>

2.2 Where

 1 <!-- 演示動態sql-where標簽的使用情景 -->
 2 <select id="getUserByWhere2" parameterType="user" resultType="com.cenobitor.mybatis.pojo.User">
 3   <!-- include:引入sql片段,refid引入片段id -->
 4   SELECT * FROM USER
 5   <!-- where會自動加上where同處理多餘的and -->
 6   <where>
 7     <!-- if標簽的使用 -->
 8     <if test="id != null">
 9       and id = #{id}
10     </if>
11     <if test="username != null and username != ''">
12       and username LIKE '%${username}%'
13     </if>
14   </where>
15 </select>

 2.3 Foreach

 1 <!-- 演示動態sql-foreach標簽的使用情景 -->
 2 <select id="getUserByIds" parameterType="queryvo" resultType="com.cenobitor.mybatis.pojo.User">
 3   SELECT * FROM USER
 4   <!-- where會自動加上where同處理多餘的and -->
 5   <where>
 6     <!-- id IN(1,10,25,30,34) -->
 7     <!-- foreach迴圈標簽 
 8         collection:要遍歷的集合,來源入參 
 9         open:迴圈開始前的sql 
10         separator:分隔符 
11         close:迴圈結束拼接的sql
12     -->
13     <foreach item="uid" collection="ids" open="id IN(" separator="," close=")">
14       #{uid}
15     </foreach>
16   </where>
17 </select>

2.4 Sql片段

演示通過select * 不好引出查詢欄位名,抽取共用sql片段。

① 定義

1 <!-- sql片段 定義,id:片段唯一標識 -->
2 <sql id="user_column">
3   `id`, `username`, `birthday`, `sex`, `address`, `uuid2`
4 </sql>

② 使用

1 SELECT
2 <!-- sql片段的使用:include:引入sql片段,refid引入片段id -->
3 <include refid="user_column" />
4 FROM USER
 三、關聯查詢

3.1 一對一關聯

① 方法一,使用resultType

1 <!-- 一對一關聯查詢,使用resultType -->
2 <select id="getOrderUser" resultType="orderuser">
3   SELECT 
4     o.`id`, o.`user_id` userId, o.`number`, o.`createtime`, o.`note`, u.`username`,  u.`address`
5   FROM `order` o
6   LEFT JOIN `user` u
7   ON u.id = o.`user_id`
8 </select>

②方法二,使用resultMap

1 <!-- 一對一關聯查詢-resultMap --> 2 <resultMap type="order" id="order_user_map"> 3   <!-- id標簽用於綁定主鍵 --> 4   <id property="id" column="id"/> 5   <!-- 使用result綁定普通欄位 --> 6   <result property="userId" column="user_id"/> 7   <result property="number" column="number"/> 8   <result property="createtime" column="createtime"/> 9   <result property="note" column="note"/> 10   <!-- association:配置一對一關聯 11     property:綁定的用戶屬性 12     javaType:屬性數據類型,支持別名 13    --> 14   <association property="user" javaType="com.cenobitor.mybatis.pojo.User"> 15     <id property="id" column="user_id"/> 16     <result property="username" column="username"/> 17     <result property="address" column="address"/> 18     <result property="sex" column="sex"/> 19   </association> 20 </resultMap> 21 22 <!-- 一對一關聯查詢-使用resultMap --> 23 <select id="getOrderUser2" resultMap="order_user_map"> 24   SELECT 25   o.`id`,o.`user_id`, o.`number`, o.`createtime`, o.`note`, u.`username`, u.`address`, u.`sex` 26   FROM `order` o 27   LEFT JOIN `user` u 28   ON u.id = o.`user_id` 29 </select>

3.2一對多關聯

 1 <!-- 一對多關聯查詢 -->
 2 <resultMap type="user" id="user_order_map">
 3   <id property="id" column="id" />
 4   <result property="username" column="username" />
 5   <result property="birthday" column="birthday" />
 6   <result property="address" column="address" />
 7   <result property="sex" column="sex" />
 8   <result property="uuid2" column="uuid2" />
 9   <!-- collection:配置一對多關係
10     property:用戶下的order屬性
11     ofType:property的數據類型,支持別名
12   -->
13   <collection property="orders" ofType="order">
14     <!-- id標簽用於綁定主鍵 -->
15     <id property="id" column="oid"/>
16     <!-- 使用result綁定普通欄位 -->
17     <result property="userId" column="id"/>
18     <result property="number" column="number"/>
19     <result property="createtime" column="createtime"/>
20   </collection>
21 </resultMap>
22 <!-- 一對多關聯查詢 -->
23 <select id="getUserOrder" resultMap="user_order_map">
24   SELECT
25   u.`id`, u.`username`,u.`birthday`,u.`sex`,u.`address`,u.`uuid2`,o.`id` oid,o.`number`,o.`createtime`
26   FROM `user` u
27   LEFT JOIN `order` o
28   ON o.`user_id` = u.`id`
29 </select>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...