mybatis -plus基本查询

时间:2025-03-19 10:17:09
public class SelectTest { @Autowired UserMapper userMapper; @Test public void selectById() { User user = userMapper.selectById(1087982257332887553L); System.out.println(user); } @Test public void selectBatchIds() { List<Long> ids = Arrays.asList( 1087982257332887553L, 1094590409767661570L, 1094592041087729666L ); List<User> list = userMapper.selectBatchIds(ids); list.forEach(System.out::println); } @Test public void selectByMap() { Map<String, Object> map = new HashMap<>(); //map的key指代的是mysql表中的列名,并非java实体的属性名 map.put("name", "张雨琪"); map.put("manager_id", 1088248166370832385L); List<User> list = userMapper.selectByMap(map); list.forEach(System.out::println); } @Test public void selectList_all() { List<User> list = userMapper.selectList(null); list.forEach(System.out::println); } /** * 名字中包含雨,并且年龄小于40 * SELECT * FROM `user` * WHERE `name` LIKE '%雨%' AND `age`< 40 */ @Test public void selectList_like_lt() { // QueryWrapper<User> query = Wrappers.<User>query(); QueryWrapper<User> query = new QueryWrapper<>(); query.like("name", "雨").lt("age", 40); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 名字中包含雨,并且年龄大于等于20且小于等于40,并且email不为空 * SELECT * FROM `user` * WHERE `name` LIKE '%雨%' AND `age` <= 40 AND `age` >= 20 AND `email` IS NOT NULL */ @Test public void selectList_between_isNotNull() { QueryWrapper<User> query = new QueryWrapper<>(); query.like("name", "雨").between("age", 20, 40).isNotNull("email"); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 姓赵或者年龄大于等于25,按照年龄降序排列,年龄相同则按照id升序排列 * SELECT * FROM `user` * WHERE `name` LIKE '赵%' OR `age` >= 25 ORDER BY `age` DESC , `id` ASC; */ @Test public void selectList_or_orderByDesc_orderByAsc() { QueryWrapper<User> query = new QueryWrapper<>(); query.likeRight("name", "赵").or().ge("age", 20) .orderByDesc("age").orderByAsc("id"); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 创建日期为2019年2月14日,且直属上级姓王 * SELECT * FROM `user` * WHERE DATE_FORMAT(create_time,'%Y-%m-%d')='2019-02-14' * AND manager_id IN (SELECT id FROM `user` WHERE `name` LIKE '王%') */ @Test public void selectList_apply_inSql() { QueryWrapper<User> query = new QueryWrapper<>(); query.apply("DATE_FORMAT(create_time,'%Y-%m-%d')={0}", "2019-02-14") .inSql("manager_id", "SELECT id FROM `user` WHERE `name` LIKE '王%'"); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 姓王且(年龄小于40或邮箱不为空) * SELECT * FROM `user` * WHERE `name` LIKE '王%' AND (`age`< 40 OR `email` IS NOT NULL) */ @Test public void selectList_and_lambda() { QueryWrapper<User> query = new QueryWrapper<>(); query.likeRight("name", "王") .and(q -> q.lt("age", 40).or().isNotNull("email")); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 姓王且或者(年龄小于40且年龄大于20且邮箱不为空) * SELECT * FROM `user` * WHERE `name` LIKE '王%' OR (`age`< 40 AND `age` > 20 AND `email` IS NOT NULL) */ @Test public void selectList_or_lambda() { QueryWrapper<User> query = new QueryWrapper<>(); query.likeRight("name", "王") .or(q -> q.lt("age", 40).gt("age", 20).isNotNull("email")); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * (年龄小于40或邮箱不为空)且姓王 * SELECT * FROM `user` * WHERE (`age`< 40 OR `email` IS NOT NULL) AND `name` LIKE '王%' */ @Test public void selectList_nested() { QueryWrapper<User> query = new QueryWrapper<>(); query.nested(q -> q.lt("age", 40).or().isNotNull("email")) .likeRight("name", "王"); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 年龄为30,31,34,35 * SELECT * FROM `user` WHERE `age` IN (30,31,34,35); */ @Test public void selectList_in() { QueryWrapper<User> query = new QueryWrapper<>(); query.in("age", Arrays.asList(30, 31, 34, 35)); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 返回只满足条件的一条(只调用最后一次,有sql注入的风险) * SELECT * FROM `user` WHERE `age` IN (30,31,34,35) LIMIT 1; */ @Test public void selectList_last() { QueryWrapper<User> query = new QueryWrapper<>(); query.in("age", Arrays.asList(30, 31, 34, 35)).last("limit 1"); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 只查询指定字段 * SELECT `name`,`age` FROM `user` WHERE `age` IN (30,31,34,35) LIMIT 1; */ @Test public void selectList_select_include() { QueryWrapper<User> query = new QueryWrapper<>(); query.select("name", "age").in("age", Arrays.asList(30, 31, 34, 35)).last("limit 1"); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 排除指定字段 */ @Test public void selectList_select_exclude() { QueryWrapper<User> query = new QueryWrapper<>(); query.in("age", Arrays.asList(30, 31, 34, 35)).last("limit 1") .select( User.class, info -> !info.getColumn().equals("create_time") && !info.getColumn().equals("manager_id") ); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 条件判断 */ @Test public void selectList_condition() { String name = "刘"; String email = ""; QueryWrapper<User> query = new QueryWrapper<>(); query.like(StringUtils.isNotEmpty(name), "name", name) .like(StringUtils.isNotEmpty(email), "email", email); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 实体类作为条件构造器 * 默认是等值查询,可以在实体类属性中设置自定义条件 */ @Test public void selectList_entity() { User whereUser = new User(); whereUser.setName("刘");//name like "刘" whereUser.setAge(32);//age<30 QueryWrapper<User> query = new QueryWrapper<>(whereUser); query.eq("manager_id", "1088248166370832385"); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * allEq */ @Test public void selectList_allEq() { QueryWrapper<User> query = new QueryWrapper<>(); Map<String, Object> params = new HashMap<>(); params.put("name", "刘明强"); params.put("age", 31); params.put("email", null); // (params,false);//第二个参数表示如果列值为null是否按IS NULL查询,false则忽略null列的查询 query.allEq((k, v) -> !k.equals("name"), params, false);//第一个参数是过滤器 List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * selectMaps的应用场景1:当表中的列特别多,但实际只需要几个列时,这时返回一个实体类有些不必要 */ @Test public void selectMaps() { QueryWrapper<User> query = new QueryWrapper<>(); query.like("name", "雨").lt("age", 40).select("name", "age"); List<Map<String, Object>> maps = userMapper.selectMaps(query); maps.forEach(System.out::println); } /** * selectMaps的应用场景2:查询统计结果 * 按照直属上级分组,查询每组的平均年龄、最大年龄、最小年龄,并且只取年龄总和小于100的组 * SELECT AVG(age) avg_age,MIN(age) min_age,MAX(age) max_age * FROM `user` * GROUP BY `manager_id` * HAVING SUM(age)<100; */ @Test public void selectMaps2() { QueryWrapper<User> query = new QueryWrapper<>(); query.select("AVG(age) avg_age", "MIN(age) min_age", "MAX(age) max_age") .groupBy("manager_id") .having("SUM(age)<{0}", 100); List<Map<String, Object>> maps = userMapper.selectMaps(query); maps.forEach(System.out::println); } /** * selectObjs只返回第一列,其它列被遗弃 * 应用场景:只需返回一列的时候 */ @Test public void selectObjs() { QueryWrapper<User> query = new QueryWrapper<>(); query.like("name", "雨").lt("age", 40).select("name", "age"); List<Object> list = userMapper.selectObjs(query); list.forEach(System.out::println); } /** * 返回总记录数 */ @Test public void selectCount() { QueryWrapper<User> query = new QueryWrapper<>(); query.like("name", "雨").lt("age", 40); Integer count = userMapper.selectCount(query); System.out.println("总记录数:" + count); } /** * selectOne:只能查询一条记录,查询到多条会报错 */ @Test public void selectOne() { QueryWrapper<User> query = new QueryWrapper<>(); query.like("name", "刘红雨").lt("age", 40); User user = userMapper.selectOne(query); System.out.println(user); } /** * lambda条件构造器 */ @Test public void lambdaQueryWrapper1() { // LambdaQueryWrapper<User> lambdaQ = new QueryWrapper<User>().lambda(); // LambdaQueryWrapper<User> lambdaQ = new LambdaQueryWrapper<>(); LambdaQueryWrapper<User> lambdaQ = Wrappers.<User>lambdaQuery(); lambdaQ.like(User::getName, "雨").lt(User::getAge, 40); List<User> list = userMapper.selectList(lambdaQ); list.forEach(System.out::println); } /** * lambda条件构造器:防误写(例如列名"name"可能被误写) */ @Test public void lambdaQueryWrapper2() { LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>(); query.likeRight(User::getName, "王") .and(q -> q.lt(User::getAge, 40).or().isNotNull(User::getEmail)); List<User> list = userMapper.selectList(query); list.forEach(System.out::println); } /** * 链式lambda条件构造器:更优雅的书写方式 */ @Test public void lambdaQueryChainWrapper() { List<User> list = new LambdaQueryChainWrapper<User>(userMapper) .likeRight(User::getName, "王") .and( q -> q .lt(User::getAge, 40) .or() .isNotNull(User::getEmail) ) .list(); list.forEach(System.out::println); } }