博主打算从0-1讲解下java进阶篇教学,今天教学第九篇:MyBatis-Plus用法介绍。
在 MyBatis-Plus 3.5.0 中,LambdaQueryWrapper支持多种条件构造方式,除了等于(eq)、不等于(ne)、大于(gt)、小于(lt)、大于等于(ge)、小于等于(le)等基本的条件构造方式外,还包括模糊查询(like)、模糊查询不匹配值(notLike)、在列表中(in)、不在列表中(notIn)等。
本文以MyBatis-Plus 3.5.0版本讲述!
一、依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.0</version> </dependency>
二、基本使用
假设有一个BannerItem表,需要通过banner_id查出所有数据(查询List)。
public class BannerItem { private Long id; private String name; private String img; private String keyword; private Integer type; private Long bannerId; }
可以使用QueryWrapper进行查询,最基础的使用方式如下:
LambdaQueryWrapper<BannerItem> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BannerItem::getBannerId, bannerId); List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
三、LambdaQueryWrapper条件构造
// 等于 wrapper.eq(BannerItem::getBannerId, bannerId); // 不等于 wrapper.ne(BannerItem::getBannerId, bannerId); // 大于 wrapper.gt(BannerItem::getBannerId, bannerId); // 小于 wrapper.lt(BannerItem::getBannerId, bannerId); // 大于等于 wrapper.ge(BannerItem::getBannerId, bannerId); // 小于等于 wrapper.le(BannerItem::getBannerId, bannerId);
3.1 模糊查询
1. // 模糊查询 2. wrapper.like(BannerItem::getName, "%zhangsan%");
3.2 排序
// 排序 wrapper.orderByDesc(BannerItem::getCreateTime);
3.3 分页
1. // 分页 2. Page<BannerItem> page = new Page<>(1, 10); 3. wrapper.page(page);
3.4 结果封装
// 结果封装 List<BannerVO> bannerVOs = wrapper.map(BannerVO::new).list();
3.5 模糊查询不匹配值
1. // 模糊查询不匹配值 2. wrapper.notLike(BannerItem::getName, "%zhangsan%");
3.6 在列表中(in)
// 使用列表形式 ArrayList<Integer> arrayList = new ArrayList<>(); Collections.addAll(arrayList, 18, 20, 21); lambdaQueryWrapper.in(User::getAge, arrayList); // 使用列举值形式 lambdaQueryWrapper.in(User::getAge, 18, 20, 21);
3.7 不在列表中(notIn)
// 使用列表形式 ArrayList<Integer> arrayList = new ArrayList<>(); Collections.addAll(arrayList, 18, 20, 21); lambdaQueryWrapper.notIn(User::getAge, arrayList); // 使用列举值形式 lambdaQueryWrapper.notIn(User::getAge, 18, 20, 21);
3.8 分组
// 假设我们有一个 Order 实体类,包含 orderId(订单编号)和 customerId(客户编号)字段 LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>(); // 根据 customerId 进行分组 wrapper.groupBy(Order::getCustomerId); // 执行查询 List<Order> groupedOrders = orderMapper.selectList(wrapper);
四、方法和属性
方法:
- eq:用于设置等于条件,例如queryWrapper.eq(User::getAge, 18)表示查询年龄等于 18 的用户。
- ne:用于设置不等于条件,例如queryWrapper.ne(User::getAge, 18)表示查询年龄不等于 18 的用户。
- lt:用于设置小于条件,例如queryWrapper.lt(User::getAge, 18)表示查询年龄小于 18 的用户。
- le:用于设置小于等于条件,例如queryWrapper.le(User::getAge, 18)表示查询年龄小于等于 18 的用户。
- gt:用于设置大于条件,例如queryWrapper.gt(User::getAge, 18)表示查询年龄大于 18 的用户。
- ge:用于设置大于等于条件,例如queryWrapper.ge(User::getAge, 18)表示查询年龄大于等于 18 的用户。
- like:用于设置模糊查询条件,例如queryWrapper.like(User::getUsername, "%zhang%")表示查询用户名包含"zhang"的用户。
- in:用于设置范围查询条件,例如queryWrapper.in(User::getAge, Arrays.asList(18, 20, 25))表示查询年龄在 18、20、25 中的用户。
- notIn:用于设置不在范围内的查询条件,例如queryWrapper.notIn(User::getAge, Arrays.asList(18, 20, 25))表示查询年龄不在 18、20、25 中的用户。
- between:用于设置范围查询条件,例如queryWrapper.between(User::getAge, 18, 25)表示查询年龄在 18 到 25 之间的用户。
- notBetween:用于设置不在范围内的查询条件,例如queryWrapper.notBetween(User::getAge, 18, 25)表示查询年龄不在 18 到 25 之间的用户。
- select:用于自定义查询结果的字段,例如queryWrapper.select(User::getUsername, User::getAge)表示查询用户名和年龄两个字段。
- orderBy:用于设置查询结果的排序规则,例如queryWrapper.orderByDesc(User::getAge)表示按照年龄降序排序查询结果。
- and:用于添加多个查询条件,例如queryWrapper.eq(User::getAge, 18).and(queryWrapper.like(User::getUsername, "%zhang%"))表示查询年龄等于 18 且用户名包含"zhang"的用户。
- or:用于添加多个查询条件,例如queryWrapper.eq(User::getAge, 18).or(queryWrapper.like(User::getUsername, "%zhang%"))表示查询年龄等于 18 或用户名包含"zhang"的用户。
属性:
- sqlSegment:表示当前查询条件的SQL片段。
五、mybatis-plus版本不同
可能因为mybatis-plus版本不同,方法和属性有略微不同,请理性对待!