##Mybatis中的动态sql
根据用户提供的数据动态决定查询语句依赖的查询条件或者sql语句的内容
if标签
选择标签,if会自动的把第一个条件执行的逻辑运算符去掉(or,and)
//如果传递了名字就根据名字查询,如果没传递就查询全部
<select id="findAll3" resultType="com.mb.pojo.account">
select * from account where 1=1
<if test="name!=null">
and name like '%${name}%'
</if>
</select>
where标签
相当于sql中的where后面跟条件,需要注意的是where和if一样也是会把第一个条件执行的逻辑运算符去掉
例如:
<!-- where标签-->
<select id="findMoney" resultType="com.mb.pojo.account">
select * from account
<where>
<if test="minMoney!=null">
money>#{minMoney}
</if>
<!-- 转义字符:<![CDATA[转义字符]]>-->
<if test="maxMoney!=null">
and money<![CDATA[<]]>#{maxMoney}
</if>
</where>
</select>
需要注意的是在mybatis中"<"符号需要进行转义,因为在xmL中标签是“<”开头的
set标签
set标签可以将动态的配置 SET 关键字,并剔除追加到条件末尾的任何不相关的逗号。使用 if+set 标签修改后,在进行表单更新的操作中,哪个字段中有值才去更新,如果某项为 null 则不进行更新,而是保持数据库原值。
<!-- 修改表中指定得信息-->
<update id="updateById">
update account
<set>
<if test="name!=null">name=#{name},</if>
<if test="money!=null">money=#{money}</if>
</set>
where id=#{id}
</update>
foreach标签
item :循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details,在list和数组中是其中的对象,在map中是value。
index :在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。
open :表示该语句以什么开始
close :表示该语句以什么结束
separator :表示元素之间的分隔符
<!-- 查询多个id(foreach的使用)-->
<select id="findByIds" resultType="com.mb.pojo.account">
select * from account where id in
<foreach collection="array" open="(" close=")" item="id" separator=",">
#{id}
</foreach>
</select>