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.mzph.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 …