MyBatis進階之結果集映射注解版

在這里插入圖片描述

文章目錄

    • 注解實現結果集映射
    • 注解實現關系映射
    • 常用功能注解匯總

注解實現結果集映射

注意
配置結果集映射,只用看 SQL 執行結果,不看 SQL 語句!

注意
由于注解在映射結果集上沒有實現 <resultMap> 的 100% 功能,因此,十全十美的方案是在 mapper.xml 配置文件中通過 <resultMap> 映射結果集,然后再在接口中引用它。

因此,一下內容僅作了解。

我們在使用 MyBatis 不可能都是遇到最簡單的情況:表的列名與類的屬性名一致。當表的列明與類的屬性名不一致時,需要去配置結果集映射。

通過注解進行結果集的映射是通過使用 @Results@Result@ResultMap 注解完成的。其中,

  • @Results@Result 結合使用進行結果集映射;

  • @ResultMap 則是在別處『調用』映射規則。

  • @Results@Result 只需要配置一次,而 @ResultMap 會在多出使用。

例如:

@Select("select * from dept where deptno=#{id}")
@Results(id = "department", value = {@Result(property = "id", column = "deptno"),@Result(property = "name", column = "name"),@Result(property = "location", column = "loc")
})
public Department selectByPK(int id);@Select("select * from dept")
@ResultMap("department")
public List<Department> select();

注解實現關系映射

注意
配置結果集映射,只用看 SQL 執行結果,不看 SQL 語句!

一對一、一對多和多對多的關系映射就是在結果集映射的基礎上再使用 @One@Many 注解。

@Select("select * from emp where empno=#{id}")
@Results(id = "employee", value = {@Result(property = "empno", column = "empno"),@Result(property = "ename", column = "ename"),@Result(property = "job", column = "job"),@Result(property = "mgr", column = "mgr"),@Result(property = "hiredate", column = "hiredate"),@Result(property = "sal", column = "sal"),@Result(property = "comm", column = "comm"),@Result(property = "dept", column = "deptno", one = @One(select = "dao.DepartmentMapper.selectByPK"))
})
public Employee selectByPK(int id);@Select("select * from emp where deptno = #{id}")
@ResultMap("employee")
public List<Employee> selectByEmployeeID(int deptno);
@Select("select * from dept where deptno=#{id}")
@Results(id = "department", value = {@Result(property = "id", column = "deptno"),@Result(property = "name", column = "deptno"),@Result(property = "location", column = "loc"),@Result(property = "employeeList", column = "deptno", many = @Many(select = "dao.EmployeeMapper.selectByDepartmentID"))
})
public Department selectByPK(int id);

常用功能注解匯總

注解目標相對應的 XML描述
@Param參數N/A如果你的映射器的方法需要多個參數,這個注解可以被應用于映射器的方法參數來給每個參數一個名字。
否則,多參數將會以它們的順序位置來被命名(不包括任何 RowBounds 參數)比如。#{param1} , #{param2} 等,這是默認的。
使用 @Param(“person”),參數應該被命名為 #{person}
@Insert方法<insert>這些注解中的每一個代表了執行的真實 SQL。它們每一個都使用字符串數組(或單獨的字符串)
@Update<update>如果傳遞的是字符串數組,它們由每個分隔它們的單獨空間串聯起來。
@Delete<delete>
@Select<select>
@Results方法<resultMap>結果映射的列表,包含了一個特別結果列如何被映射到屬性或字段的詳情。屬性有 valueid
value 屬性是 Result 注解的數組。
id 的屬性是結果映射的名稱。
@ResultN/A<result>在列和屬性或字段之間的單獨結果映射。屬性有 id,column,property,javaType,jdbcType,typeHandler,one,many。
<id>id 屬性是一個布爾值,表示了應該被用于比較(和在 XML 映射中的 <id> 相似)的屬性。
one 屬性是單獨的聯系,和 <association> 相似 , 而 many 屬性是對集合而言的 , 和 <collection> 相似。
@ResultMap方法N/A這個注解給 @Select 或者**@SelectProvider** 提供在 XML 映射中的 <resultMap> 的id。
這使得注解的 select 可以復用那些定義在 XML 中的 ResultMap。
如果同一 select 注解中還存在 @Results 或者 @ConstructorArgs ,那么這兩個注解將被此注解覆蓋。
@OneN/A<association>復雜類型的單獨屬性值映射。屬性有 select,已映射語句(也就是映射器方法)的完全限定名,它可以加載合適類型的實例。
注意:聯合映射在注解 API 中是不支持的。這是因為 Java 注解的限制,不允許循環引用。
fetchType 會覆蓋全局的配置參數 lazyLoadingEnabled
@ManyN/A<collection>映射到復雜類型的集合屬性。屬性有 select,已映射語句(也就是映射器方法)的全限定名,它可以加載合適類型的實例的集合,fetchType 會覆蓋全局的配置參數 lazyLoadingEnabled 。 注意聯合映射在注解 API 中是不支持的。這是因為 Java 注解的限制,不允許循環引用。
@InsertProvider方法<insert>這些可選的 SQL 注解允許你指定一個類名和一個方法在執行時來返回運行允許創建動態的 SQL。基于執行的映射語句,MyBatis 會實例化這個類,然后執行由 provider 指定的方法。
@UpdateProvider<update>You can pass objects that passed to arguments of a mapper method, “Mapper interface type” and “Mapper method” via theProviderContext(available since MyBatis 3.4.5 or later) as method argument. (In MyBatis 3.4 or later, it’s allow multiple parameters)
@DeleteProvider<delete>屬性有 typemethodtype 屬性是類。method 屬性是方法名。
@SelectProvider<select>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210455.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210455.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode763. Partition Labels

文章目錄 一、題目二、題解 一、題目 You are given a string s. We want to partition the string into as many parts as possible so that each letter appears in at most one part. Note that the partition is done so that after concatenating all the parts in orde…

java 有一個N位數字,各位加起來不超過M。

java 有一個N位數字&#xff0c;各位加起來不超過M。M<1000000 import java.util.*; //1:無需package //2: 類名必須Main, 不可修改public class Main { public static void main(String[] args) {Scanner scan new Scanner (System.in);int n scan.nextInt();int m scan…

【車載開發系列】Visio工具使用小技巧

【車載開發系列】Visio工具使用小技巧 【車載開發系列】Visio工具使用小技巧 【車載開發系列】Visio工具使用小技巧一. Word中編輯Visio技巧二. Word中插入visio圖形的問題三. 總結 一. Word中編輯Visio技巧 本節主要介紹了Microsoft Word中編輯Visio圖形的具體方法。 在 Word…

鴻蒙(HarmonyOS)應用開發——從網絡獲取數據(題目答案)

判斷題 1.在http模塊中&#xff0c;多個請求可以使用同一個httpRequest對象&#xff0c;httpRequest對象可以復用。 錯誤(False) 2.使用http模塊發起網絡請求后&#xff0c;可以使用destroy方法中斷網絡請求。 正確(True) 3.Web組件onConfirm(callback: (event?: { url: …

單臂路由與三層交換機

單臂路由 劃分VLAN后同一VLAN的計算機屬于同一個廣播域&#xff0c;同一VLAN的計算機之間的通信是不成問題的。然而&#xff0c;處于不同VLAN的計算機即使是在同一交換機上&#xff0c;它們之間的通信也必須使用路由器。 圖&#xff08;a&#xff09;是一種實現VLAN間路由的方…

人工智能原理復習

緒論 人工智能原理復習–緒論 知識表示 人工智能原理復習–知識表示&#xff08;一&#xff09; 人工智能原理復習–知識表示&#xff08;二&#xff09; 確定性推理 人工智能原理復習–確定性推理 不確定性推理 人工智能原理復習–不確定推理 搜索策略 人工智能原理復…

光伏連接器

光伏連接器 電子元器件百科 文章目錄 光伏連接器前言一、光伏連接器是什么二、光伏連接器的類別三、光伏連接器的應用實例四、光伏連接器的作用原理總結前言 常用的光伏連接器類型包括MC4、MC3、Amphenol和Tyco等,它們根據連接方式、電氣性能和標準規范等因素進行設計和選擇…

【原創】【一類問題解決】有正定陣A,讓求可逆陣R使得A=RTR(或A=RRT)的策略

【問題背景】有正定陣A&#xff0c;讓求可逆陣R使得ARTR&#xff08;或ARRT&#xff09;的策略 【法一】代數法&#xff1a;轉二次型配方 【實操】構造A的二次型fxTAx&#xff0c;將f在可逆變換xPy下配方為規范型yTy(即yTEyy1y2y3)〔即相應配方系數陣為P&#xff08;-1&#x…

電腦中環境變量的設置方法

環境變量是在操作系統中一個具有特定名字的對象&#xff0c;它包含了一個或者多個應用程序所將使用到的信息。例如Windows和DOS操作系統中的path環境變量&#xff0c;當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時&#xff0c;系統除了在當前目錄下面尋找此程序外&a…

從賦碼、防竄到私域營銷,愛創科技助力西卡德高駛入發展快車道

在家居建材行業&#xff0c;西卡德高是一個繞不開的品牌。在瓷磚膠、美縫劑、防水等領域&#xff0c;西卡德高甚至一度成為這些細分產品的代名詞。西卡德高的銷售渠道以零售為主&#xff0c;其80%的產品是通過全國3000多個經銷商、3000多家專賣店、4000多個裝修師傅社群以及近2…

C++中的pair

一、頭文件 pair放在#include <utility>里面 二、作用與用法 其實就是一個存放2個不同數據類型數據對的一個結構。或者你可以直接理解為&#xff0c;放數據對的結構體。比如&#xff1a; pair<int ,string>p&#xff1b; 就差不多相當于 struct pair {int fi…

java泛型的使用

標題&#xff1a;Java泛型的使用 概要&#xff1a; Java中的泛型是一項強大的特性&#xff0c;可以讓我們編寫更加通用、類型安全的代碼。本文將介紹Java泛型的基本語法和使用方法&#xff0c;并通過示例代碼來說明其優勢。 正文&#xff1a; 泛型的基本概念 泛型是Java引入的…

class_2:Java概念 java se ee me jdk jre jvm

一、什么是Java&#xff1f; Java是一門面向對象的編程語言&#xff0c;不僅吸收了C語言的各種優點&#xff0c;還摒棄了C里難以理解的多繼承、指針等概念&#xff0c;因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表&#xff0c;極好地…

JDK 9 模塊化系統 (Module System) 和 多版本兼容 Jar (Multi-Release Jar)

博文目錄 文章目錄 Module System原因JDK 模塊化模塊描述文件關鍵字 啟用模塊化測試結論 Multi-Release jar (MRJAR)原因原理結論用 IDEA 創建多版本兼容 Jar項目結構pom.xml測試 Module System 原因 Java 9引入了模塊化系統的主要原因是為了解決Java平臺面臨的復雜性和可維…

線程的使用(二)

新增實現方式之實現Callable接口 特點 1、可以有返回值。 2、方法可以拋異常。 3、支持泛型的返回值。 4、需借助FutureTask類&#xff0c;比如獲取返回值。 步驟 1、創建一個實現Callable接口的實現類。 2、重寫call方法&#xff0c; 將此線程需執行的操作聲明在call&…

C++中STL的容器vector

文章目錄 什么是vectorvector與普通順序表不同的點 vector的成員函數operatoroperator[]begin與end與iteratorsize()capacityresizeemptyreservepush_backpop_backinserteraseswapclear成員變量 總結 什么是vector vector&#xff1a;是數據結構里面的順序表&#xff0c;開辟一…

【LeetCode刷題】數組篇2

&#x1f387;數組中等題Part &#x1f308; 開啟LeetCode刷題之旅 &#x1f308; 文章目錄 &#x1f387;數組中等題Part&#x1f370;229.多數元素II&#x1f451;思路分析1.哈希表法2.摩爾投票法(進階) &#x1f370;15.三數之和&#x1f451;思路分析1.排序雙指針 &#x…

ES6拓展API

1.對象API拓展 is 判斷兩個值是否相等 is(0,-0);false is(NaN,NaN) true (NaN NaN) false // 1.is 判斷兩個值是否相等 console.log(Object.is(1,1)); console.log(Object.is(0,-0));//返回false console.log(0 -0); console.log(Object.is(NaN,NaN)); console.log(NaN…

音樂曲譜軟件Guitar Pro 8.1.1 破解版下載和網盤補丁

Guitar Pro 8.1.1 for Mac 中文破解版是一款功能強大的音樂曲譜軟件&#xff0c;非常適合學習如何玩&#xff0c;改進技巧&#xff0c;重現喜愛的歌曲或陪伴自己。可以幫助我們進行吉他的學習、繪譜與創作&#xff0c;它包含了幾乎所有的吉他現有指法及音色&#xff0c;在做彈撥…

角谷定理 C語言xdoj32

角谷定理定義如下&#xff1a; 對于一個大于1的整數n&#xff0c;如果n是偶數&#xff0c;則n n / 2。如果n是奇數&#xff0c;則n 3 * n 1&#xff0c;反復操作后&#xff0c;n一定為1。 例如輸入22的變化過程&#xff1a; 22 ->11 -> 34 -> 17 -> 52 -> 26 …