您的位置:首页 > 数据库

Mybatis动态SQL与模糊查询

2016-09-18 11:50 603 查看

Mybatis动态SQL与模糊查询

创建
User


CREATE TABLE d_user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
age INT(3)
);
insert into d_user(name,age) values('Tom',12);
insert into d_user(name,age) values('Bob',13);
insert into d_user(name,age) values('Jack',18);


需要实现多条件查询用户(姓名模糊匹配, 年龄在指定的最小值到最大值之间)

定义查询条件类
ConditionUser
,如下:

package mybatis.bean;

public class ConditionUser {

private String name;
private int minAge;
private int maxAge;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMinAge() {
return minAge;
}
public void setMinAge(int minAge) {
this.minAge = minAge;
}
public int getMaxAge() {
return maxAge;
}
public void setMaxAge(int maxAge) {
this.maxAge = maxAge;
}
@Override
public String toString() {
return "ConditionUser [name=" + name + ", minAge=" + minAge + ", maxAge=" + maxAge + "]";
}
public ConditionUser(String name, int minAge, int maxAge) {
super();
this.name = name;
this.minAge = minAge;
this.maxAge = maxAge;
}

public ConditionUser() {
}

}


userMapper.xml
中使用如下的查询方式

<select id="getUser" parameterType="mybatis.bean.ConditionUser" resultType="mybatis.bean.User">
select * from d_user where name like #{name} and age between #{minAge} and #{maxAge}
</select>


查询过程如下:

ConditionUser param = new ConditionUser("%o%", 13, 18);

List<mybatis.bean.User> users = session.selectList("mybatis.test7.userMapper.getUser", param);
for (mybatis.bean.User user : users) {
System.out.println(user);
}


会输出查询结果。

但这样做,还要一个问题,假设当前需要查询的name,用户没有输入,则会出错,如何解决呢?

userMapper.xml
中的配置如下:

<select id="getUser" parameterType="mybatis.bean.ConditionUser" resultType="mybatis.bean.User">
select * from d_user where
<if test='name!="%null%"'>name like #{name} and</if>
age between #{minAge} and #{maxAge}
</select>


查询测试如下:

ConditionUser param = new ConditionUser("%null%", 13, 18);

List<mybatis.bean.User> users = session.selectList("mybatis.test7.userMapper.getUser", param);
for (mybatis.bean.User user : users) {
System.out.println(user);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis