mybatis中 where 1 = 1和动态标签where
比如下面这段代码:
<select id="getTotal" parameterType="Map" resultType="Integer">
select count(*) from menu where 1 = 1
<if test="parentId != null">
and parentId like #{parentId}
</if>
<if test="name != null">
and name like '%${name}%'
</if>
</select>
当一条查询语句有多个if时,就需要用到where 1 = 1 连接if接下去的语句
但是我们有另一种写法,那就是用到动态where
代码如下
<select id="getTotal" parameterType="Map" resultType="Integer">
select count(*) from menu
<where>
<if test="parentId != null">
and parentId like #{parentId}
</if>
<if test="name != null">
and name like '%${name}%'
</if>
</where>
</select>
没错,就是在if外面一层加上where标签,它会自动的将第一个and忽略掉,并且在该用到where的时候自动添加where
当然如果select之后一直一个时 我们也可以这么写
<select id="getTotal" parameterType="Map" resultType="Integer">
select count(*) from menu
<if test="parentId != null">
where parentId like #{parentId}
</if>
</select>
直接加上where 也是一样的