Mybatis的映射文件中,在面对业务逻辑复杂时,sql是动态变化的,如在sname不为空时可以根据sname查询,如果gender不为空时还要加入gender作为条件。
如:
<select id="findStudentsDynSql" parameterType="Student" resultType="Student">
select * from student where 1=1
<if test="sname !=null and sname !=''">
按照sname条件查询
and sname like '%${sname}%'
</if>
<if test="gender !=null and gender!=''">
and gender=#{gender}
</if>
</select>
简化:使用标签:
基本语法:
foreach:遍历 集合查询
select * from student where id in(1,3,5,7)
collection:要遍历的集合 可以是list array map
itme:遍历集合时每一个元素的临时变量
open:遍历前开头
close:遍历结束
separator:元素之间的分割符
实例一:
<sql id="defaultStudentSql">
select * from student
</sql>
<select id="findStudentsDynSql" parameterType="Student" resultType="Student">
<include refid="defaultStudentSql"></include>
<where>
<if test="sname !=null and sname !=''">
<!-- 按照sname条件查询 -->
and sname like '%${sname}%'
</if>
<if test="gender !=null and gender!=''">
and gender=#{gender}
</if>
</where>
</select>
实例二:
<select id="findStudentsDynSqlByIds" resultType="Student">
<include refid="defaultStudentSql"></include>
<where>
<if test="list !=null">
<!-- 遍历集合参数 -->
<foreach collection="list" item="id" open="id in (" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
</select>