pagehelper使用 代码示例
时间: 2024-05-16 17:11:12 浏览: 66
PageHelper是一个基于MyBatis的分页插件,它可以自动进行分页查询并将结果封装成Page对象,方便我们进行分页操作。下面是使用PageHelper进行分页查询的代码示例:
```java
//设置分页参数
PageHelper.startPage(pageNum, pageSize);
//进行分页查询
List<User> userList = userDao.getUserList();
//将查询结果封装成Page对象
PageInfo<User> pageInfo = new PageInfo<>(userList);
//获取分页信息
long total = pageInfo.getTotal(); //总记录数
int pages = pageInfo.getPages(); //总页数
int currentPage = pageInfo.getPageNum(); //当前页码
int pageSize = pageInfo.getPageSize(); //每页记录数
```
以上代码中,pageNum代表查询的页码,pageSize代表每页显示的记录数,getUserList()方法是自己定义的查询方法,返回值是一个List集合,其中包含了当前页的记录。通过调用PageHelper.startPage()方法来设置分页参数,然后进行查询并将结果封装成Page对象,最后通过PageInfo对象获取分页信息。
相关问题
pageHelper依赖代码
PageHelper是一个常用的MyBatis分页插件,它简化了在MyBatis中进行分页查询的操作。以下是使用PageHelper的基本依赖和配置示例:
首先,在项目的pom.xml文件中添加PageHelper的依赖(如果你使用的是Maven):
```xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.x.x</version> <!-- 根据最新版本替换 -->
</dependency>
```
其中,你需要替换`5.x.x`为你实际使用的PageHelper版本。
然后,如果在Spring Boot项目中,可以在application.properties或application.yml文件中配置PageHelper的相关参数:
```properties
mybatis-pagehelper.helper-dialect=mysql
# 或者其他数据库,如mysql、oracle等
mybatis-pagehelperreasonable=true
# 是否启用合理化分页
# 其他可选配置项,比如:
# pagehelper.pageSize=10 设置每页默认大小
# pagehelper.params={} 可以在这里设置额外的查询参数,例如:{'sort': 'id desc'}
```
在你的服务层或Mapper接口上添加注解,表示这是一个分页查询:
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.Page;
import com.example.demo.entity.YourEntity;
public interface YourMapper extends BaseMapper<YourEntity> {
Page<YourEntity> selectByParams(Object params); // 参数可以是自定义的实体类或者PageHelper提供的Page对象
}
```
在Service层,你可以这样调用分页查询:
```java
@Autowired
private YourMapper yourMapper;
List<YourEntity> entities = yourMapper.selectByParams(new Page<>(current_page, per_page)); // current_page 和 per_page 分别是当前页数和每页数量
```
以上就是基本的PageHelper使用步骤。
mybatis测试pagehelper的代码
以下是使用 MyBatis 和 PageHelper 插件进行分页查询的示例代码:
首先,在 pom.xml 文件中添加以下依赖:
```xml
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- PageHelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
```
然后,在 MyBatis 的配置文件(比如 `mybatis-config.xml`)中配置 PageHelper 插件:
```xml
<configuration>
<!-- 其他配置 -->
<plugins>
<!-- PageHelper 插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
```
接下来,我们假设有一个 `UserMapper` 接口和对应的实现类 `UserMapperImpl`,其中定义了一个分页查询用户信息的方法 `listUsersByPage`:
```java
public interface UserMapper {
List<User> listUsersByPage(int pageNum, int pageSize);
}
public class UserMapperImpl implements UserMapper {
private final SqlSessionFactory sqlSessionFactory;
public UserMapperImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public List<User> listUsersByPage(int pageNum, int pageSize) {
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
PageHelper.startPage(pageNum, pageSize);
return mapper.listUsers();
}
}
}
```
其中,`PageHelper.startPage(pageNum, pageSize)` 会自动拦截下一次查询,并在查询语句中添加 LIMIT 子句,实现分页查询。
最后,我们可以编写一个测试类 `UserMapperTest` 来验证分页查询的效果:
```java
public class UserMapperTest {
private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void setup() {
// 初始化 SqlSessionFactory
String resource = "mybatis-config.xml";
try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
// 初始化数据库
try (SqlSession sqlSession = sqlSessionFactory.openSession();
Statement statement = sqlSession.getConnection().createStatement()) {
statement.executeUpdate("DROP TABLE IF EXISTS users");
statement.executeUpdate("CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(20), age INT)");
statement.executeUpdate("INSERT INTO users VALUES (1, 'Alice', 20), (2, 'Bob', 21), (3, 'Charlie', 22)");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Test
public void testListUsersByPage() {
UserMapper userMapper = new UserMapperImpl(sqlSessionFactory);
List<User> users1 = userMapper.listUsersByPage(1, 2);
List<User> users2 = userMapper.listUsersByPage(2, 2);
assertEquals(2, users1.size());
assertEquals(1, users2.size());
assertEquals("Alice", users1.get(0).getName());
assertEquals("Bob", users1.get(1).getName());
assertEquals("Charlie", users2.get(0).getName());
}
}
```
在测试中,我们先使用 `setup` 方法初始化数据库,然后调用 `listUsersByPage` 方法进行分页查询,并检查查询结果是否符合预期。
阅读全文