前言
終于開始學習做項目了,本篇文章是學習B站黑馬程序員蒼穹外賣的學習筆記📑。我的學習路線是Java基礎語法-JavaWeb-做項目,管理端的功能學習完之后,就進入到了用戶端微信小程序的開發,這篇文章來看看分頁查詢,其實在項目中分頁查詢的實現用的都是PageHelper實現的,我為了復習把原始方法基礎實現也寫寫(●’?’●),把兩者兩相對比方便理解
下面還是以一個簡單的功能來看看分頁查詢
??先看看接口文檔(之前一直沒看過接口文檔,接口文檔開發是一定要會看的),它不會直接告訴你要進行分頁查詢,而是要看請求參數
一定要注意請求方法,請求路徑,請求參數,返回值,根據這些來寫controller層代碼。
🙌想進行分頁查詢,我們還要了解數據庫語言,使用LIMIT關鍵字,格式為:limit 開始索引 每頁顯示的條數。
第一頁,顯示10條數據:
select * from emp limit 0,10;
原始方式(后端代碼實現)
還是先看一下前端的頁面了解我們要實現的功能:
這里以一個員工管理分頁查詢員工的功能為例子
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageResult {private Long total; //總記錄數private List rows; //當前頁數據列表
}
1). EmpController
@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {@Autowiredprivate EmpService empService;@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page ,@RequestParam(defaultValue = "10") Integer pageSize){log.info("查詢員工信息, page={}, pageSize={}", page, pageSize);PageResult pageResult = empService.page(page, pageSize);return Result.success(pageBean);}}
2). EmpService
public interface EmpService {/*** 分頁查詢* @param page 頁碼* @param pageSize 每頁記錄數*/PageResult page(Integer page, Integer pageSize);
}
3). EmpServiceImpl
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageResult page(Integer page, Integer pageSize) {//1. 獲取總記錄數Long total = empMapper.count();//2. 獲取結果列表Integer start = (page - 1) * pageSize;List<Emp> empList = empMapper.list(start, pageSize);//3. 封裝結果return new PageResult(total, empList);}
}
4). EmpMapper
@Mapper
public interface EmpMapper {/*** 查詢總記錄數*/@Select("select count(*) from emp e left join dept d on e.dept_id = d.id ")public Long count();/*** 查詢所有的員工及其對應的部門名稱*/@Select("select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id limit #{start}, #{pageSize}")public List<Emp> list(Integer start , Integer pageSize);}
PageHelper分頁插件
PageHelper是第三方提供的Mybatis框架中的一款功能強大、方便易用的分頁插件,支持任何形式的單標、多表的分頁查詢。
1). 在pom.xml引入依賴
<!--分頁插件PageHelper-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version>
</dependency>
2). EmpMapper
PageHelper實現分頁查詢之后,只需要編寫一條SQL語句,而且不需要考慮分頁操作,就是一條正常的查詢語句。
/*** 查詢所有的員工及其對應的部門名稱*/
@Select("select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id")public List<Emp> list();
3). EmpServiceImpl
@Override
public PageResult page(Integer page, Integer pageSize) {//1. 設置分頁參數PageHelper.startPage(page,pageSize);//無需手動計算起始索引,直接告訴PageHelper需要查詢那一頁的數據,每頁展示多少條記錄即可。//2. 執行查詢List<Emp> empList = empMapper.list();Page<Emp> p = (Page<Emp>) empList;//將查詢到的總記錄數,與數據列表封裝到了 Page<Emp> 對象中。//3. 封裝結果return new PageResult(p.getTotal(), p.getResult());
}
- PageHelper實現分頁查詢時,SQL語句的結尾一定一定一定不要加分號;
- PageHelper只會對緊跟在其后的第一條SQL語句進行分頁處理。
?我們可以對比一下,其實使用PageHelper分頁插件進行分頁是對原始方式的改善
Mapper接口層:
- 原始的分頁查詢功能中,我們需要在Mapper接口中定義兩條SQL語句。
- PageHelper實現分頁查詢之后,只需要編寫一條SQL語句,而且不需要考慮分頁操作,就是一條正常的查詢語句。
Service層:
- 需要根據頁碼、每頁展示記錄數,手動的計算起始索引。
- 無需手動計算起始索引,直接告訴PageHelper需要查詢那一頁的數據,每頁展示多少條記錄即可。
小白啊!!!寫的不好輕噴啊🤯如果覺得寫的不好,點個贊吧🤪(批評是我寫作的動力)
…。。。。。。。。。。。…
…。。。。。。。。。。。…