含义
动态的SQL语句,就是指在运行的时候,根据Mapper.xml中的语句,来决定方法传入参数的使用。
使用
<if test=""></if>标签
Mapper.xml中的配置 if 判断 参数传入的值,判断是否可以使用,再执行SQL语句,
缺点
如何传入的值分别是null,1时or 符号不会消失,这样sql语句识别不出来。
<select id="queryUserByUser" resultType="com.atguigu.pojo.User" parameterType="com.atguigu.pojo.User">
select
`id` ,`last_name` lastName ,`sex`
from
t_user
where
<if test="lastName!=null">
last_name=#{lastName}
</if>
<if test="sex==0||sex==1">
or sex=#{sex}
</if>
</select>
<where ></where>标签
Mapper.xml中的配置where能有效帮助我们,添加和去除查询条件前面的关键字。
缺点
不能去除查询条件后面的多余的关键。
<select id="queryUserByUser" resultType="com.atguigu.pojo.User" parameterType="com.atguigu.pojo.User">
select
`id` ,`last_name` lastName ,`sex`
from
t_user
<where>
<!--
where 它可以判断查询条件前面多余的and 或 or ,它会帮我们去掉
如果where里有内容,还会帮我们添加where关键字,如果没有内存关键where也不会存在
-->
<if test="lastName!=null">
last_name=#{lastName}
</if>
<if test="sex==0||sex==1">
or sex=#{sex}
</if>
</where>
</select>
<trim></trim>标签
Mapper.xml文件中的trim标签,可以通过设置——perfix、suffix、perfixOverrides、suffixOverrides四个属性来,帮助我们很好在条件上,进行关键字的添加和去除。
<select id="queryUserByUser" resultType="com.atguigu.pojo.User" parameterType="com.atguigu.pojo.User">
select
`id` ,`last_name` lastName ,`sex`
from
t_user
<!--
trim标签可以动态的再语句的前后添加内容
prefix :前面添加内容
suffix :后面添加内容
suffixOverrides :去掉后面的内容
prefixOverrides :去掉前面的内容
-->
<trim prefix="where" suffixOverrides="or" prefixOverrides="or">
<if test="lastName!=null">
last_name=#{lastName}
</if>
<if test="sex==0||sex==1">
or sex=#{sex}
</if>
</trim>
</select>
<choose></choose>、<when></when>、<otherwise></otherwise>标签
Mapper.xml中的choose、when、otherwise标签可以很好的帮助我们,做到多路判断,满足一个条件后就不会向下执行,
都不满足的情况下,会执行otherwise里面的条件。
<select id="queryUserByUser" resultType="com.atguigu.pojo.User" parameterType="com.atguigu.pojo.User">
select
`id` ,`last_name` lastName ,`sex`
from
t_user
<!--
trim标签可以动态的再语句的前后添加内容
prefix :前面添加内容
suffix :后面添加内容
suffixOverrides :去掉后面的内容
prefixOverrides :去掉前面的内容
-->
<!--
where 它可以判断查询条件前面多余的and 或 or ,它会帮我们去掉
如果where里有内容,还会帮我们添加where关键字,如果没有内存关键where也不会存在
-->
<where>
<choose>
<!-- choose、when、otherwise这三个标签是组合使用的
如果判断的时候,遇到第一个条件满足的话,就不会往下判断
如果都不满足就会有,otherwise就会执行里面的条件
-->
<when test="lastName!=null">
last_name=#{lastName}
</when>
<when test="sex==0||sex==1">
sex=#{sex}
</when>
<otherwise>
id=#{id}
</otherwise>
</choose>
</where>
</select>
<set></set>标签
Mapper.xml中的set标签可以,在判断后去除更新列后多余的逗号,自动添加set标签,当然也可以用trim标签来解决。
<update id="updateUser" parameterType="com.atguigu.pojo.User">
update
t_user
<set>
<!--set标签可以去除,判断后跟新列后面多余的逗号
同时还会自动添加set
-->
<if test="lastName!=null">
`last_name`=#{lastName},
</if>
<if test="sex==0||sex==1">
`sex`=#{sex}
</if>
</set>
where
id=#{id}
</update>
<foreach></foreach>标签
Mapper.xml文件中可以通过foreach标签实现,对数据库的批量插入。
<insert id="insertUsers" >
insert into
t_user(`last_name`,`sex`)
values
<!-- foreach标签是做循环遍历
collection 属性表示的是集合的类型,包括遍历的元素
item 表示当前遍历到的数据
separator 表示分隔符
-->
<foreach collection="list" item="user" separator=",">
(#{user.lastName},#{user.sex})
</foreach>
</insert>
sql片段
Mapper.xml文件中可以通过sql标签,来抽取sql语句,在通过include标签进行加载。
<sql id="唯一的识别属性">
相应的SQL语句
</sql>
<include refid="唯一的id标识"></include>
来源:CSDN
作者:李可叵
链接:https://blog.csdn.net/weixin_41573252/article/details/104399768