前言:
- 如果我們想對數據進行分頁的話,手動編寫分頁會比較的麻煩,會讓數據庫語句變得比較的複雜
- 之前寫過一篇博客是關於傳統的數據庫分頁展示的源碼,感興趣的小夥伴可以點擊鏈接查看: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官網地址
原創文章,未經允許禁止盜用