动态SQL简介

概念:

根据不同条件拼接 SQL 语句,实现对数据库更准确的操作;

什么时候用动态SQL:

1、条件查询:当查询条件可能因用户输入或业务逻辑而变化时,可以使用动态 SQL 来构建查询语句。例如,根据用户提供的关键字进行模糊查询,或者根据不同的筛选条件动态拼接 WHERE 子句。

2、分页查询:在需要实现分页功能时,可以使用动态 SQL 配合分页插件(如 PageHelper)来生成带有 LIMIT 和 OFFSET 的 SQL 语句。

3、动态表名:在需要根据不同情况查询不同的表时,可以通过动态 SQL 动态切换表名。

4、动态字段:在返回结果集中,根据不同的需求动态选择返回的字段。

5、复杂逻辑处理:当 SQL 逻辑较为复杂,需要根据不同条件进行不同的处理时,可以使用动态 SQL 中的 choose(类似于 Java 中的 switch)、when、otherwise 等标签来实现。

6、批量操作:在进行批量插入、更新或删除操作时,可以通过动态 SQL 的 foreach 标签来遍历集合,构建批量操作的 SQL 语句。

7、安全性和性能考虑:动态 SQL 可以帮助避免直接拼接用户输入的字符串到 SQL 语句中,从而减少 SQL 注入的风险,同时也可以提高 SQL 语句的执行效率。

动态标签怎么用:

标签

作用是如果test中的条件满足,则if标签中间的语句成立,否则不成立

test中的是OGNL表达式, 叫做对象图导航语言,用#{}来拿Teacher的属性值,逻辑符号是and,or,not,字符串用''表示而不是"",

稍微优化一下可以写成:


where的作用:对表里的每一条数据进行判断

所以用上面的方法where 1 =1会使其效率变低

标签

1、当where标签中有条件是,会拼接一个where关键字

2、将where关键字后面的and或者or这样的关键字处理掉

标签

用来进行有优先级的条件选择,和Java中的switch相似,在前面的先判断,满足条件就用并且停止向后继续走,不满足就一直向后走,直到otherwise;(当然otherwise是可写可不写的,要注意when的权重)

标签

用于修改的动态SQL,主要功能和 where 标签元素其实是差不多的,主要是在包含的语句前输出一个 set, 然后如果包含的语句是以逗号结束的话将会 把该逗号忽略,如果 set 包含的内容为空的 话则会出错。有了 set 元素就可以动态的更 新那些修改了的字段。

	
		update teacher
		
			
				and Tsex = #{tsex},
			
			
				and Tname = #{tname},
			
		
	

啥都能干,但是一般不选择,除非像新增这种没有特殊标签的才用

用法:trim有4个变量:

prefix:前缀

prefixoverride:去掉第一个and或者是or

suffix:后缀

suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)


		update teacher
		
			
				Tsex = #{tsex},
			
			
				Tname = #{tname},
			
		
	

< foreach item = “”index=“” collection=“” open=“” separator=“” close=“”>

  1. foreach标签中的collection的值为list表示传入的是一个集合, 如果是一个数组, 那么就写为collection = “array”
  2. 我们从select标签中的parameterType属性值可以看出我们此时是传入了一个list集合
  3. foreach标签中的open的值表示以什么开始
  4. foreach标签中的close的值表示以什么结束
  5. foreach标签中的item就是在open和close值之间的变量, 就相当于Java中foreach循环中的临时变量
  6. foreach 标签中的separation就是每个item之间的分隔符

模糊查询


你可能感兴趣的:(java,数据库,mybatis,sql)