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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/231562.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在AWS Lambda上部署标准FFmpeg工具——Docker方案

大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 启动EC23 编写调用FFmpeg的代码4 生成docker镜像4.1 安装和启动Docker服务4.2 编写Dockerfile脚本4.3 生成镜像 5 推送镜像5.1 创建存储库5.2 给EC2赋予角色5.2.1 创建策略5.2.2…

Swagger2的使用

手写Api文档的几个痛点&#xff1a; 文档需要更新的时候&#xff0c;需要再次发送一份给前端&#xff0c;也就是文档更新交流不及时。 接口返回结果不明确 不能直接在线测试接口&#xff0c;通常需要使用工具&#xff0c;比如postman 接口文档太多&#xff0c;不好管理 Sw…

kafka学习笔记--生产者消息发送及原理

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

HNU计算机视觉作业二

前言 选修的是蔡mj老师的计算机视觉&#xff0c;上课还是不错的&#xff0c;但是OpenCV可能需要自己学才能完整把作业写出来。由于没有认真学&#xff0c;这门课最后混了80多分&#xff0c;所以下面作业解题过程均为自己写的&#xff0c;并不是标准答案&#xff0c;仅供参考 …

【改进YOLOv8】融合可扩张残差(DWR)注意力模块的小麦病害检测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着计算机视觉技术的快速发展&#xff0c;深度学习在图像识别和目标检测领域取得了巨大的突破。其中&#xff0c;YOLO&#xff08;You Only Look O…

《opencv实用探索·八》图像模糊之均值滤波、高斯滤波的简单理解

1、前言 什么是噪声&#xff1f; 该像素与周围像素的差别非常大&#xff0c;导致从视觉上就能看出该像素无法与周围像素组成可识别的图像信息&#xff0c;降低了整个图像的质量。这种“格格不入”的像素就被称为图像的噪声。如果图像中的噪声都是随机的纯黑像素或者纯白像素&am…

短剧分销平台搭建:短剧变现新模式

短剧作为今年大热的行业&#xff0c;深受大众追捧&#xff01;短剧剧情紧凑&#xff0c;几乎每一集都有高潮剧情&#xff0c;精准击中了当下网友的碎片化时间。 短剧的形式较为灵活&#xff0c;可以轻松融入各种的元素&#xff0c;比如喜剧、悬疑、爱情等&#xff0c;可以满足…

工业 4.0 | 数字孪生入门指南

工业 4.0 在多年热议后悄然落地&#xff0c;如今&#xff0c;制造、能源和运输企业正在越来越多地从中受益。 仿真未来场景 公司可以使用数字孪生仿真未来场景&#xff0c;以了解天气、车队规模或工况差异等因素对性能的影响。该方法可为维护计划提供决策支撑&#xff0c;并可…

[陇剑杯 2021]简单日志分析

[陇剑杯 2021]简单日志分析 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;某应用程序被攻击&#xff0c;请分析日志后作答&#xff1a; 黑客攻击的参数是______。&#xff08;如有字母请全部使用小写&#xff09;。 题目思路&#xff1a; 分析…

探索Python中封装的概念与实践

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 封装是面向对象编程中的核心概念&#xff0c;它能够帮助程序员隐藏类的内部细节&#xff0c;并限制对类成员的直接访问。本文将深入探讨Python中封装的机制&#xff0c;介绍封装的类型和优势&#xff0c;并提供详…

重写 AppiumService 类,添加默认启动参数,并实时显示启动日志

一、前置说明 在Appium的1.6.0版本中引入了AppiumService类&#xff0c;可以很方便的通过该类来管理Appium服务器的启动和停止。经过测试&#xff0c;使用该类的实例执行关闭server时&#xff0c;并没有释放端口号&#xff0c;会导致第二次启动时失败。另外&#xff0c;使用该…

什么是MyBatis、什么是MyBatis-Plus、简单详细上手案例

什么是MyBatis MyBatis是一个开源的Java持久层框架&#xff0c;用于简化与关系型数据库的交互。它通过将SQL语句与Java代码进行分离&#xff0c;提供了一种优雅的方式来处理数据库操作。 MyBatis的核心思想是将SQL语句与Java方法进行映射&#xff0c;使得开发人员可以通过配置…

Java LeetCode篇-深入了解二叉树的经典解法(多种方式实现:构造二叉树)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 从前序与中序遍历序列来构造二叉树 1.1 实现从前序与中序遍历序列来构造二叉树思路 1.2 代码实现从前序与中序遍历序列来构造二叉树 2.0 从中序与后序遍历序…

实用篇 | 一文学会人工智能中API的Flask编写(内含模板)

----------------------- &#x1f388;API 相关直达 &#x1f388;-------------------------- &#x1f680;Gradio: 实用篇 | 关于Gradio快速构建人工智能模型实现界面&#xff0c;你想知道的都在这里-CSDN博客 &#x1f680;Streamlit :实用篇 | 一文快速构建人工智能前端展…

【优选算法系列】【专题二滑动窗口】第三节.904. 水果成篮和438. 找到字符串中所有字母异位词

文章目录 前言一、水果成篮 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、找到字符串中所有字母异位词 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

OpenAI 首席运营官(COO)Brad Lightcap认为商业人工智能被夸大了

美国消费者新闻与商业频道&#xff08;CNBC&#xff09;是美国NBC环球集团持有的全球性财经有线电视卫星新闻台&#xff0c;是全球财经媒体中的佼佼者&#xff0c;其深入的分析和实时报导赢得了全球企业界的信任。在1991年前&#xff0c;使用消费者新闻与商业频道&#xff08;C…

node.js和npm的安装与环境配置(2023最新版)

目录 安装node.js测试是否安装成功测试npm环境配置更改环境变量新建系统变量 安装node.js 1、进入官网下载&#xff1a;node.js官网 我选择的是windows64位的&#xff0c;你可以根据自己的实际情况选择对应的版本。 2、下载完成&#xff0c;安装。 打开安装程序 接受协议 选…

链表OJ—环形链表的约瑟夫问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#xff0c;一种是正在努力学习编程的你!一个爱学编程的人。各位看官&#xff0c;我衷心的希望这篇博客能对你…

操作系统———磁盘调度算法模拟

实验目的 磁盘是可供多个进程共享的设备&#xff0c;当有多个进程都要求访问磁盘是&#xff0c;应采用一种最佳调度算法&#xff0c;以使各进程对磁盘的平均访问时间最小。目前最成用的磁盘调度算法有先来先服务&#xff08;FCFS&#xff09;&#xff0c;最短寻道时间优先&…

增加网站流量的方法

如果您的网站没有获得足够的流量&#xff0c;您可能会错过在线发展业务的重要机会。搜索引擎优化&#xff08;SEO&#xff09;可以帮助提高您网站的知名度&#xff0c;从而吸引更多客户。 SEO的重点是识别高价值的关键词&#xff0c;并将它们整合到网站的内容中&#xff0c;使…