动态sql
为何需要动态sql?因为简单的sql语句已经不能满足复杂的业务需求
动态sql相当于sql语句拼接
1.if语句
if语句:判断,如果执行多条件查询,如果中间某个条件变量为空,就跳过当前判断(包括if里面的sql语句),执行下一条语句。
栗子如下:
2.if+where不定向查询
if+where语句:where标签里面如果包含了标签中的返回值的话(只要有if的条件不为空),它就插入一个where。如果if标签里面是以and或者or开头,则它(and和or)会被剔除。语法如下:
Select * from 表名
and/or 列名=#{取值}
……
栗子:
3.if+set不定向修改
if+set语句:一般用于修改语句,如果第一个条件为空,则添加第二个条件。如果第一个条件不为空,第二个条件为空,则添加第一个条件,如果两个条件都不为空,则两个条件都添加语法如下:
Update tablename
tab.列1=#{值1},
tab.列2=#{值2},
where id = #{id}
栗子:
UPDATE user
name = #{name},
age = #{age},
where id = #{id}
4.choose-when-otherwise
choose-when-otherwise:有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java的switch语句。语法如下所示:
Select * from user
列1 = #{值1}
列2 = #{值2}
列3 = #{值3}
And 列4 = #{值4}
3选1的栗子:
select * from user
id=#{id}
and username=#{username}
and sex=#{sex}
5.trim 语句
- trim内含属性
- prefix:加上前缀
- prefixOverrides:去掉一个
and
或者or
suffixOverrides=","
:去掉最后一个,
,也可以去掉其他东西。
语法如下:
and username=#{username}
and sex=#{sex}
栗子:用trim改修语句
update user
username = #{username},
sex = #{sex},
where id=#{id}
6.sql片段
使用场景:有时候可能某个sql 语句用的特别多,为了增加代码的重用性,简化代码,需要将这些代码抽取出来,然后使用时直接调用。
栗子:
name = #{name},
age = #{age},
UPDATE USER
id = #{id}
7.foreach语句
使用场景:需要一次性查询id为1,2,3,4的用户
栗子:
- collection:指定输入对象中的集合属性
- item:每次遍历生成的对象
- open:开始遍历时的拼接字符串
- close:结束时拼接的字符串
- separator:遍历对象之间需要拼接的字符串