前言:
- 如果我们想对数据进行分页的话,手动编写分页会比较的麻烦,会让数据库语句变得比较的复杂
- 之前写过一篇博客是关于传统的数据库分页展示的源码,感兴趣的小伙伴可以点击链接查看:Java后端实现分页效果
敲代码之前,我们需要先对从三方面对分页的原理进行了解
分类:
- 内存分页:指的是从数据库中一次性的查询出数据,然后根据需求的不同再从内存当中获取(优点:减少了与数据库的交互,缺点:分页效率低,对内存的开销比较多)
- 物理分页:每次只从数据库中查询一页的数据(优势:效率比较高,节省内存空间,缺点:不同数据库有不同的做法)
参数:
- 当前页
- 每页的显示条数
- 总记录数
MySQL分页语句关键(select * from t_user limit 0,10):
- 开始记录的索引:当前页*每一页需要显示的条数
- 总页数:数据库总的记录数%总条数==0?数据库总的记录数%总条数:+1 //数据库总的记录数除以总条数,如果刚好就得到页数,否则再加一页
PageHelder项目中使用(Spring项目)
1:来一张简单的表
2:首先先导入jar包,这里使用Maven托管,引入pom文件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.0.0</version>
</dependency>
3:在 Spring 配置文件中配置拦截器插件
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/bruceliu/mapper/*.xml"/>
<!--给实体类取别名-->
<property name="typeAliasesPackage" value="com.bruceliu.pojo"/>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
helperDialect=mysql
<!--分页合理化参数,设置为true时,pageNum<=0时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。-->
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
4:创建实体类
public class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
5:UserMapper.java
public interface UserMapper{
//查询所有
public List<User> getAll();
}
6:UserMapper.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bruceliu.mapper.UserMapper">
<select id="getAll" resultType="com.project.pojo.User">
SELECT * from t_user
</select>
</mapper>
7:UserService.java
public interface UserService {
public List<User> getAll();
/*分页查询
*返回PageHelper提供的封装分页参数的PageInfo对象
*/
PageInfo<User>findByPage(int pageNum,int pageSize);
}
8:UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getAll() {
List<User> user=userMapper.getAll();
return user;
}
@Override
public PageInfo<User> findByPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum,pageSize);
List<User>list=userMapper.getAll();
PageInfo<User>pageInfo=new PageInfo<>(list);
//TODO 因为先进行测试,所以加入打印输出语句,方便测试查看
for(User user:list){
System.out.println("user = " + user);
}
return pageInfo;
}
}
9:数据测试:UserServiceImplTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class UserServiceImplTest {
@Autowired
private UserService userService;
@Test
public void getAll() {
List<User>users=userService.getAll();
Assert.assertNotNull(users);
System.out.println("users = " + users);
}
@Test
public void findByPage() {
userService.findByPage(1,10);
}
}
10:运行findByPage得到结果
PageHelder的官方使用方法:github官网地址
原创文章,未经允许禁止盗用