您的位置:首页 > 数据库

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

2016-10-26 20:00 399 查看
表结构:

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}外面加上%%不起作用的,会报错的,很奇怪。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: