MyBatis-Plus的一些高级使用

使用 QueryWrapper 进行复杂查询

QueryWrapper 是 MyBatis-Plus 提供的一个查询构建器,可以用于构建复杂的 SQL 查询语句。例如:

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("id", "name", "age")
       .eq("gender", "male")
       .between("age", 20, 30)
       .inSql("city", "select city from city_table where province='Guangdong'")
       .orderByDesc("register_time");

List<User> userList = userMapper.selectList(wrapper);

在这个例子中,我们使用 QueryWrapper 对用户进行查询,其中包含了多个条件和子查询:

  • 使用 select 方法指定查询的列;
  • 使用 eq 方法指定 gender 等于 male;
  • 使用 between 方法指定 age 在 20 到 30 之间;
  • 使用 inSql 方法指定 city 包含在一个子查询中,该子查询用于筛选省份为 Guangdong 的城市;
  • 使用 orderByDesc 方法指定查询结果按照 register_time 降序排列。

使用 LambdaQueryWrapper 进行类型安全查询

LambdaQueryWrapper 是 QueryWrapper 的一个变体,可以使用 Lambda 表达式进行类型安全的查询。例如:

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User::getId, User::getName, User::getAge)
       .eq(User::getGender, "male")
       .between(User::getAge, 20, 30)
       .inSql(User::getCity, "select city from city_table where province='Guangdong'")
       .orderByDesc(User::getRegisterTime);

List<User> userList = userMapper.selectList(wrapper);

在这个例子中,我们使用 LambdaQueryWrapper 对用户进行查询,其中包含了多个条件和子查询,使用了方法引用来进行类型安全的查询。

使用 UpdateWrapper 进行更新操作

UpdateWrapper 是 MyBatis-Plus 提供的一个更新构建器,可以用于构建复杂的 SQL 更新语句。例如:

UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.set("status", 1)
       .eq("gender", "male")
       .between("age", 20, 30)
       .inSql("city", "select city from city_table where province='Guangdong'");

int count = userMapper.update(null, wrapper);

在这个例子中,我们使用 UpdateWrapper 对用户进行更新,其中包含了多个条件和子查询:

  • 使用 set 方法指定要更新的字段和值;
  • 使用 eq 方法指定 gender 等于 male;
  • 使用 between 方法指定 age 在 20 到 30 之间;
  • 使用 inSql 方法指定 city 包含在一个子查询中,该子查询用于筛选省份为 Guangdong 的城市。

使用 QueryChainWrapper 进行链式查询

QueryChainWrapper 是 MyBatis-Plus 提供的一个链式查询工具,可以简化复杂查询的编写。例如:

QueryChainWrapper<User> wrapper = new QueryChainWrapper<>(userMapper);
wrapper.select("id", "name", "age")
       .eq("gender", "male")
       .between("age", 20, 30)
       .inSql("city", "select city from city_table where province='Guangdong'")
       .orderByDesc("register_time")
       .last("limit 10");

List<User> userList = wrapper.list();

在这个例子中,我们使用 QueryChainWrapper 对用户进行查询,其中包含了多个条件和子查询:

  • 使用 select 方法指定查询的列;
  • 使用 eq 方法指定 gender 等于 male;
  • 使用 between 方法指定 age 在 20 到 30 之间;
  • 使用 inSql 方法指定 city 包含在一个子查询中,该子查询用于筛选省份为 Guangdong 的城市;
  • 使用 orderByDesc 方法指定查询结果按照 register_time 降序排列;
  • 使用 last 方法添加额外的 SQL 语句,该例中用于限制结果数量。

使用 PageHelper 进行分页查询

PageHelper 是 MyBatis-Plus 提供的一个分页工具,可以用于实现分页查询。例如:

int pageNum = 1;
int pageSize = 10;

PageHelper.startPage(pageNum, pageSize);

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("id", "name", "age")
       .eq("gender", "male")
       .between("age", 20, 30)
       .inSql("city", "select city from city_table where province='Guangdong'")
       .orderByDesc("register_time");

List<User> userList = userMapper.selectList(wrapper);

PageInfo<User> pageInfo = new PageInfo<>(userList);

long total = pageInfo.getTotal();
List<User> result = pageInfo.getList();

在这个例子中,我们使用 PageHelper 对用户进行分页查询,其中包含了多个条件和子查询。使用 startPage 方法指定页码和每页大小,使用 PageInfo 类封装查询结果和总记录数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus 是一个基于 MyBatis 的增强工具,提供了许多便捷的功能和高级用法,以提升开发效率。以下是一些 MyBatis-Plus高级用法: 1. 代码生成器:MyBatis-Plus 提供了一个代码生成器,能够根据数据库表结构自动生成对应的实体类、Mapper 接口以及 XML 映射文件,极大地减少了手动编写重复代码的工作量。 2. 自动填充:通过使用 @TableField 注解中的 fill 属性,可以实现在插入或更新数据时自动填充某些字段的值,例如创建时间、更新时间等。 3. 条件构造器:MyBatis-Plus 提供了强大的条件构造器,可通过链式调用的方式灵活地构建查询条件。例如,使用 wrapper.eq("name", "张三") 可以构造出 name = '张三' 的查询条件。 4. 分页查询:通过使用 Page 类,可以实现简单的分页查询。可以通过 PageHelper.startPage 方法设置页码和每页显示数量,并将 Page 对象传入查询方法中,查询结果将自动填充到 Page 对象中。 5. 逻辑删除:通过在实体类的字段上标注 @TableLogic 注解,可以实现逻辑删除的功能。被标记为逻辑删除的字段在删除操作时不会直接删除记录,而是更新该字段的值表示删除状态。 6. 动态 SQLMyBatis-Plus 提供了强大的动态 SQL 语法支持,可以根据不同条件动态生成不同的 SQL 语句,提供了 if、choose、when、otherwise 等标签,使得 SQL 编写更加灵活。 以上是 MyBatis-Plus 的一些高级用法,它们都能够帮助开发人员简化开发流程并提高效率。更多详细的用法可以参考 MyBatis-Plus 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值