当前位置: 首页 > news >正文

MyBatis基础之注解与SQL 语句构建器

在这里插入图片描述

文章目录

    • 注解实现简单增删改查
    • SQL 语句构建器
      • @SelectProvider举例

注解实现简单增删改查

在 MyBatis 的核心配置文件中,你需要配置的不是 mapper 映射文件,而是 Mapper 接口所在的包路径。

<!-- 在配置文件中 关联包下的 接口类-->
<mappers><package name="com.example.dao"/>
</mappers>

另外,我们也不再需要 mapper 映射文件。对于 DAO 中的方法所对应的 SQL 语句,我们直接以注解的形式标注在方法上。

public interface DepartmentMapper {@Select("select * from dept where deptno = #{id}")Department selectByPK(int id);@Select("select * from dept")List<Department> select();@Delete("delete from dept where deptno = #{id}")int delete(int id);@Insert("insert into dept values(NULL, #{name}, #{location})")@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "deptno")int insert(Department dept);
}

上述代码中的注解很好理解。唯一需要注意的是,如果在执行 insert 语句时,需要启用 MyBatis 的「主键回填」功能,需要多使用一个 @Options 注解。

其实上面的接口的定义中所使用的注解的作用显而易见,本质上就是把你曾经写在 XML 配置文件中的 SQL 语句「搬」到了 Java 代码中。

SQL 语句构建器

@SelectProvider举例

@SelectProvider 功能就是用来单独写一个类与方法,用来提供一些 XML 或者注解中不好写的 SQL 。

写一个简单的 @SelectProvider 的用法:

先在DepartmentMapper/DepartmentDao 中写一个接口,配上注解。

@SelectProvider(type = MySelectSqlProvider.class, method = "selectByPK")
Department selectDepartmentByPK(long id);

新建MySelectSqlProvider类,添加selectByPK方法,这个方法返回你「心里想要」执行的 SQL 语句:

public class MySelectSqlProvider {public String selectByPK(Long id) {return "SELECT * FROM department where id = " + id;}
}

我们在这里直接返回了一个 String,当然你开可以用 StringBuffer 对象来拼接一个 SQL 语句,这样可读性更好一些。

public class MySelectSqlProvider {public String selectByPK(@Param("id") Long id, @Param("name") String name){StringBuffer sql = new StringBuffer();sql.append(" SELECT * FROM department where id = #{id}");sql.append(" and name = #{name} ");return sql.toString();}
}

更多、更优雅的写法是:通过 MyBatis 中的 SQL 工具类(SQL Builder 工具类已被淘汰)的拼接一个 SQL 语句。SQL 工具类的写法在Mybatis官网-SQL 语句构建器 。

最后在Service中调用Mapper方法即可

[!attention] 注意
在使用 @SelectProvider 时,我们在 XML 中没有对应的 SQL(甚至 myabtis 甚至都不知道有 XML 配置文件的存在,因为我们在核心配置文件中映射的是 dao 接口所在的包,而不是 Mapper.xml 配置文件),而且我们在接口的查询方法上也没有 @Select 注解修饰,只有 @SelectProvider 注解,@SelectProvider 中两个属性:type 为提供 SQL 语句(字符串)的类,method 指定提供 SQL 语句(字符串)的具体方法。

另外,除了有 @SelectProvider 之外,还有 @InsertProvider@UpdateProvider@DeleteProvider

相关文章:

MyBatis基础之注解与SQL 语句构建器

文章目录 注解实现简单增删改查SQL 语句构建器SelectProvider举例 注解实现简单增删改查 在 MyBatis 的核心配置文件中&#xff0c;你需要配置的不是 mapper 映射文件&#xff0c;而是 Mapper 接口所在的包路径。 <!-- 在配置文件中 关联包下的 接口类--> <mappers&…...

Spring Boot项目搭建流程

Spring Boot是一款基于Spring Framework的开源框架&#xff0c;用于快速构建独立的、可运行的、生产级的Spring应用程序。它通过自动化配置、减少样板代码和默认的项目结构&#xff0c;极大地简化了Spring应用程序的开发过程。本文将详细介绍Spring Boot项目搭建的流程。 一、…...

VSCode插件开发之contributes和命令

VSCode插件开发 package.jsoncontributesconfigurationconfigurationDefaultscommandsmenuskeybindingsviewsviewsContainerscustomEditors 命令回调参数函数编辑器命令执行命令获取所有命令复杂命令 package.json contributes 之前说到 package.json 是 vscode 扩展的清单文…...

适用于Windows的远程传输大文件软件!

​AnyViewer可在设备之间快速的远程传输文件&#xff0c;并支持远程传输大文件&#xff0c;传输速度可达10MB/S&#xff0c;同时&#xff0c;还可以传输单个文件不超过1TB的文件&#xff0c;并它基于椭圆曲线加密&#xff08;ECC&#xff09;加密&#xff0c;可保护您的文件不被…...

Hydra参数

kali的hyda参数 参数&#xff1a; hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns][-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT] -R 继续从上一次进度接着破解。 -S 采用SSL链接。 -s PORT 可通…...

R语言的计量经济学实践技术应用

计量经济学通常使用较小样本&#xff0c;但这种区别日渐模糊&#xff0c;机器学习在经济学领域、特别是经济学与其它学科的交叉领域表现日益突出&#xff0c;R语言是用于统计建模的主流计算机语言&#xff0c;在本次培训中&#xff0c;我们将从实际应用出发&#xff0c;重点从数…...

基于Springboot实现体质测试数据分析平台管理系统项目【项目源码+论文说明】

基于Springboot实现体质测试数据分析平台系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;体质测试数据分析及可视化设计当然也不能排除在外。体质测试数据分析及…...

JavaScript 严格模式

JavaScript 严格模式是一种在 JavaScript 编程中使用的特殊模式。它提供了一种更严格的语法和错误检查&#xff0c;以帮助开发者编写更可靠、更安全的代码。 使用严格模式的方法是在代码文件或函数的顶部添加如下语句&#xff1a; "use strict"; 作用&#xff1a;…...

安全与隐私:直播购物App开发中的重要考虑因素

随着直播购物App的崭露头角&#xff0c;开发者需要特别关注安全性和隐私问题。本文将介绍在直播购物App开发中的一些重要安全和隐私考虑因素&#xff0c;并提供相关的代码示例。 1. 数据加密 在直播购物App中&#xff0c;用户的个人信息和支付信息是极为敏感的数据。为了保护…...

Redis cluster 集群

redis集群redis集群是一个提供在多个redis节点间共享数据的程序集&#xff0c;redis集群可以支持多个master Redis集群支持多个master,每个master又可以挂载多个slave 读写分离、支持数据的高可用、支持海量数据的读写存储操作由于Cluster自动Sentinel的故障转移机制&#xff…...

服务器与网站部署知识体系目录

1.网站部署必备知识与实践操作 服务器全套基础知识&#xff1a;包含基本概念&#xff0c;作用&#xff0c;服务器选择&#xff0c;服务器管理等域名相关基础知识普及域名备案流程&#xff08;个人备案&#xff0c;腾讯云 / 阿里云&#xff09;将网站域名访问从http升级到https…...

解读提示工程(Prompt Engineering)

提示工程&#xff08;Prompt Engineering&#xff09;&#xff0c;也称为上下文提示&#xff0c;是一种通过不更新模型的权重/参数来引导LLM行为朝着特定结果的方法。这是与AI有效交流所需结果的过程。提示工程可以用于各种任务&#xff0c;从回答问题到算术推理乃至各种应用领…...

Servlet的部署与安全

1 Servlet 部署 Servlet规范关于各个东西该放在哪里有许多严格的规则。 1.1 WAR war文件代表Web归档(Web Archive)&#xff0c;war实际就是一个JAR&#xff0c;只不过扩展名是.war而不是.jar。 其采用了一种可移植的压缩形式&#xff0c;把整个Web应用结构&#xff08;去掉…...

2023版IDEA的下载、安装、配置、快捷键、模板、插件与使用

&#x1f389; 为什么会有这篇教程&#xff1a;熟悉 IDEA 并能灵活熟练使用 IDEA 能极大提高您的开发效率&#xff01;&#xff01;&#xff01; &#x1f4cd; 本文教程基于当前 idea 的最新版本 2023.2.2。 &#x1f4cd; 本文教程的所有操作图片均是实操测试截图或 gif 动态…...

vue cli和vite区别

1.Vue CLI脚手架 什么是Vue脚手架&#xff1f; 在真实开发中我们不可能每一个项目从头来完成所有的webpack配置&#xff0c;这样显示开发的效率会大大的降低&#xff1b;所以在真实开发中&#xff0c;我们通常会使用脚手架来创建一个项目&#xff0c;Vue的项目我们使用的就是…...

SQL Server修改表结构

在SQL Server中修改的关键字是 ALTER(改变;(使)更改;修改(衣服使更合身);改动&#xff09; 列操作 添加列 添加列操作 alter tabel 表名 add 列名 数据类型--给员工表添加一个邮箱 alter的翻译是&#xff08;改变&#xff09; alter table people add PeopleMail varchar(2…...

C++学习——对象的内存模型

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 对象被创建时会在栈区或者堆区分配内存。我们直观的认识是&#xff0c;如果创建了 10 个对象&#xff0c;就要分别为这 10 个对象的成员变量和成员函数分配内存&#xff0c;如下图所示…...

cpp文件操作

文件操作 数据流 在cpp中&#xff0c;流&#xff08;stream&#xff09;是一个抽象概念&#xff0c;用于描述如何从一个位置到又一个位置传输数据。流主要用于I/O操作。 数据流包括两大类&#xff1a;1. 输入流(istream)&#xff1a;数据从某个源流入程序, 2. 输出流(ostrea…...

failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848])

仔细观察我的Nacos日志后发现是Nacos没启动起来,足足花费了30分钟才启动, 应该是电脑卡机导致的,之前电脑启动Nacos很快的!!只要启动了Nacos服务就可以解决该报错! 后续: 后面是选择这个CMD里面一些内容复制,然后右键粘贴到里面好像是能刷新这个CMD的内容,然后就启动成功了...

【ROS】ros-noetic和anaconda联合使用

【ROS】ros-noetic和anaconda联合使用 文章目录 【ROS】ros-noetic和anaconda联合使用1. 安装anaconda2. 创建虚拟环境3. 查看python解释器路径4. 在虚拟环境中使用任意的包5. 创建工作空间和ros功能包进行测试Reference 1. 安装anaconda 在Ubuntu20.04中安装anaconda可以参考…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...