Mybatis学习----模糊查询和动态sql

来源:互联网 发布:linux device mapper 编辑:程序博客网 时间:2024/04/29 02:37

表结构:

user:id

  name

  age

需求:查询名字中带有o的和年龄在10,20岁之间的人

重新写一个模糊查询的类 FuzzySearch用来封装查询条件

FuzzySearch.java

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;    }}
在userMapper.xml中配置

<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是否为空

调用:

@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();    }


小结:发现一个很坑的地方就是你传给sql语句的name写法必须是  %name%  如果在 #{name}外面加上%%不起作用的,会报错的,很奇怪。




0 0
原创粉丝点击