mybatis-plus用LambdaQueryWrapper按id查询同时分页
时间: 2023-10-12 21:12:09 浏览: 64
可以使用如下代码:
```
LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Entity::getId, id);
Page<Entity> page = new Page<>(pageNum, pageSize);
IPage<Entity> result = entityMapper.selectPage(page, wrapper);
List<Entity> list = result.getRecords();
```
其中,Entity是实体类,entityMapper是对应的Mapper接口。使用LambdaQueryWrapper可以方便地构造查询条件,同时使用Page进行分页查询。
相关问题
用mybatis-plus写一个分页查询加条件查询
假设要查询用户表中年龄大于等于18岁的用户信息,按照注册时间降序排列,每页显示10条数据,查询第2页的数据。
1. 创建实体类
首先创建一个User实体类,包含以下字段:
```java
public class User {
private Long id;
private String name;
private Integer age;
private String email;
private Date createTime;
private Date updateTime;
}
```
2. 创建Mapper接口
创建一个UserMapper接口,继承BaseMapper接口,用于操作用户表。
```java
public interface UserMapper extends BaseMapper<User> {
}
```
3. 编写Mapper.xml文件
在resources目录下创建mapper文件夹,并在其中创建UserMapper.xml文件,用于编写SQL语句。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserByAgeAndPage" resultType="User">
select * from user
where age >= #{age}
order by create_time desc
</select>
</mapper>
```
4. 编写Service层
创建一个UserService接口和实现类UserServiceImpl,用于调用Mapper接口中的方法。
```java
public interface UserService {
Page<User> selectUserByAgeAndPage(int age, int pageNum, int pageSize);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public Page<User> selectUserByAgeAndPage(int age, int pageNum, int pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.ge(User::getAge, age);
queryWrapper.orderByDesc(User::getCreateTime);
return userMapper.selectPage(page, queryWrapper);
}
}
```
5. 测试查询
在测试类中调用UserService的selectUserByAgeAndPage方法,查询年龄大于等于18岁的用户信息,按照注册时间降序排列,每页显示10条数据,查询第2页的数据。
```java
@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private UserService userService;
@Test
void testSelectUserByAgeAndPage() {
Page<User> page = userService.selectUserByAgeAndPage(18, 2, 10);
System.out.println("总记录数:" + page.getTotal());
System.out.println("当前页数:" + page.getCurrent());
System.out.println("每页显示条数:" + page.getSize());
System.out.println("总页数:" + page.getPages());
System.out.println("是否有下一页:" + page.hasNext());
System.out.println("是否有上一页:" + page.hasPrevious());
System.out.println("查询结果:" + page.getRecords());
}
}
```
运行测试类,查看查询结果。
mybatis-plus联表分页查询
MyBatis-Plus是一个增强版的MyBatis框架,它提供了更方便的数据库操作功能。在进行联表分页查询时,可以使用MyBatis-Plus提供的LambdaQueryWrapper和Page类来实现。
首先,确保已经准备好数据库结构以及数据,并添加了MyBatis-Plus的依赖。
然后,在配置类中启用MyBatis-Plus的join功能,可以通过在DataScopeSqlInjector类中添加@Mapper注解来实现。
接下来,在实体类中定义需要查询的字段,并生成对应的Mapper接口。
在Service类中,可以使用LambdaQueryWrapper构建查询条件,并调用mapper的selectPage方法进行分页查询。使用Page对象指定分页参数,包括当前页码和每页显示的记录数。
最后,在测试类中调用Service的方法进行查询,并打印结果。
以下是示例代码:
```java
// 实体类
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
// Mapper接口
public interface UserMapper extends BaseMapper<User> {
}
// Service类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public IPage<User> getUserListWithPage(int pageNum, int pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge, 20);
return baseMapper.selectPage(page, queryWrapper);
}
}
// 测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceImplTest {
@Autowired
private UserService userService;
@Test
public void testGetUserListWithPage() {
int pageNum = 1;
int pageSize = 10;
IPage<User> userPage = userService.getUserListWithPage(pageNum, pageSize);
List<User> userList = userPage.getRecords();
for (User user : userList) {
System.out.println(user);
}
}
}
```
以上是使用MyBatis-Plus进行联表分页查询的方法。如果有任何问题,请随时提问。
阅读全文