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 也是一樣的