通用Mapper進行分頁
總結
使用通用Mapper進行作為持久層框架,使用比較簡單,而且對一些單表操作,基本上可以全覆蓋。而且可以自己擴展操作。這里寫入如何搭配分頁助手進行分頁操作。只有關鍵代碼,並不是一個完整案例。
1、導入坐標
<dependency>
<!--通用Mapper依賴-->
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<!--分頁助手依賴-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
2、Service層編寫
這里涉及到比較多的參數,我們在使用時候可以選擇一部分進行使用
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.PageHelper;
/**
* 分頁查詢
*
* @param key 關鍵字查詢
* @param page 頁數
* @param size 每頁數量
* @param desc 排序方式
* @param sortBy 需要排序的字段
* @param status 用戶狀態
* @return
*/
public PageInfo<User> queryUserByPage(String key, int page, int size, Boolean desc, String sortBy, Boolean status) {
//分頁
PageHelper.startPage(page, size);
//過濾
Example example = new Example(User.class);
if (status != null) {
example.setDistinct(status);
}
if (StringUtils.isNotBlank(key)) {
//過濾條件
example.createCriteria().orLike("username", "%" + key.toLowerCase() + "%").orEqualTo("phone",key.toLowerCase());
}
//根據相應的字段進行排序
if (StringUtils.isNotBlank(sortBy)) {
String orderByClause = sortBy + (desc ? " DESC" : " ASC");
example.setOrderByClause(orderByClause);
}
//查詢
List<User> users = userMapper.selectByExample(example);
if (CollectionUtils.isEmpty(users)) {
return null;
}
users.stream().forEach(user -> user.setPassword(null));
//解析分頁結果
return new PageInfo<>(users);
}
注意:
1、這里的進行使用 PageHelper.startPage()之后,我們可以直接使用selectAll進行查詢操作,照樣可以進行分頁操作
2、這里的返回結果,我們直接使用PageInfo作為返回結果,沒有進行二次封裝。可以使用hutool的PageResult進行作為返回結果。也可以進行自定義PageResult進行返回。
3、Controller層編寫
/**
* 分頁查詢
* @param key
* @param page
* @param size
* @param desc
* @param sortBy
* @param status
* @return
*/
@GetMapping("/userList")
public ResponseEntity<PageInfo<PageInfro<User>>> queryUserByPage(@RequestParam(value = "key", required = false) String key,
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "rows", defaultValue = "5") Integer size,
@RequestParam(value = "desc", defaultValue = "false") Boolean desc,
@RequestParam(value = "sortBy", required = false) String sortBy,
@RequestParam(value = "status", required = false) Boolean status) {
PageInfo<User> pageInfo = userService.queryUserByPage(key, page, size, desc, sortBy, status);
if (pageInfo == null) {
return new Result(false, StatusCode.QUERY_FAIL);
}
return ResponseEntity.ok(pageInfo))
}
注意,這里參數的寫法。