Mybatis學習----模糊查詢和動態sql
阿新 • • 發佈:2019-01-07
表結構:
user:id
name
age
需求:查詢名字中帶有o的和年齡在10,20歲之間的人
重新寫一個模糊查詢的類 FuzzySearch用來封裝查詢條件
FuzzySearch.java
在userMapper.xml中配置package cn.limbo.pojo; /** * Created by limbo on 2016/10/26. */ public class FuzzySearch { private String name; private int maxAge; private int minAge; public FuzzySearch() { } public FuzzySearch(String name, int maxAge, int minAge) { this.name = name; this.maxAge = maxAge; this.minAge = minAge; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMaxAge() { return maxAge; } public void setMaxAge(int maxAge) { this.maxAge = maxAge; } public int getMinAge() { return minAge; } public void setMinAge(int minAge) { this.minAge = minAge; } }
<select id="fuzzyUser" parameterType="FuzzySearch" resultType="User">
SELECT * FROM users WHERE
<if test="name != '%null%' ">
name LIKE #{name} AND
</if>
age BETWEEN #{minAge} AND #{maxAge}
</select>
中間的<if>標籤表示的是檢查傳進來的name是否為空
呼叫:
小結:發現一個很坑的地方就是你傳給sql語句的name寫法必須是 %name% 如果在 #{name}外面加上%%不起作用的,會報錯的,很奇怪。@Test public void testFuzzy(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); String statment = "cn.limbo.pojo.userMapper.fuzzyUser"; String name = null; String nameString = "%"+name+"%"; List<User> users = sqlSession.selectList(statment,new FuzzySearch(nameString,20,10)); System.out.println(users); sqlSession.close(); }