Mybatis-动态标签

动态标签

1.用于处理SQL语句中的空白字符和多余的逗号

-- prefix:指定在SQL语句开头添加的内容。
-- prefixOverrides:指定需要移除的开头部分的内容。
-- suffix:指定在SQL语句结尾添加的内容。
-- suffixOverrides:指定需要移除的结尾部分的内容。
<select id="getUserList" parameterType="map" resultType="User">SELECT *FROM users<trim prefix="WHERE" prefixOverrides="AND | OR "><if test="name != null">AND name = #{name}</if><if test="email != null">AND email = #{email}</if></trim>
</select>

2.构建UPDATE语句中的SET

<update id="updateUser" parameterType="User">UPDATE users<set><if test="name != null">name = #{name},</if><if test="email != null">email = #{email},</if><if test="age != null">age = #{age},</if></set>WHERE id = #{id}
</update>

3.定义可重用的SQL片段

<sql id="columns">name, age, email
</sql><select id="getUser" parameterType="int" resultType="User">SELECT <include refid="columns"/>FROM usersWHERE id = #{id}
</select><insert id="insertUser" parameterType="User">INSERT INTO users (<include refid="columns"/>)VALUES (#{name}, #{age}, #{email})
</insert>-- 动态<sql>
<sql id="dynamicWhere"><where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
</sql><select id="getUser" parameterType="User" resultType="User">SELECT *FROM users<include refid="dynamicWhere"/>
</select>    -- 终极动态<sql id="selectColumns">SELECT<if test="columns != null">${columns}</if><if test="columns == null">*</if>FROM users
</sql><select id="getUser" parameterType="User" resultType="User"><include refid="selectColumns">-- 给sql标签传参?<property name="columns" value="id, name"/></include>
</select>

4.用于将表达式计算的结果绑定到变量上。可以在SQL语句中使用这些变量

<select id="getUser" parameterType="Map" resultType="User"><bind name="minAge" value="'18'"/>SELECT *FROM usersWHERE age &gt; #{minAge}
</select>-- 动态变量
<select id="getUser" parameterType="Map" resultType="User"><bind name="minAge" value="${age > 18 ? 18 : age}"/>SELECT *FROM usersWHERE age &gt;= #{minAge}
</select>

5.用于在SQL语句中生成动态的WHERE子句。可以根据条件动态地生成不同的WHERE语句

-- where中会省略开头的语句 例如: 例子中的AND
<select id="getUser" parameterType="User" resultType="User">SELECT *FROM users<where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
</select>

6.

collection:指定要遍历的集合或数组参数的名称,可以是参数对象的属性名或者是@Param注解中指定的名称。

item:指定在循环中每次遍历的元素的名称,可以在循环中使用该名称获取当前元素。

index:指定在循环中每次遍历的索引的名称,可以在循环中使用该名称获取当前元素的索引。

open:指定循环开始时的拼接字符串,默认为空字符串。

close:指定循环结束后的拼接字符串,默认为空字符串。

separator:指定每次遍历元素之间的分隔字符串,默认为空字符串。

itemIndex:指定index是否可用,取值为true或false,默认为false。

<select id="getUsersByIds" parameterType="List" resultType="User">SELECT * FROM usersWHERE id IN<foreach collection="ids" item="id" index="index" open="(" close=")" separator=",">#{id}</foreach>
</select>
-- 生成后sql :SELECT * FROM users WHERE id IN (1, 2, 3)<insert id="batchInsertUsers" parameterType="java.util.List">INSERT INTO users (name, age) VALUES<foreach collection="list" item="user" separator=",">(#{user.name}, #{user.age})</foreach>
</insert>
-- 生成后sql 
INSERT INTO users (name, age) VALUES
('Alice', 25),
('Bob', 30),
('Charlie', 28)

转义符

  1. <(小于号):需要使用<进行转义。
  2. >(大于号):需要使用>进行转义。
  3. &(和号):需要使用&进行转义。
  4. "(双引号):需要使用"进行转义。
  5. '(单引号):需要使用'进行转义。

@Options

@Options是MyBatis中的注解之一,用于为数据库操作提供一些可选配置选项。

在MyBatis中,可以通过在Mapper接口中使用@Options注解来配置一些与数据库操作相关的选项,例如设置缓存、批量操作、主键生成策略等。

常见的@Options注解选项:

  1. useCache:是否使用二级缓存,默认值为true
  2. flushCache:执行该操作时是否刷新缓存,默认值为false
  3. timeout:数据库操作的超时时间(单位:毫秒)。
  4. fetchSize:每次获取结果集的行数。
  5. statementType:语句类型,可选值为STATEMENTPREPAREDCALLABLE
  6. keyProperty:主键属性名,用于指定插入操作后生成的主键值将被设置到哪个实体类属性上。
  7. keyColumn:主键列名,用于指定插入操作后生成的主键值对应的数据库列名。
  8. useGeneratedKeys:是否使用自动生成的主键,默认值为false
-- 主键回填
@Insert("INSERT INTO users(name) VALUES(#{name})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int insertUser(User user);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从IPv4到IPv6:解密网络通信的新时代

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 从IPv4到IPv6&#xff1a;解密网络通信的新时代 前言ipv4介绍ipv6介绍IPv4与IPv6的区别IPv4地址枯竭问题和IPv6的解决方案 ipv6的优势IPv6在新兴技术领域的应用 ipv4向ipv6的过渡挑战解决方案IPv6部署…

电压比较器LM339介绍和仿真

电压比较器LM339介绍和仿真 &#x1f4d1;LM339相关特性 工作电源电压范围宽&#xff0c;单电源、双电源均可工作&#xff0c;单电源&#xff1a; 2&#xff5e;36V&#xff0c;双电源&#xff1a;1&#xff5e;18V&#xff1b;消耗电流小&#xff0c; Icc1.3mA&#xff1b;输…

2023年待业10个月共313天

2023.5.5美团毕业&#xff0c;至2024.3.14入职下一家公司&#xff0c;待业10个月共313天。这313天&#xff0c;大概经历了3个阶段&#xff1a; 第一阶段 从美团毕业后2023.5.6开始。 虽然在此之前已经开始了部分面试&#xff0c;但合适的机会不多&#xff0c;因为才毕业并不…

怎么使用JMeter进行性能测试?

一、简介 JMeter是Apache软件基金会下的一款开源的性能测试工具&#xff0c;完全由Java开发。它专注于对我们应用程序进行负载测试和性能测量&#xff0c;最初设计用于web应用程序&#xff0c;现在已经扩展到其他测试功能&#xff0c;比如&#xff1a;FTP、Database和LDAP等。…

CompletableFuture用法详解

CompletableFuture 1 前言1.1 Fork/Join1.2 Future接口的局限性 2 正文2.1 神奇的CompletableFuture2.2 CompletableFuture API2.3 组合式异步编程2.4 几个小例子 1 前言 1.1 Fork/Join 1.概念 Fork/Join 是 JDK 1.7 加入的新的线程池实现&#xff0c;它体现的是一种分治思想…

【项目实战】记录一次PG数据库迁移至GaussDB测试(下)

上一篇分享了安装、迁移&#xff0c;本篇将继续分享迁移前操作、 DRS迁移数据、迁移后一致性检查、问题总结及解决方法。 目录 四、迁移前操作 4.1 源端(PG) 4.2 目标端(GaussDB库) 五、DRS迁移数据 5.1 创建复制用户 5.2创建迁移任务。 六、迁移后一致性检查 6.1使用…

maven 基础用法 (终端界面和IDEA界面)

目录 maven定义 Maven环境配置 仓库 本地仓库 关于pom.xml 运行方式 关于maven在IDEA创建 maven定义 Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化&#xff0c; 使开发团队用极少的时间就能够自动完成工程的基础构建配置。 ​ Maven 简化了…

【HarmonyOS 4+NEXT】开发工具安装指南

&#x1f64b;‍ 一日之际在于晨 ⭐本期内容&#xff1a;开发工具安装 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS4NEXT&#xff1a;探索未来智能生态新纪元 文章目录 前言准备工作下载开发工具安装开发工具配置开发环境总结 前言 随着科技的不断进步&#xff0c;智能设…

浅析Redis④:字典dict实现

什么是dict&#xff1f; 在 Redis 中&#xff0c;dict 是指哈希表&#xff08;hash table&#xff09;的一种实现&#xff0c;用于存储键值对数据。dict 是 Redis 中非常常用的数据结构之一&#xff0c;用于实现 Redis 的键空间。 在 Redis 源码中&#xff0c;dict 是一个通用…

7-3 jmu-Java-03面向对象基础-05-覆盖(分数 3)

Java每个对象都继承自Object,都有equals、toString等方法。 现在需要定义PersonOverride类并覆盖其toString与equals方法。 1. 新建PersonOverride类 a. 属性&#xff1a;String name、int age、boolean gender&#xff0c;所有的变量必须为私有(private)。 b. 有参构造方法…

IO流-字节缓冲流

简介 缓冲流就是对原始流进行包装&#xff0c;以提高原始数据流读写数据的性能 缓冲流继承体系 缓冲流的作用 构造器API 代码示例 try(// 创建字节输入流和输出流InputStream is new FileInputStream("test.txt");OutputStream os new FileOutputStream("test…

开源项目|使用go语言搭建高效的环信 IM Rest接口(附源码)

项目背景 环信 Server SDK 是对环信 IM REST API 的封装&#xff0c; 可以节省服务器端开发者对接环信 API 的时间&#xff0c;只需要配置自己的 App Key 相关信息即可使用。 环信目前提供java和PHP版本的Server SDK&#xff0c;此项目使用go语言对环信 IM REST API 进行封装…

在比特币中,1 sat 是多少美元?

普通人绝对想不到&#xff0c;比特币能在2024年达到这个价值&#xff0c;早知道的话&#xff0c;我当初就是破釜沉舟也得买一个啊。 而在4月19号&#xff0c;也将迎来比特币再次减半。减半并不是说玩家手中的比特币要被突然减去一半&#xff0c;而是在后续的挖矿过程中&#xf…

【Unity】游戏场景添加后处理特效PostProcessing

添加后处理特效PostProcessing 添加雾效果后处理何为后处理&#xff1f;添加后处理特效 添加雾效果 依次点击Window -> Rendering -> Lighting添加Lighting面板。 点击Lighting里面的Environment&#xff0c;找到Other Setting 将Fog选项勾选 更改下方的颜色 调整雾的浓…

【洛谷题解】 CF1734B Bright, Nice, Brilliant

分析 首先&#xff0c;我们先把 a i , 1 a_{i,1} ai,1​ 上方的灯以及它本身都点亮&#xff0c;那么它此时的亮度为 i i i。而由于 a i , 2 a_{i,2} ai,2​ 无法被 a i , 1 a_{i,1} ai,1​ 照到&#xff0c;故它的亮度为 i − 1 i-1 i−1&#xff0c;那么那个缺少的 1 1…

go语言并发编程(五) ——Context

Context(上下文) 前言 Context是go语言中所提供的一种并发控制的解决方案,相比于管道与WaitGroup,Context可以更好的控制子孙协程以及层次更深的协程。Context本身是一个接口&#xff0c;只要我们实现了该接口都可以被称为上下文&#xff0c;context标准库本身也提供了几个实…

移动端web适配方案

以下是移动端适配的多个方案&#xff0c;也可以说说你是怎么做的。 正文 自适应&#xff1a;根据不同的设备屏幕大小来自动调整尺寸、大小 响应式&#xff1a;会随着屏幕的实时变动而自动调整&#xff0c;是一种更强的自适应 为什么要做移动端适配&#xff1f; 目前市面上…

Linux内核与基础命令学习总结

Linux操作系统 Linux操作系统博大精深&#xff0c;其中对线程&#xff0c;IO&#xff0c;文件系统等概念的实现都很有借鉴意义。 ​ 文件系统和VFS 文件系统的inode上面讲过了。VFS主要用于屏蔽底层的不同文件系统&#xff0c;比如接入网络中的nfs文件系统&#xff0c;亦或是w…

如何使用docker-compose安装数据可视化应用JSON Crack并实现远程访问

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序&#xff0c;能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

SAP SD学习笔记08 - Pre-sales(售前)引合,見積的概念,数据流(完了规则和参照Status),Copy管理,VBKD表的明细

上一章讲了紧急发注&#xff0c;现金贩卖&#xff0c;贩卖传票&#xff0c;明细Category等知识。 SAP SD学习笔记07 - 紧急发注&#xff08;急单&#xff09;&#xff0c;现金贩卖&#xff0c;贩卖传票Type/ 明细Category 及其Customize-CSDN博客 - 本张继续讲SAP SD模块的流程…