MyBatisPlus3-条件查询和映射问题(字段、表名)

1. 条件查询三种方式

MyBatisPlus3-条件查询和映射问题(字段、表名)_第1张图片

条件查询多用第三种;
链式写表示且的关系,中间加上or()表示或的关系;
给出相应示例代码:

@Test
public void testGetList(){
	//方式一:按条件查询
	/*QueryWrapper userQueryWrapper = new QueryWrapper<>();*/
	/*userQueryWrapper.lt("age", 18);*/
	/*List users = userDao.selectList(userQueryWrapper);*/
	/*System.out.println(users);*/
	
	//方式二:lambda格式按条件查询
	/*QueryWrapper userQueryWrapper = new QueryWrapper();*/
	/*userQueryWrapper.lambda().lt(User::getAge, 18);*/
	/*List users = userDao.selectList(userQueryWrapper);*/
	/*System.out.println(users);*/
	
	//方式三:lambda格式按条件查询
	/*LambdaQueryWrapper userLambdaQueryWrapper = new LambdaQueryWrapper<>();*/
	/*userLambdaQueryWrapper.lt(User::getAge, 18);*/
	/*List users = userDao.selectList(userLambdaQueryWrapper);*/
	/*System.out.println(users);*/
	
	//并且与或者关系
	LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
	//且的关系
	//userLambdaQueryWrapper.gt(User::getAge, 18).lt(User::getAge, 30);
	//或的关系
	userLambdaQueryWrapper.lt(User::getAge, 18).or().gt(User::getAge, 30);
	List<User> users = userDao.selectList(userLambdaQueryWrapper);
	System.out.println(users);
}

2. 条件查询的null值处理

lt()和gt()中做对应的判断,判断条件是否为null

//null值处理,业务场景中只有下限(或上限)条件时
UserQuery userQuery = new UserQuery();
userQuery.setAge(50);
//userQuery.setAge2(20);

LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
userLambdaQueryWrapper.lt(null != userQuery.getAge(), User::getAge, userQuery.getAge());
userLambdaQueryWrapper.gt(null != userQuery.getAge2(), User::getAge, userQuery.getAge2());
List<User> users = userDao.selectList(userLambdaQueryWrapper);
System.out.println(users);

也可以采用链式写法(阅读性差)

userLambdaQueryWrapper.lt(null != userQuery.getAge(), User::getAge, userQuery.getAge())
		              .gt(null != userQuery.getAge2(), User::getAge, userQuery.getAge2());

3. 查询投影

查询投影指的是从查询结果中选择需要的列或字段进行筛选,只返回这些特定的列或字段信息。这种方式可以使查询结果更简洁,且只包含所需的信息。

查询部分字段

//查询投影
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<User>();
//1.Lambda方式
userLambdaQueryWrapper.select(User::getId, User::getName);

//2.字段形式
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.select("id", "name");

List<User> users = userDao.selectList(userLambdaQueryWrapper);
List<User> users1 = userDao.selectList(userQueryWrapper);
System.out.println(users);
System.out.println(users1);

查询结果包括模型类中未定义的属性

QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.select("count(*) as count, tel");
userQueryWrapper.groupBy("tel");

List<Map<String, Object>> userList = userDao.selectMaps(userQueryWrapper);
System.out.println(userList);

4. 查询条件设置

等同于=的登录验证,查询一条使用selectOne()

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//等同于=
lqw.eq(User::getName,"Jerry").eq(User::getPassword,"jerry");
User loginUser = userDao.selectOne(lqw);
System.out.println(loginUser);

范围查询

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//范围查询 lt le gt ge eq between
lqw.between(User::getAge,10,30);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);

模糊查询,likeLeft表示%J,likeRight表示J%,like表示%J%

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//模糊匹配 like
lqw.likeLeft(User::getName,"J");
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);

5. 字段映射与表名映射

与之前的MyBatis中写xml文件时,采用resultMap的功能类似

  1. 属性名与数据库中的属性名不对应
  1. 编码中添加了数据库中未定义的属性,怎么避免sql报错
  1. 采用默认查询开放了更多的字段查询权限,这时需要隐藏一些字段的查询(password)
  1. 表名与编码开发设计不同步
@Data
//设置类名与数据库表名的映射(4)
@TableName("tbl_user")
public class User {
    private Long id;
    private String name;
    //属性名与数据库中的属性名不对应(1),隐藏一些字段的查询(3)
    @TableField(value = "pwd",select = false)
    private String password;
    private Integer age;
    private String tel;
    //设置数据库未定义的属性(2)
    @TableField(exist = false)
    private Integer online;
}

你可能感兴趣的:(MyBatisPlus,java,mybatis,数据库)