mybatis之动态sql——if、where、foreach、choose、set
程序员文章站
2022-06-11 16:28:32
...
目的
简化sql语句的拼串操作。
if语句
<select id="findAllEmp" resultType="com.xzy.bean.EmpInfo">
select * from emp where
/*test="" 编写判断条件,
id!=null :取出Javabean属性当中的id值,判断是否为空
*/
<if test="id!=null">
id > #{id} and
</if>
/*判断属性是否为空*/
<if test="name!=null">
name like #{name} and
</if>
</select>
注意:
使用if语句进行拼串最后一个条件如果不满足,会有多的and,这时sql语句是不正确的。
xml当中还要注意特殊字符的转义。
where标签
<select id="findAllEmp" resultType="com.xzy.bean.EmpInfo">
select * from emp
/*where标签可以帮我们自动去除掉前面的and*/
<where>
/*test="" 编写判断条件,
id!=null :取出Javabean属性当中的id值,判断是否为空
*/
<if test="id!=null">
id > #{id}
</if>
/*判断属性是否为空*/
<if test="name!=null">
and name like #{name}
</if>
</where>
</select>
where 标签可以帮我们自动去除掉条件满足后的sql前面多余的and。
trim 截取字符串
prefix="" :为下面的sql整体添加一个前缀
prefixOverrides="" :去除sql语句中前面多余的字符
suffix="" :为整体添加一个后缀
suffixOverrides="" :可以去掉后面多余的字符
<select id="findAllEmp" resultType="com.xzy.bean.EmpInfo">
select * from emp
/*trim:截取字符串
prefix="" :为下面的sql整体添加一个前缀
prefixOverrides="" :去除sql语句中前面多余的字符
suffix="" :为整体添加一个后缀
suffixOverrides="" :可以去掉后面多余的字符
*/
<trim prefix="where" prefixOverrides="and" suffixOverrides="and">
/*test="" 编写判断条件,
id!=null :取出Javabean属性当中的id值,判断是否为空
*/
<if test="id!=null">
id > #{id}
</if>
/*判断属性是否为空*/
<if test="name!=null">
and name like #{name}
</if>
</trim>
</select>
foreach 遍历集合
<select id="findAllEmp" resultType="com.xzy.bean.EmpInfo">
select * from emp where id in
/*
collection="" :指定要遍历的集合
close="" :以什么结束
open="" :以什么结束
index="" :如果遍历的是list,index保存当前遍历元素的索引
如果是map,index保存到就是key
item="" :遍历取出的元素,如果是map,取出的就是value
separator="" 以什么分割
*/
<foreach collection="list" close=")" index="" item="id_item" open="(" separator=",">
#{id_item}
</foreach>
</select>
choose标签
<select id="findAllEmp" resultType="com.xzy.bean.EmpInfo">
select * from emp
<where>
/*
满足一个条件之后就直接拼接sql语句,相当于分支选择
*/
<choose>
<when test=""></when>
<when test=""></when>
<when test=""></when>
<otherwise></otherwise>
</choose>
</where>
</select>
set标签 动态更新
会自动去掉多余的逗号,主要用于动态更新。
<update id="updateEmp">
UPDATE emp SET
<set>
<if test="id!=null" >
id=#{id},
</if>
<if test="name!=null" >
name=#{name},
</if>
<if test="age!=null" >
age=#{age},
</if>
</set>
</update>
下一篇: 日常运维(七)
推荐阅读
-
MyBatis从入门到精通(八):MyBatis动态Sql之foreach标签的用法
-
Mybatis中动态SQL,if,where,foreach的使用教程
-
MyBatis从入门到精通(七):MyBatis动态Sql之choose,where,set标签的用法
-
mybatis之动态sql——if、where、foreach、choose、set
-
MyBatis从入门到精通(八):MyBatis动态Sql之foreach标签的用法
-
MyBatis从入门到精通(七):MyBatis动态Sql之choose,where,set标签的用法
-
Mybatis中动态SQL,if,where,foreach的使用教程
-
mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用
-
Mybatis动态sql、if与where的使用、sql片段、foreach遍历、Mybatis的关联查询一对一、一对多、多对多、Mybatis的延时加载