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,一经查实,立即删除!

相关文章

【车载开发系列】Visio工具使用小技巧

【车载开发系列】Visio工具使用小技巧 【车载开发系列】Visio工具使用小技巧 【车载开发系列】Visio工具使用小技巧一. Word中编辑Visio技巧二. Word中插入visio图形的问题三. 总结 一. Word中编辑Visio技巧 本节主要介绍了Microsoft Word中编辑Visio图形的具体方法。 在 Word…

单臂路由与三层交换机

单臂路由 划分VLAN后同一VLAN的计算机属于同一个广播域&#xff0c;同一VLAN的计算机之间的通信是不成问题的。然而&#xff0c;处于不同VLAN的计算机即使是在同一交换机上&#xff0c;它们之间的通信也必须使用路由器。 图&#xff08;a&#xff09;是一种实现VLAN间路由的方…

电脑中环境变量的设置方法

环境变量是在操作系统中一个具有特定名字的对象&#xff0c;它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量&#xff0c;当要求系统运行一个程序而没有告诉它程序所在的完整路径时&#xff0c;系统除了在当前目录下面寻找此程序外&a…

从赋码、防窜到私域营销,爱创科技助力西卡德高驶入发展快车道

在家居建材行业&#xff0c;西卡德高是一个绕不开的品牌。在瓷砖胶、美缝剂、防水等领域&#xff0c;西卡德高甚至一度成为这些细分产品的代名词。西卡德高的销售渠道以零售为主&#xff0c;其80%的产品是通过全国3000多个经销商、3000多家专卖店、4000多个装修师傅社群以及近2…

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平台面临的复杂性和可维…

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…

音乐曲谱软件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 …

电源小白入门学习3——电源系统常见元件选型MOS管、二极管、电感篇

电源小白入门学习3——电源系统常见元件选型MOS管、二极管、电感篇 MOS管二极管电感 书接上文&#xff0c;上一期我们讲了电阻、电容选型中需要注意的事项&#xff0c;下面我们接着来介绍MOS管和二极管。 MOS管 关于MOS管的基本原理和内部的一些结构&#xff0c;PN结、半导体的…

FPGA 低延时 TCP UDP IP协议栈兼容1G 10G 25G MAC

在计算和数据中心、军事和航天、政府、仪器与测量、金融服务和广播和视频等行业&#xff0c;需要高可靠性的硬件和软件产品&#xff0c;帮助客户更快地开发部署新一代产品&#xff0c;减少技术和市场风险&#xff0c;我司研发的低延迟TCP/IP的IP核的传输速率高于传统网口&#…

uni-app 设置当前page界面进入直接变为横屏模式

首先 我们打开项目的 manifest.json 在左侧导航栏中找到 源码视图 然后找到 app-plus 配置 在下面加上 "orientation": [//竖屏正方向"portrait-primary",//竖屏反方向"portrait-secondary",//横屏正方向"landscape-primary",//横屏…

99、NeRF ray space

CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于&#xff0c;如上图&#xff0c;小孔成像得到的图像是倒立的&#xff0c;但是我们希望得到的图像是正向的&#xff0c;因此&#xff0c;我们选择小孔前成像。 从 3D 到 2D 的投影&#xff0c;…

Grad-CAM原理

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 只要大家一提到深度学习 缺乏一定的解释性 比如说在我们之前讲的分类网络当中 网络它为什么要这么预测 它针对每个类别所关注的点在哪里呢 在great cam这篇论文当中呢 就完美的解决了在cam这篇论…

java多线程(常用方法、实现方式、线程安全问题、生命周期、线程池)

多线程相关的三组概念 程序和进程 程序&#xff08;program&#xff09;&#xff1a;一个固定的运行逻辑和数据的集合&#xff0c;是一个静态的状态&#xff0c;一般存储在硬盘中。简单来说就是我们编写的代码 进程&#xff08;process&#xff09;&#xff1a;一个正在运行的…

游戏玩家升级不伤手之选,光威龙武系列超强性能

得益于国产存储芯片的崛起&#xff0c;现在的内存条价格太香了。要放在前几年&#xff0c;购买内存条时都会优先考虑国际一线品牌。随着内存条行业发生巨变&#xff0c;国产品牌光威GLOWAY&#xff0c;是全球前三的内存模组厂商嘉合劲威旗下品牌&#xff0c;它推出的内存条产品…

Zebec 推出由 Visa、万事达网络支持的即时支付卡,加密支付新征程

“Zebec现已推出全新的加密支付卡&#xff0c;该卡由Visa、万事达网络支持&#xff0c;具备即时、多链、非托管、无需KYC、免费等特性&#xff0c;其能够通过加密钱包与多条主流公链链接并直接调用支付&#xff0c;这将是加密支付领域的里程碑事件。” 在2023年的12月8日&#…

【python交互界面】实现动态观察图像在给定HSV范围的区域显示

HSV颜色空间 与RGB颜色空间相比&#xff0c;HSV颜色空间更适合进行颜色分析和提取特定颜色的目标。在HSV空间中&#xff0c;颜色信息被分布在不同的通道上&#xff0c;使我们能够更准确地定义颜色的范围&#xff0c;并使用阈值操作轻松地分离出我们感兴趣的区域部分。 HSV三个通…

二叉树查找值为x的结点(C语言)

目录 前言 查找值为x的结点 返回值为指针 返回值为布尔类型 整体代码 前言 在二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算&#xff08;C语言&#xff09;中&#xff0c;我们解决了关于二叉树的部分问题&#xff0c;但是还有一个问题我们放在本篇解决。 …