条件查询方式
-
MyBatisPlus将书写复杂的SQL查询条件进行封装,使用编程的形式完成查询条件组合
条件查询,设置条件
@Test void testGetAll() { //方法一:按条件查询 // QueryWrapper qw = new QueryWrapper(); // qw.lt("age", 18); //查询条件位 age小于18的 // System.out.println(userDao.selectList(qw)); // //方法二:lambda格式按条件查询 // QueryWrapper<User> qw = new QueryWrapper<User>(); // qw.lambda().lt(User::getAge, 18); //查询条件位 age小于18的 // System.out.println(userDao.selectList(qw)); //方法三:lambda格式按条件查询 // LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); // lqw.lt(User::getAge, 10); // System.out.println(userDao.selectList(lqw)); //多条件查询 LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //10岁到30岁 // lqw.lt(User::getAge, 30).gt(User::getAge, 10); //10岁以下,30岁以上 lqw.lt(User::getAge, 10).or().gt(User::getAge, 30); System.out.println(userDao.selectList(lqw)); }
条件查询-null值处理
-
if语句控制条件追加
-
条件参数控制
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); lqw.lt(null != uq.getAge2(), User::getAge, uq.getAge2()); lqw.gt(null != uq.getAge(), User::getAge, uq.getAge()); List<User> userList = userDao.selectList(lqw); System.out.println(userList);
查询投影
-
查询结果包含模型类中部分属性
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); lqw.select(User::getId, User::getName, User::getAge); System.out.println(userDao.selectList(lqw));
-
查询结果包含模型类中未定义的属性
QueryWrapper<User> qw = new QueryWrapper<User>(); qm.select("count(*) as count, age"); qm.groupBy("gender"); List<Map<String, Object>> maps = userDao.selectMaps(qm); System.out.println(maps);
查询条件设定
查询条件
-
范围匹配(> 、=、between)
-
模糊匹配(like)
-
空判定(null)
-
包含性匹配(in)
-
分组(group)
-
排序(order)
-
……
字段映射与表名映射
问题一:数据库字段名和编码中属性名称不一样
-
名称:@TableField
-
类型:属性注解
-
位置:模型类属性定义上方
-
作用:设置当前属性对应的数据库表中的字段关系
-
范例
public class User { @TableField(value = "pwd") private String password; }
-
相关属性
-
value(默认)设置数据库表字段名称
-
问题二:编码中添加了数据库中未定义的属性
-
名称:@TableField
-
类型:属性注解
-
位置:模型类属性定义上方
-
作用:设置当前属性对应的数据库表中的字段关系
-
范例
public class User { @TableField(exist = "false") private Integer online; }
-
相关属性
-
value(默认):设置数据库表字段名称
-
exist:设置属性再数据库表中是否存在,默认为true。此属性无法与value合并使用
-
问题三:采用默认查询开放了更多字段查看权限
-
名称:@TableField
-
类型:属性注解
-
位置:模型类属性定义上方
-
作用:设置当前属性对应的数据库表中的字段关系
-
范例
public class User { @TableField(value = "pwd", select = false) private String password; }
-
相关属性
-
value(默认)设置数据库表字段名称
-
exist:设置属性再数据库表中是否存在,默认为true。此属性无法与value合并使用
-
select:设置属性是否参与查询,此属性与select()映射配置不冲突
-
问题四:表明与类名开发设计不同步
-
名称:@TableName
-
类型:属性注解
-
位置:模型类属性定义上方
-
作用:设置当前属性对应的数据库表中的字段关系
-
范例
@TableName("tbl_user") public class User { private String password; }
-
相关属性
-
value(默认)设置数据库表名称
-