MyBatis-Plus的一些高级使用

本文介绍了MyBatis-Plus中的QueryWrapper、LambdaQueryWrapper、UpdateWrapper和QueryChainWrapper的使用,包括如何进行条件查询、子查询、排序和分页操作,展示了它们在处理复杂SQL时的灵活性和便利性。
摘要由CSDN通过智能技术生成

使用 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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值