MyBatis进阶(<if><trim><where><set><foreach><include>标签的使用)

目录

< if >标签

< trim >标签

< where >标签

< set >标签

< foreach >标签

< include >标签


< if >标签

非必填字段

xml实现

<insert id="insertUserByCondition">INSERT INTO userinfo (username,`password`,age,<if test="gender != null">gender,</if>phone)VALUES (#{username},#{age},<if test="gender != null">#{gender},</if>#{phone})
</insert>

注解实现(不推荐)

@Insert("<script>" +"INSERT INTO userinfo (username,`password`,age," +"<if test='gender!=null'>gender,</if>" +"phone)" +"VALUES(#{username},#{age}," +"<if test='gender!=null'>#{gender},</if>" +"#{phone})"+"</script>")
Integer insertUserByCondition(UserInfo userInfo);

< trim >标签

• prefix:表⽰整个语句块,以prefix的值作为前缀

• suffix:表⽰整个语句块,以suffix的值作为后缀

• prefixOverrides:表⽰整个语句块要去除掉的前缀

• suffixOverrides:表⽰整个语句块要去除掉的后缀

有多个字段是选填项时,考虑采用此方式

xml方式

<insert id="insertUserByCondition">INSERT INTO userinfo<trim prefix="(" suffix=")" suffixOverrides=","><if test="username !=null">username,</if><if test="password !=null">`password`,</if><if test="age != null">age,</if><if test="gender != null">gender,</if><if test="phone != null">phone,</if></trim>VALUES<trim prefix="(" suffix=")" suffixOverrides=","><if test="username !=null">#{username},</if><if test="password !=null">#{password},</if><if test="age != null">#{age},</if><if test="gender != null">#{gender},</if><if test="phone != null">#{phone}</if></trim>
</insert>

注解方式(不推荐)

@Insert("<script>" +"INSERT INTO userinfo " +"<trim prefix='(' suffix=')' suffixOverrides=','>" +"<if test='username!=null'>username,</if>" +"<if test='password!=null'>password,</if>" +"<if test='age!=null'>age,</if>" +"<if test='gender!=null'>gender,</if>" +"<if test='phone!=null'>phone,</if>" +"</trim>" +"VALUES " +"<trim prefix='(' suffix=')' suffixOverrides=','>" +"<if test='username!=null'>#{username},</if>" +"<if test='password!=null'>#{password},</if>" +"<if test='age!=null'>#{age},</if>" +"<if test='gender!=null'>#{gender},</if>" +"<if test='phone!=null'>#{phone}</if>" +"</trim>"+"</script>")
Integer insertUserByCondition(UserInfo userInfo);

< where >标签

xml实现

<select id="queryByCondition" resultType="com.example.demo.model.UserInfo">select id, username, age, gender, phone, delete_flag, create_time, 
update_timefrom userinfo<where><if test="age != null">and age = #{age}</if><if test="gender != null">and gender = #{gender}</if>
<if test="deleteFlag != null">and delete_flag = #{deleteFlag}</if></where>
</select>

注解方式

@Select("<script>select id, username, age, gender, phone, delete_flag, 
create_time, update_time" +" from userinfo" +" <where>" +" <if test='age != null'> and age = #{age} </if>" +" <if test='gender != null'> and gender = #{gender} </if>" +" <if test='deleteFlag != null'> and delete_flag = #
{deleteFlag} </if>" +" </where>" +"</script>")
List<UserInfo> queryByCondition(UserInfo userInfo);

<where>只会在⼦元素有内容的情况下才插⼊where⼦句,⽽且会⾃动去除⼦句的开头的AND或 OR

以上标签也可以使⽤<trim prefix="where" prefixOverrides="and">替换,但是此种情况下,当⼦元素都没有内容时,where关键字也会保留

< set >标签

动态的在SQL语句中插⼊set关键字,并会删掉额外的逗号.(⽤于update语句中)

也可以使⽤<trim prefix="set" suffixOverrides=",">替换

xml方式

<update id="updateUserByCondition">update userinfo<set><if test="username != null">username = #{username},</if><if test="age != null">age = #{age},</if><if test="deleteFlag != null">delete_flag = #{deleteFlag},</if></set>where id = #{id}
</update>

注解方式

@Update("<script>" +"update userinfo " +"<set>" +"<if test='username!=null'>username=#{username},</if>" +"<if test='age!=null'>age=#{age},</if>" +"<if test='deleteFlag!=null'>delete_flag=#{deleteFlag},</if>" +"</set>" +"where id=#{id}" +"</script>")
Integer updateUserByCondition(UserInfo userInfo);

< foreach >标签

对集合进行遍历

• collection:绑定⽅法参数中的集合,如List,Set,Map或数组对象

• item:遍历时的每⼀个对象

• open:语句块开头的字符串

• close:语句块结束的字符串

• separator:每次遍历之间间隔的字符串

void deleteByIds(List<Integer> ids);

xml方式 

<delete id="deleteByIds">delete from userinfowhere id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach>
</delete>

注解方式 

@Delete("<script>" +"delete from userinfo where id in" +"<foreach collection='ids' item='id' separator=',' open='(' 
close=')'>" +"#{id}" +"</foreach>" +"</script>")
Integer deleteUser(Integer id);

< include >标签

对重复代码片段使用<sql>封装,再通过<include>标签进行引用

<sql id="allColumn">id, username, age, gender, phone, delete_flag, create_time, update_time
</sql>
<select id="queryAllUser" resultMap="BaseMap">select<include refid="allColumn"></include>from userinfo
</select>
<select id="queryById" resultType="com.example.demo.model.UserInfo">select<include refid="allColumn"></include>from userinfo where id= #{id}
</select>

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

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

相关文章

【力扣一轮】202.快乐数 1.两数之和

202.快乐数 力扣链接 代码随想录链接 思路 看到这一题没思路&#xff0c;直接看题解。 发现其中一个难点在于“无限循环”&#xff0c;这个字眼可以转换成退出条件。退出条件就有两种&#xff0c;一种是这个数字是快乐数&#xff0c;一种是这个数字不是快乐数。 如果是快…

【vue嵌套iframe】实现项目重构

vue嵌套iframe 创建 iframe 通用组件添加页面及路由进阶&#xff1a;vue 与 iframe 的双向通讯代码下载 适用于使用vue重构及vue访问其他服务页面 基于vue3示例页面添加嵌套iframe的页面 创建 iframe 通用组件 IframeTemplate.vue 页面布局 <template><div class…

9.2 Go语言入门(包和导入)

Go语言入门&#xff08;包和导入&#xff09; 目录一、包和导入1. 包&#xff08;Package&#xff09;1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入&#xff08;Import&#xff09;2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

mysql授权用户

mysql授权用户只能看到某张表单表 要实现MySQL中的用户只能看到某张表&#xff0c;可以通过创建一个新的数据库用户&#xff0c;并且只授予该用户对特定表的权限。以下是实现这一功能的步骤和示例代码&#xff1a; 创建新用户并设置密码。 授予该用户对特定数据库的权限。 授…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

数据库系统原理实验报告6 | 视图

整理自博主本科《数据库系统原理》专业课自己完成的实验报告&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本&#xff1a; ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidisql ​ 目录 一、实验目的 二、实验内容 1&#xff0e;根据EDUC数…

妙解设计模式之适配器模式

适配器模式的概念 适配器模式是一种结构设计模式&#xff0c;它允许将接口不兼容的类通过一个适配器类进行适配&#xff0c;使得这些类可以一起工作。适配器模式通常用于以下情况&#xff1a; 当一个接口的实现类已经存在&#xff0c;但是另一个接口需要的是不兼容的时候。当…

揭秘C++ String容器:字符串操作的艺术

目录 ​编辑 引言 一、初识std::string&#xff1a;构造与初始化 二、字符串的操纵艺术&#xff1a;拼接、查找与替换 三、访问与遍历&#xff1a;字符的细腻触感 四、大小与容量&#xff1a;动态调整的智慧 五、进阶功能&#xff1a;探索更多可能 结语 引言 在C标准库…

ssms执行建表后如何自动刷新所有SQL SERVER表

在 SQL Server Management Studio (SSMS) 中&#xff0c;当你通过 T-SQL 脚本创建表后&#xff0c;通常需要手动刷新对象资源管理器以查看新表。SSMS 并没有提供自动刷新的选项&#xff0c;但你可以使用以下几种方法来解决这个问题&#xff1a; 手动刷新&#xff1a;在对象资源…

网络工程师基础知识:

网络工程师基础知识&#xff1a; 1.最基本的7层协议&#xff1a; 来源&#xff1a; 通过网络网线和报文的这些机制让全世界的数据通过二进制流来进行沟通 从下而上&#xff1a; 物理层 数据链路层 网络层 传输层 表示层 会话层 应用层 基本的一个数据报文&#xff1a; 数据链…

Java 8

这次我学习了第八次Java课程 这次课在假期&#xff0c;包含了两天的一大波内容 对于编写项目过程中有许多的 辅助类 System System.out.println() 打印 Scanner Scanner sc new Scanner(System.in) 赋值 Random 随机数 Math 数学运算 日期 要想使用日期方法就要引入包Date 1…

人工智能为犯罪地下世界带来了巨大的生产力提升

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Java 18 新特性详解

Java 18 新特性详解 Java 18 作为 Oracle 推出的又一重要版本&#xff0c;继续秉持着 Java 平台“创新但不破坏”的原则&#xff0c;带来了多项旨在提升开发效率、性能和安全性的新特性。本篇文章将深入解析 Java 18 引入的主要特性&#xff0c;并探讨它们如何影响开发者的工作…

详解 Scala 的集合类型

一、集合简介 1. 类型 序列 Seq&#xff1a;类似于 Java 中的 List 接口集 Set&#xff1a;类似于 Java 中的 Set 接口映射 Map&#xff1a;类似于 Java 中的 Map 接口所有的集合都扩展自 Iterable 特质 2. 不可变集合 位于 scala.collection.immutable 包&#xff0c;指该集…

Runtime,你学会了吗?

作为Java开发者,我们经常听到关于Runtime类的提及,但很少有人深入了解它的作用和用法。 Runtime类是Java标准库中的一个关键类,提供了与运行时环境交互的方法。 本文将深入探讨Runtime类的背景、用途、常用方法以及最佳实践,帮助程序员们更好地利用这一重要工具。 1. 背…

ISSCC论文详解 2023 16.1 MulTCIM 存内计算在多模态领域的应用前沿论文

多模态模型&#xff0c;是指具备理解来自不同模态&#xff08;如视觉、自然语言、语音等&#xff09;的混合信号能力的神经网络模型&#xff0c;是当今人工智能模型发展的重要方向之一。本文将要介绍的文献题目为《16.1 MulTCIM: A 28nm 2.24μJ/Token Attention-Token-Bit Hyb…

一些常见的程序设计问题

秒杀 redis缓存库存 1.判断库存名额是否充足&#xff0c;2.进行扣减 为了防止超卖&#xff0c;必须保证这两部的原子性 库存扣减后发送mq消息&#xff0c;去异步执行创建订单流程&#xff0c;创建订单失败会造成少卖。可加重试机制&#xff0c;对多次重试依旧失败的&#xff…

刷题记录第九十九天-与排序相关的题-第K大的数和逆序对的数量

求第K大的数—利用快速排序的思想 class Solution { public:int partition(vector<int>& num, int l, int r){swap(num[l],num[lrand()%(r-l1)]);int x num[l];int il1, jr;while(i<j){while(i<r&&num[i]<x){i;}while(num[j]>x){j--;}if(i>…

SpringBoot自动化配置原理

Spring Boot 的自动化配置原理基于 EnableAutoConfiguration 注解及其相关机制。以下是其工作原理的详细说明&#xff1a; Spring Boot 自动化配置原理 主要概念和机制&#xff1a; EnableAutoConfiguration 注解&#xff1a; 这个注解告诉 Spring Boot 启动时去自动配置 Spr…

【java程序设计期末复习】chapter7 内部类和异常类

内部类和异常类 内部类 ava支持在一个类中声明另一个类&#xff0c;这样的类称作内部类&#xff0c;而包含内部类的类成为内部类的外嵌类。 注意 &#xff08;1&#xff09;内部类的类体中不可以声明类变量和类方法。 &#xff08;2&#xff09;外嵌类的类体中可以用内部类…