根据不同条件拼接 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=“”>