MyBatisPlus——DQL编程控制——条件查询

DQL编程控制

条件查询——设置查询条件

  • 格式一:常规格式
		//方式一:按条件查询
		QueryWrapper qw = new QueryWrapper();
		// 10岁到30岁之间的用户
		qw.gt("age",10);
		qw.lt("age",30);
		List<User> users = userDao.selectList(qw);
		System.out.println(users);
  • 格式二:链式编程格式
		//方式一:按条件查询
		QueryWrapper qw = new QueryWrapper();
		// 10岁到30岁之间的用户
		qw.gt("age",10).lt("age",30);
		List<User> users = userDao.selectList(qw);
		System.out.println(users);
  • 格式三:lambda格式(推荐)
		//方式二:lambda格式按条件查询
		QueryWrapper<User> qw = new QueryWrapper();
		// 10岁到30岁之间的用户
		qw.lambda().gt(User::getAge,10).lt(User::getAge,30);
		List<User> users = userDao.selectList(qw);
		System.out.println(users);
  • 格式四:lambda格式(推荐)
		// 方式三:lambda格式按条件查询
		LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
		// 10岁到30岁之间的用户
		//lqw.gt(User::getAge,10).lt(User::getAge,30);
		// 小于10岁或者大于30岁的用户
		lqw.gt(User::getAge,30).or().lt(User::getAge,10);
		List<User> users = userDao.selectList(lqw);
		System.out.println(users);
  • 直接链式编程表示且关系
  • 要表示或关系需要在中间加上.or()
		// 小于10岁或者大于30岁的用户
		lqw.gt(User::getAge,30).or().lt(User::getAge,10);

条件查询——null值处理

  • 条件参数控制
		// 模拟页面传递过来的数据
		UserQuery uq = new UserQuery();
		//uq.setAge(10);
		uq.setAge2(30);

		// null值判定(尽量不用链式编程,过于长了)
		LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper();
		lqw.gt(null != uq.getAge(),User::getAge,uq.getAge());
		lqw.lt(null != uq.getAge2(), User::getAge,uq.getAge2());
		List<User> users = userDao.selectList(lqw);
		System.out.println(users);

查询投影

  • 只查询一部分字段
		// 查询投影——只查询部分字段
		LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper();
		lqw.select(User::getId,User::getName);
		List<User> users = userDao.selectList(lqw);
		System.out.println(users);
  • 若要完成模型类中未定义的属性(聚合函数)或是分组查询,则不能使用lambda格式
		// 查询count(*)  不能使用lambda格式
		QueryWrapper<User> qw = new QueryWrapper();
		qw.select("count(*) as count, tle");
		qw.groupBy("tle");
		List<Map<String, Object>> userList = userDao.selectMaps(qw);
		System.out.println(userList);

查询条件

  • 匹配(等于)
		LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper();
		// 等于
		lqw.eq(User::getName,"王麻子").eq(User::getTle,"10086");
		User loginUser = userDao.selectOne(lqw);
		System.out.println(loginUser);
  • 范围查询(between)
		// 范围查询 lt-小于  le-小于等于  gt-大于  ge-大于等于 eq-等于 ne-不等于 between-范围查询
		LambdaQueryWrapper<User> lqw1 = new LambdaQueryWrapper();
		// 10岁到30岁之间的用户
		lqw1.between(User::getAge,10,30);
		List<User> userList = userDao.selectList(lqw1);
		System.out.println(userList);
  • 模糊匹配(like-非全文检索版)
		// 模糊匹配 like-模糊匹配  notLike-不模糊匹配
		LambdaQueryWrapper<User> lqw2 = new LambdaQueryWrapper();
		// 名字带有王的用户
		//lqw2.like(User::getName,"王");
		// likeRight—— 王%
		lqw2.likeRight(User::getName,"王");
		// likeLeft—— %王
		lqw2.likeLeft(User::getName,"王");
		List<User> userList2 = userDao.selectList(lqw2);
		System.out.println(userList2);

 

字段映射与表名映射

  • 问题一:表字段属性与编码属性设计不同步

  

  •  

 

  • 问题二编码中添加了数据库中未定义的属性

  

  • 问题三:采用默认查询(select * ...)开放了更多字段的查看权限

  

    • 使用注解:@TableField
    • 类型:属性注解
    • 位置:模型类属性定义上方
    • 作用设置当前属性对应的数据库表中的字段关系
    • 范例
    • 相关属性
      • value(默认):设置数据库表字段名称
      • exist:设置属性在数据库字段中是否存在,默认为true。此属性无法与value属性合并使用
      • select:设置属性是否参与查询,此属性与select()映射配置不冲突

 

  • 问题四:表名与编码开发设计不同步

  

    • 使用注解:@TableName
    • 类型:类注解
    • 位置:模型类定义上方
    • 作用:设置当前类对应与数据库表关系
    • 范例

    

    • 相关属性
      • value:设置数据库表名称

 

posted @ 2023-04-04 14:28  风陵南  阅读(112)  评论(0)    收藏  举报