原文网址:Mybatis-Plus--QueryWrapper--使用/实例_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Mybatis-Plus中的QueryWrapper的用法。
全量查询
通过设置实体类的值来查询:若某一项设置为null,则不会拼接sql。
通过Map和allEq来查询:若某一项设置为null,则会拼接sql。(若想过滤null项,allEq的第二个参数设为false)
select示例:new QueryWrapper<>() .select("name", "age")......
等值查询
查询名字叫“Tony”的,年龄等于20的。
- seletOne返回的是一条实体记录,当出现多条时会报错。
- 如果需要有多条记录时只取一条,可以使用IService.java的getOne(Wrapper<T>, Boolean)方法,指定第二个参数为false。
方案1:直接用eq
public void testSelectEqList() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
queryWrapper.eq("age", 28);
queryWrapper.eq("last_name", null);
// 这样也可以
// queryWrapper.eq("name", "张三").eq("age", 28).eq("last_name", null);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
执行结果
==> Preparing: SELECT id,name,last_name,email,gender,age FROM tb_user WHERE (name = ? AND age = ? AND last_name = ?)
==> Parameters: 张三(String), 28(Integer), null
<== Total: 0
方案2:传实体类
public void testSelectList() {
User user = new User();
user.setName("张");
user.setAge(28);
user.setLastName(null);
QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
//User user = userMapper.selectOne(queryWrapper); //查询一条记录
//System.out.println(user);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
执行结果
==> Preparing: SELECT id,name,last_name,email,gender,age FROM tb_user WHERE name=? AND age=?
==> Parameters: 张(String), 28(Integer)
<== Total: 0
方案3:Map+allEq
public void selectWrapper13() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Map<String, Object> map = new HashMap<>();
// 普通查询
map.put("name", "张三");
map.put("age",28);
map.put("last_name",null);
queryWrapper.allEq(map);
// queryWrapper.allEq(map, false);// 传入false自动过滤为null的
// 自动过滤name参数
//queryWrapper.allEq((key, value) -> !key.equals("name"), map);
//User user = userMapper.selectOne(queryWrapper); //查询一条记录
//System.out.println(user);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
执行结果
==> Preparing: SELECT id,name,last_name,email,gender,age FROM tb_user WHERE (name = ? AND last_name IS NULL AND age = ?)
==> Parameters: 张三(String), 28(Integer)
<== Total: 0
传入false执行结果
==> Preparing: SELECT id,name,last_name,email,gender,age FROM tb_user WHERE (name = ? AND age = ?)
==> Parameters: 张三(String), 28(Integer)
<== Total: 0
多条件查询
上边是文章的部分内容,为便于维护,全文已转移到此网址:Mybatis-Plus-QueryWrapper-使用/实例 - 自学精灵