动态SQL标签
if标签可通过test属性(即传递过来的数据)的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中的内容不会执行
where和if一般结合使用:
- 若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的and/or去掉
<select id="getUser2" resultMap="rmap">select * from user<where><if test="id != null">id = #{id}</if><if test="name != null">and name = #{name}</if><if test="age != null">and age = #{age}</if></where></select>
用来迭代任何可迭代的对象(如数组,集合)。
collection 属性:
- mybatis会将数组参数,封装为一个Map集合。
- 默认:array = 数组
- 使用@Param注解改变map集合的默认key的名称
- mybatis会将数组参数,封装为一个Map集合。
- item 属性:本次迭代获取到的元素。
- separator 属性:集合项迭代之间的分隔符。foreach 标签不会错误地添加多余的分隔符。也就是最后一次迭代不会加分隔符。
- open 属性:该属性值是在拼接SQL语句之前拼接的语句
- close 属性:该属性值是在拼接SQL语句拼接后拼接的语句
<select id="getUserByIds" resultType="com.example.workspace.model.User">select * from user<where><foreach collection="list" item="id" separator="," open="id in (" close=")" >#{id}</foreach></where></select>
