MyBatis学习07--动态sql语句if、where、foreach
1. sql标签
使用sql标签将重复的sql语句部分封装起来
在需要使用这个sql片段的地方,就用include标签引入就行了
<sql id="select_all">
select * from t_user
</sql>
2. if标签
<select id="findUserListByAddress" parameterType="string" resultType="User">
<include refid="select_all"/>
<!--
加入一个判断,判断传入的address是否为空,使用if标签进行判断,该标签中的test属性就编写判断条件
-->
<if test="address != null">
where address=#{address}
</if>
</select>
3. where标签
<select id="findUserListByAddressAndSex" parameterType="User" resultType="User">
<!--
include标签引入sql标签中的sql语句
refid填写的是sql标签的id
-->
<include refid="select_all"/>
<!--
where标签的作用:
1. 可以在条件之前添加where关键字
2. 可以去掉第一个条件前的and
-->
<where>
<if test="address != null">
and address=#{address}
</if>
<if test="sex != null">
and sex=#{sex}
</if>
</where>
</select>
4. foreach标签
<delete id="deleteByIds" parameterType="int" >
delete from t_user
<!--
将传入的集合中的数据遍历出来,放到()里面
使用foreach标签遍历
collection属性:要遍历的集合,如果要遍历的是一个List则写成list
item属性: 遍历出来的每一个元素
separator属性: 遍历出来的每一个元素之间的分隔符
index属性: 遍历出来的每一个元素的索引
open属性: 在遍历出来的第一个元素之前拼接字符串
close属性: 在遍历出来的最后一个元素之后拼接字符串
-->
<foreach collection="list" item="id" separator="," open="where uid in(" close=")">
#{id}
</foreach>
</delete>
总结:全部代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
根标签mapper,一个映射配置文件,就对应一个dao接口
根标签的namespace属性的值就对应dao接口的全限定名
-->
<mapper namespace="com.itheima.dao.UserDao">
<!--
使用sql标签将重复的sql语句部分封装起来
在需要使用这个sql片段的地方,就用include标签引入就行了
-->
<sql id="select_all">
select * from t_user
</sql>
<select id="findUserListByAddress" parameterType="string" resultType="User">
<include refid="select_all"/>
<!--
加入一个判断,判断传入的address是否为空,使用if标签进行判断,该标签中的test属性就编写判断条件
-->
<if test="address != null">
where address=#{address}
</if>
</select>
<select id="findUserListByAddressAndSex" parameterType="User" resultType="User">
<!--
include标签引入sql标签中的sql语句
refid填写的是sql标签的id
-->
<include refid="select_all"/>
<!--
where标签的作用:
1. 可以在条件之前添加where关键字
2. 可以去掉第一个条件前的and
-->
<where>
<if test="address != null">
and address=#{address}
</if>
<if test="sex != null">
and sex=#{sex}
</if>
</where>
</select>
<delete id="deleteByIds" parameterType="int" >
delete from t_user
<!--
将传入的集合中的数据遍历出来,放到()里面
使用foreach标签遍历
collection属性:要遍历的集合,如果要遍历的是一个List则写成list
item属性: 遍历出来的每一个元素
separator属性: 遍历出来的每一个元素之间的分隔符
index属性: 遍历出来的每一个元素的索引
open属性: 在遍历出来的第一个元素之前拼接字符串
close属性: 在遍历出来的最后一个元素之后拼接字符串
-->
<foreach collection="list" item="id" separator="," open="where uid in(" close=")">
#{id}
</foreach>
</delete>
</mapper>