Mybatis框架的动态sql技术是一种根据特定条件拼接sql语句的功能,为了解决拼接sql语句字符串时的问题
比如在页面中的复选框,文本框,单选框等等是否作查询或者选择,浏览器在传递给服务器时,有可能的值为null或者" "…此时在做sql语句拼接的时候就需要处理
如果姓名文本框中没有数据则传递的是null,在传递数据时的sql语句就需要拼接字符串,此时姓名的if name = … 则未被拼接在sql语句当中
通过test属性中的表达式判断标签中的内容是否有效(是否会拼接到SQL中)
-
-
- select * from
- emp where
- <if test="empName != null and empName != ''">
- emp_name = #{empName}
- if>
- <if test="age != null and age != ''">
- and age = #{age}
- if>
- <if test="gender !=null and gender != ''">
- and gender = #{gender}
- if>
-
1、若where标签中有条件成立,会自动生成一个where关键字进行拼接
2、会自动将where标签中内容前多余的and去掉,但是不会加and,所以在第一个if之后的语句都要加and。也不会将内容后的and去掉
3、如果没有任何一个条件成立,则where没有任何功能,即不会生成where关键字
- select * from emp
-
- <if test="empName != null and empName != ''">
- emp_name = #{empName}
- if>
- <if test="age != null and age != ''">
- and age = #{age}
- if>
- <if test="gender != null and gender != ''">
- and gender = #{gender}
- if>
-
prefix,suffix:在整个标签内容前面或后面添加指定的内容
prefixOverrides,suffixOverrides:在标签中内容前面或后面添加指定的内容
- select * from emp
-
"where" suffixOverrides="and"> - <if test="empName != null and empName != ''">
- emp_name = #{empName} and
- if>
- <if test="age != null and age != ''">
- age = #{age} and
- if>
- <if test="gender != null and gender != ''">
- gender = #{gender}
- if>
-
- 例如
- choose: when(){}
- when(){}
- when(){}
- otherwise(){}
- 相当于java中的if(){}
- else if(){}
- else if(){}
- else{}
- when至少设置一个,otherwise做多设置一个
- 即只要一个条件满足,后面的条件就不会再判断了
-
-
-
- select * from emp
-
-
-
"empName != null and empName != ''"> - emp_name=#{empName}
-
-
"age != null and age != ''"> - age=#{age}
-
-
"gender != null and gender != ''"> - gender=#{gender}
-
-
-
-
遍历集合和数组
"insertBatchEmp"> - insert into emp values
-
"empList" item="emp" separator=","> - (null,#{emp.empName},#{emp.age},#{emp.gender},null)
-
-
"deleteBatchEmpOne"> - delete from emp where emp_id in
-
"empIds" item="empId" separator="," open="(" close=")"> - #{empId}
-
-
"deleteBatchEmp"> - delete from emp where
-
"empIds" item="empId" separator="or"> - emp_id = #{empId}
-
- /**
- * 批量添加Emp数据
- * @param emps
- */
- void insertEmpByForeach(@Param("emps") List
emps) ;
-
-
"insertEmpByForeach"> - insert into emp values
-
"emps" item="emp" separator=","> - (null,#{emp.empName},#{emp.age},#{emp.gender},null)
-
-
可以记录一段sql,在需要用的地方使用include标签进行引用
"empColumns"> - emp_id,emp_name,age,gender,dept_id
-
"empColumns"/>