使用 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 类封装查询结果和总记录数。