mybatis動態SQL之if標簽
我們根據實體類的不同取值,使用不同的 SQL 語句來進行查詢。比如在 id 如果不為空時可以根據 id 查詢,如果 username 不同空時還要加入用戶名作為條件。這種情況在我們的多條件組合查詢中經常會碰到。
1、持久層接口
/**
* 根據用戶信息,查詢用戶列表
* @param user
* @return
*/
List<User> findByUser(User user);
2、映射配置
<!--參數類型和返回值結果類型使用了別名-->
<select id="findByUser" resultType="user" parameterType="user">
select * from user where 1=1
<if test="username!=null and username != '' ">
and username like #{username}
</if>
<if test="address != null">
and address like #{address}
</if>
</select>
注意:if標簽的 test 屬性中寫的是對象的屬性名,如果是包裝類的對象要使用 OGNL 表達式的寫法。另外要注意 where 1=1 的作用~!
3、測試
@Test
public void testFindByUser() {
User u = new User();
u.setUsername("%王%");
u.setAddress("%順義%");
//6.執行操作
List<User> users = userDao.findByUser(u);
for(User user : users) {
System.out.println(user);
}
}
