使用PageHelper进行分页
- 1. 使用Spring Boot
- 2. 不使用Spring Boot的实现
1. 使用Spring Boot
要在Spring MVC中使用PageHelper进行分页,你需要完成以下几个步骤:
- 添加PageHelper依赖:在你的项目中添加PageHelper的Maven或Gradle依赖。例如,如果你使用Maven,可以在
pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
- 配置PageHelper:在Spring MVC的配置文件(通常是
application.properties
或application.yml
)中,配置PageHelper的属性。例如,你可以指定数据库方言、分页插件的参数等。以下是一个示例的application.properties
配置:
# 数据库方言
pagehelper.helperDialect=mysql
# 是否进行分页合理化
pagehelper.reasonable=true
# 是否支持通过Mapper接口参数来传递分页参数
pagehelper.supportMethodsArguments=true
- 在Mapper接口中使用PageHelper:在你的Mapper接口中,使用PageHelper提供的静态方法来实现分页。例如,你可以在查询方法中调用
PageHelper.startPage()
来开启分页功能,然后执行查询操作。以下是一个示例:
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface YourMapper {
List<YourEntity> queryEntities();
default List<YourEntity> queryEntitiesWithPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
return queryEntities();
}
}
- 在Controller中使用分页查询:在Spring MVC的Controller中,调用Mapper接口中定义的分页查询方法,并将结果传递给前端视图进行展示。以下是一个示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class YourController {
@Autowired
private YourMapper yourMapper;
@GetMapping("/entities")
public String getEntities(int pageNum, int pageSize, Model model) {
model.addAttribute("entities", yourMapper.queryEntitiesWithPage(pageNum, pageSize));
return "entities";
}
}
在上述示例中,getEntities()
方法接收pageNum
和pageSize
作为参数,调用Mapper接口的分页查询方法,并将查询结果添加到Model中,然后返回一个视图名。
完成上述步骤后,你就可以在Spring MVC中使用PageHelper进行分页查询了。记得在前端视图中展示分页导航条和处理分页参数。
2. 不使用Spring Boot的实现
如果你不使用Spring Boot,而是使用传统的Spring MVC框架,你可以按照以下步骤来实现PageHelper的分页功能:
- 添加PageHelper依赖:在你的项目中添加PageHelper的Maven或Gradle依赖,可以在Maven的
pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.1</version>
</dependency>
- 配置PageHelper:在Spring的配置文件(例如
applicationContext.xml
)中,配置PageHelper的属性。以下是一个示例的配置:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!-- 配置数据源相关属性 -->
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 配置其他属性 -->
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<bean id="pageHelper" class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
reasonable=true
supportMethodsArguments=true
</value>
</property>
</bean>
在上述配置中,我们配置了数据源、SqlSessionFactory和SqlSessionTemplate,然后创建了一个PageHelper的Bean,并设置了PageHelper的属性。
- 配置MyBatis拦截器:由于PageHelper是一个MyBatis的拦截器,我们需要将PageHelper添加到MyBatis的拦截器链中。在上面的配置文件中,我们可以在SqlSessionFactory中添加以下配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 配置其他属性 -->
<property name="plugins">
<array>
<ref bean="pageHelper" />
</array>
</property>
</bean>
- 在Mapper接口中使用PageHelper:在你的Mapper接口中,使用PageHelper提供的静态方法来实现分页。例如,你可以在查询方法中调用
PageHelper.startPage()
来开启分页功能,然后执行查询操作。以下是一个示例:
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface YourMapper {
List<YourEntity> queryEntities();
default List<YourEntity> queryEntitiesWithPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
return queryEntities();
}
}
- 在Controller中使用分页查询:在Spring MVC的Controller中,调用Mapper接口中定义的分页查询方法,并将结果传递给前端视图进行展示。以下是一个示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class YourController {
@Autowired
private YourMapper yourMapper;
@GetMapping("/entities")
public String getEntities(int pageNum, int pageSize, Model model) {
model.addAttribute("entities", yourMapper.queryEntitiesWithPage(pageNum, pageSize));
return "entities";
}
}
在上述示例中,getEntities()
方法接收pageNum
和pageSize
作为参数,调用Mapper接口的分页查询方法,并将查询结果添加到Model中,然后返回一个视图名。
完成上述步骤后,你就可以在Spring MVC中使用PageHelper进行分页查询了。记得在前端视图中展示分页导航条和处理分页参数。