Mybatis----动态Sql

MyBatis的动态SQL MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作,并动态拼接成完整的SQL之后再执行,以达到SQL复用、简化编程的效果。Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。 阅读详情

1.概述
One of the most powerful features of MyBatis has always been its Dynamic SQL capabilities. If you have any experience with JDBC or any similar framework, you understand how painful it is to conditionally concatenate strings of SQL together, making sure not to forget spaces or to omit a comma at the end of a list of columns. Dynamic SQL can be downright painful to deal with.
MyBatis的一个强大的特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态SQL可以彻底处理这种痛苦。

2.if标签
①基本使用方法
[1]接口方法:List<Customer> getListByMinMaxAge(@Param("minAge") Integer minAge, @Param("maxAge") Integer maxAge);
[2]配置方式

<select id="getListByMinMaxAge" resultType="com.sirius.entities.Customer">
				select cust_id custId,cust_name custName,cust_age custAge
				from tbl_cust where 1=1
				<if test="minAge!=null">
					<![CDATA[and cust_age>#{minAge}]]>
				</if>
				<if test="maxAge!=null">
					<![CDATA[and cust_age<#{maxAge}]]>
				</if>
			</select> 


②引用单个参数
	[1]@Param注解
接口方法:List<Customer> getListBySingleAge(@Param("age") Integer age);
		配置中引用传入的参数
<select id="getListBySingleAge" parameterType="Integer" resultType="com.atguigu.entities.Customer">
					select cust_id custId,cust_name custName,cust_age custAge
					from tbl_cust where 1=1
					<if test="age!=null">
						<![CDATA[and cust_age>#{age}]]>
					</if>
				</select>
	[2]_parameter
		接口方法:`List<Customer> getListBySingleAge(Integer age);`
		配置中引用传入的参数
			

<select id="getListBySingleAge" parameterType="Integer" resultType="com.atguigu.entities.Customer">
					select cust_id custId,cust_name custName,cust_age custAge
					from tbl_cust where 1=1
					<if test="_parameter!=null">
						<![CDATA[and cust_age>#{age}]]>
					</if>
</select>

4.where标签
①说明
where子句以and 或者or开头,它会自动删除第一个and或者or
一般建议Where和if结合起来用
②接口方法:List<Customer> getListByMinMaxAge(@Param("minAge") Integer minAge, @Param("maxAge") Integer maxAge);
③配置方式

<select id="getListByMinMaxAge" resultType="com.atguigu.entities.Customer">
			select cust_id custId,cust_name custName,cust_age custAge
			from tbl_cust
			<where>
				<if test="minAge!=null">
					<![CDATA[and cust_age>#{minAge}]]>
				</if>
				<if test="maxAge!=null">
					<![CDATA[and cust_age<#{maxAge}]]>
				</if>
			</where>
		</select>

5.choose/when/otherwise
①结构

<choose>
			<when test="条件1">
				子句1
			</when>
			<when test="条件2">
				子句2
			</when>
			<when test="条件3">
				子句3
			</when>
			<when test="条件4">
				子句4
			</when>
			……
			<otherwise>
				最后一条子句
			</otherwise>
		</choose>
②执行方式:按照从上到下的顺序依次检查每一个when中的条件,一旦发现满足条件的when则采纳当前子句,并停止执行。如果所有的when都不满足条件,则执行otherwise
③接口方法:List<Customer> getListByMinMaxAge(@Param("minAge") Integer minAge, @Param("maxAge") Integer maxAge);
④配置方式
	<select id="getListByMinMaxAge" resultType="com.atguigu.entities.Customer">
		select cust_id custId,cust_name custName,cust_age custAge
		from tbl_cust
		<where>
			<choose>
				<when test="minAge!=null">
					<![CDATA[and cust_age>#{minAge}]]>
				</when>
				<when test="maxAge!=null">
					<![CDATA[and cust_age<#{maxAge}]]>
				</when>
				<otherwise>
					and cust_name like '%a%'
				</otherwise>
			</choose>
		</where>
	</select>

6.foreach标签
①作用:组装有一定规律的字符串,例如in语句。
②接口方法:List getListBySeveralIds(@Param("custIdList") List<Integer> custIdList);
③配置方式

<select id="getLIstBySeveralIds" resultType="com.atguigu.entities.Customer">
			select cust_id custId, cust_name custName, cust_age custAge
			from tbl_cust where cust_id in 
			<foreach collection="custIdList" item="custId" open="(" close=")" separator=",">
				#{custId}
			</foreach>
		</select>

7.trim标签
①作用:拼字符串
②接口方法:List<Customer> getListByMinMaxAge(@Param("minAge") Integer minAge, @Param("maxAge") Integer maxAge);
③配置方式

<select id="getListByMinMaxAge" resultType="com.atguigu.entities.Customer">
			select cust_id custId,cust_name custName,cust_age custAge
			from tbl_cust
			<trim prefix="where" prefixOverrides="and|or">
				<if test="minAge!=null">
					<![CDATA[and cust_age>#{minAge}]]>
				</if>
				<if test="maxAge!=null">
					<![CDATA[and cust_age<#{maxAge}]]>
				</if>
			</trim>
		</select>
④使用trim标签生成动态insert语句
	[1]接口方法:void saveCustomerClever(Customer customer);
	[2]配置方式
		<insert id="saveCustomerClever" parameterType="com.atguigu.entities.Customer">
			INSERT INTO tbl_cust
			<trim prefix="(" suffix=")" suffixOverrides=",">
				<if test="custName!=null">cust_name,</if>
				<if test="custAge!=null">cust_age,</if>
			</trim>
			<trim prefix="VALUES(" suffix=")" suffixOverrides=",">
				<if test="custName!=null">#{custName},</if>
				<if test="custAge!=null">#{custAge},</if>
			</trim>
		</insert>

8.set标签
①作用:生成动态更新语句
②接口方法:void updateCustomer(Customer customer);
③配置方式

<update id="updateCustomer" parameterType="com.atguigu.entities.Customer">
			update tbl_cust
			<set>
				<if test="custName!=null">cust_name=#{custName},</if>
				<if test="custAge!=null">cust_age=#{custAge},</if>
			</set>
			where cust_id=#{custId}
		</update>		
MyBatis 中动态 SQL 标签 在 MyBatis 中,动态 SQL 是构建灵活且高效的 SQL 语句的重要工具。通过使用动态 SQL 标签,开发者可以根据不同的条件动态生成 SQL 语句的各个部分,从而避免手动拼接字符串带来的复杂性和潜在的错误。 阅读详情

相关推荐

MyBatis 动态 SQL

MyBatis动态SQL是在XML映射文件中通过特定标签实现SQL语句动态拼接的技术,解决了传统JDBC手动拼接SQL的繁琐问题。文章介绍了MyBatis的9种动态SQL标签:if(条件判断)、where+if(查询条件处理)、set(更新操作)、choose/when/otherwise(多条件分支)、trim(格式化处理)等,并详细说明了各标签的语法和使用场景。动态SQL通过OGNL表达式实现参数值计算和SQL拼接,既提高了开发效率,又需注意性能优化和SQL注入防范。文中提供了多个典型示例,如条件查询、

阿超的博客 1132

【MyBatis】动态SQL

在前一篇中,我们已经讲解了Mybatis的基本使用,那么本篇我们就进一步来了解Mybatis的功能。本篇我们主要讲的是Mybatis中的动态SQL,在前面我们的学习中,我们编写的SQL语句基本都是固定的,每个参数都需要传递,而通过动态SQL,它能根据我们所给的参数,动态地选择参数,不需要每个都传递。

zhyhgx的博客 2203

从零开始:用ZEMAX设计双高斯照相物镜的完整流程(附55mm焦距实例)

本文详细介绍了使用ZEMAX设计双高斯照相物镜的完整流程,特别针对55mm焦距实例进行了深入解析。从初始结构选择、参数设置到优化策略和像质分析,逐步指导读者掌握这一经典光学设计方法。通过具体实例展示了如何实现卓越的像差校正,适用于35mm相机标准镜头等应用场景。

onion的博客 705

Mybatis-动态SQL

在页面原型中,列表上方的条件是动态的,是可以不传递的,也可以只传递其中的1个或者2个或者全部。而在我们刚才编写的SQL语句中,我们会看到,我们将三个条件直接写死了。如果页面只传递了参数姓名name 字段,其他两个字段 性别 和 入职时间没有传递,那么这两个参数的值就是null。此时,执行的SQL语句为:这个查询结果是不正确的。正确的做法应该是:传递了参数,再组装这个查询条件;如果没有传递参数,就不应该组装这个查询条件。

actavy的博客 3027

牛耕式全覆盖算法-matlab代码

牛耕式路径全覆盖算法,也称为牛耕算法或者蚂蚁算法,是一种用于解决路径规划问题的启发式算法。这个算法的灵感来自于牛在耕田时的行为。在这个算法中,假设有一块田地需要耕作,牛从田地的某个角落开始行走,走过的路径会被标记。牛会优先选择尚未经过的路径,当所有的路径都走过后,算法停止。在路径规划问题中,田地可以看作是一个由节点和边构成的图。每个节点代表一个位置,每条边代表两个节点之间的连接。路径全覆盖问题是找出一组路径,使得每个节点都被至少一条路径经过。牛耕式路径全覆盖算法的基本思想是以启发式的方式逐步构建路径。

m0_69611489的博客 1689

STM32CubeMX定时器配置

因为只有当 CH2 处于 输入模式 时,硬件才能把这根脚送进滤波器(TI2FP2通道之前要滤波),再生成 TI2FP2 这条支路供 Slave-Mode 控制器使用,也就是说TI2FP2 并不是“独立存在”的,但在CubeMX配置时:如下图,我们只设置Slave Mode和TI1FP1,之后,CH1就自动配置为 Input Capture 了,下图发现,Channel1只能 Input Capture 或者Disable。哪来的主定时器和从定时器呢?把待测 PWM 的高电平当“门”,连接到ETR。

2402_89015641的博客 3184

mybatis强大的动态SQL

我们可以将一些重复性的 SQL 语句进行抽取,以达到复用的效果。:抽取 SQL 语句标签。:引入 SQL 片段标签。抽取的 SQL 语句三、多条件组合查询之<where-if>我们根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。:条件标签。如果有动态条件,则使用该标签代替 where 关键字。:条件判断标签。查询条件拼接。

2501_90401192的博客 1636

FOC电机控制实战:增量式编码器零位校准的5个关键步骤(附STM32代码)

本文详细解析了FOC电机控制中增量式编码器零位校准的5个关键步骤,包括电角度锁定、定时器计数清零、机械偏移角补偿等,并提供了STM32平台的实战代码。通过精准的零位校准,可显著提升电机控制系统的精度和稳定性,适用于工业伺服和机器人关节等高精度场景。

rum55的博客 617

Mybatis之动态SQL

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。 利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQ...

JustinNeil的博客 1万+

基于图神经网络的社交网络虚假账号检测系统 (Graph-based Fake Account Detection System, GFADS)

FOLLOWSRETWEETSSHAREDCOMMENTSLIKESMENTIONSUseruser_idusernamejoin_datebioavatar_urllocationverifiedis_fakeLOAD CSV这是决定模型性能的关键环节,需结合和。XXedge_indexy新账号缺乏历史数据和丰富关系。全网图可能包含数亿节点和数十亿边,难以直接训练。社交网络是动态变化的,虚假账号策略也在不断进化。获取大规模、高质量的真实/虚假账号标注数据非常困难。

Deng945201314的博客 1481

从ADS到HFSS:耦合线带通滤波器的设计与模型转换实战

本文详细介绍了耦合线带通滤波器的完整设计流程,重点阐述了从ADS电路级快速优化到HFSS三维电磁场精确验证的模型转换实战方法。通过对比ADS理想模型仿真与HFSS全波仿真结果,指导读者进行参数校准与迭代优化,并分享了关键的板材选择、加工误差及端口设置等避坑指南,确保设计性能与实物测试高度一致。

weixin_29290863的博客 344

MyBatis 动态SQL详解

注意,``失败后, `` 关键字只会去掉库表字段赋值前面的and,不会去掉语句后面的and关键字,即注意,`` 只会去掉`` 语句中的最开始的and关键字。在实际开发中会遇到许多相同的SQL,比如根据某个条件筛选,这个筛选很多地方都能用到,我们可以将其抽取出来成为一个公用的部分,这样修改也方便,一旦出现了错误,只需要改这一处便能处处生效了,此时就用到了这个标签了。这个标签和是天仙配,是共生的,include用于引用sql标签定义的常量。

Coisini__S的博客 1268

人群仿真软件:Pathfinder_(14).与其他软件的集成与互操作

在人群仿真软件的二次开发中,与其他软件的集成和互操作是非常重要的。通过数据导入导出、接口调用和脚本编写,可以显著提升仿真的准确性和实用性。Pathfinder提供了多种数据格式的支持和丰富的API,使得与其他软件的集成变得简单高效。无论是建筑模型的导入、仿真结果的导出,还是实时数据的交换,Pathfinder都能满足用户的需求。

kkchenjj的博客 1015

Mybatis动态SQL

Mybatis 动态Sql

心流时间的博客 1247

LangGraph教程8:LangGraph流式处理

流式处理可显著提升基于LLM应用的响应性。LangGraph支持两种流式模式:values模式返回每一步的完整结果,适合需要完整上下文处理的场景;updates模式仅返回增量变化,适用于实时更新需求。示例代码展示了如何用create_react_agent实现这两种模式,其中values模式完整记录处理流程,updates模式逐步输出结果。通过异步迭代输出流,开发者可以灵活选择适合应用场景的流式处理方式。

Cachel Wood的博客 619

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MyBatis 实现动态 SQL

MyBatis 中的动态 SQL 就是SQL语句可以根据不同的情况情况来拼接不同的sql。 本文会介绍 xml 和 注解 两种方式的动态SQL实现方式。

2302_76339343的博客 2375

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Mybatis的动态SQL

Test public void insertMoreByList(){ User user1 = new User("a1","男","北京");

m0_73971785的博客 1274

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【MyBatis】动态 SQL

这些标签可以根据传入的参数动态地添加、删除或修改 SQL 语句的某些部分。语句,用来根据不同条件选择执行不同的 SQL 语句,包含。标签根据传入的条件判断是否包含该 SQL 片段。用于在 SQL 语句中循环处理集合或数组,常用于。文件中使用特定的标签来完成的。子句中的值,并且自动加上括号和逗号分隔符。,则将相应的条件添加到 SQL 查询中。是指在程序执行过程中,根据实际的情况。标签用于自动处理 SQL 语句中的。部分,避免了多余的逗号和条件。部分,它会自动去除多余的。,之后的条件会自动处理为。

weixin_63466958的博客 1363

MyBatis 之 动态 SQL

动态 SQL

lfm1010123的博客 2133

【MyBatis】如何编写动态SQL

如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。在循环的时候拼接多个sql条件,用trim标签的prefixOverrides属性覆盖第一个and或者or,前缀加上"and (“,后缀加上” )",动态生成一个条件满足多种情况的sql。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。

小七的博客 1169

MyBatis之动态sql

resultType适用于简单的结果映射,可以自动进行映射;resultMap适用于复杂的结果映射,需要手动定义映射关系。

kissship的博客 2634

MyBatis——动态SQL

动态SQL是MyBatis中的一种功能,允许你在XML映射文件中编写动态生成的SQL语句。主要用于解决SQL语句需要根据不同情况进行变化的问题。例如,你可能需要根据用户输入的查询条件生成不同的where子句,或者可能需要根据程序运行时的状态切换不同的join子句等。MyBatis提供了一套丰富的标签库来帮助你编写动态SQL,包括等。

zxb的博客 1918
上一篇: Mybatis--------mapper配置文件介绍
下一篇: Mybatis-----关联关系
HelloWorld_AA
博客等级 码龄9年 18粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值