mybatis框架的动态sql技术是一种根据特定条件动态拼装sql语句的功能,存在的意义是为了解决拼接sql语句字符串时的痛点问题。动态sql本质上是映射文件中的一系列标签。
接口方法
List getEmpByConditions(Emp emp);
映射文件
select * from t_emp where 1=1
and emp_name = #{empName}
and age = #{age}
and sex = #{sex}
and email = #{email}
select * from t_emp where 1=1,该语句中的1=1为恒成立条件,通过恒成立条件可以更好的拼接后续的其余条件(如果后续条件都不成立就不会多出where关键字,或者后续只有某些条件成立不会多出and关键字)且不影响最终的查询结果
where标签:多条件查询方式2where标签中有内容时,会自动生成where关键字,并且将内容前多余的and和or去掉;如果where标签中的内容都都不符合条件(where标签中没有内容),则不生成where关键字(where标签没有任何效果)。注意:where标签不能将其中内容后面多余的and和or去掉。
trim标签:多条件查询方式3select * from t_emp and emp_name = #{empName} and age = #{age} and sex = #{sex} and email = #{email}
trim 标签中有四个属性prefix、suffix、 suffixOverrides、 prefixOverrides
- prefix | suffix:将trim标签中内容前面或后面添加指定内容
- suffixOverrides | prefixOverrides:将trim标签中内容前面或后面去掉指定内容
若标签中有内容时:根据标签中是属性设置在前面或后面进行添加或删除指定内容 ;若标签中没有内容时,trim标签也没有任何效果(和where一样)
choose、when、otherwise标签choose、when、otherwise标签相当于java中的if…else if…else效果
choose是一个父标签,when标签和otherwise标签需要写在choose标签中
when标签至少要有一个,otherwise标签最多只能有一个;choose 标签按顺序判断其内部 when 标签中的判断条件是否成立,如果有一个成立,则执行相应的 SQL 语句,choose 执行结束;如果都不成立,则执行 otherwise 中的 SQL 语句
foreach标签foreach是用来进行循环的,例如,批量删除与批量添加操作从浏览器端所获取的是一个集合,因此要通过对数组进行循环来实现功能。
foreach 标签主要有以下属性,说明如下(以使用IN关键字为例)。
collection:设置需要循环的数组或集合
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名字,表示在迭代过程中每次迭代到的位置。
open:表示该语句以什么开始(既然是 in 条件语句,所以必然以‘(’开始)。
separator:表示在每次进行迭代之间以什么符号作为分隔符(既然是 in 条件语句,所以必然以,作为分隔符)。
close:表示该语句以什么结束(既然是 in 条件语句,所以必然以‘)’结束)。
使用foreach标签进行批量删除:两种方式分别对应关键字IN和OR:
delete from t_emp where eid in
#{eid}
delete from t_emp where
eid = #{eid}
使用foreach进行批量添加:
insert into t_emp values
(null,#{emp.empName},#{emp.age},#{emp.sex},#{emp.email},null)
sql标签
使用sql标签可以定义sql片段,通过include标签引用sql片段,include标签中的refid属性对应应用sql片段的id



