在前面已经完成了数据库连接。https://www.jianshu.com/p/9850582904fa。实现保存、删除、查询、列表。这章在上一节的基础上增加数据分页。最终统一处理HTTP请求的分页、排序。
顺带说明下,API接口和服务名称的规则,这样看到API路径也能判断出它实现了什么功能:
名称
值
描述
保存
save
添加或修改资源信息,以save开头方法命名(如:savePassword),所有资源都有名为id,类型为整型的字段,如果id值为null/0会以添加进行操作,如果id值大于0,会以修改进行操作,API中有特殊说明的,以特殊说明为准
删除
delete
删除资源信息,以delete开头方法命名(如:deleteById)
查询
load
单个资源查询,以load开头方法命名(如:loadByName)
列表
list/find
列表资源查询,以list开头方法命名(如:listByMatch);对资源进行分页查询,以find开头方法命名(如:findByMatch),分页的参数系统统一处理,所有find开头的API都提供了分页和排序参数,在API中参数描述中不再说明,分页和排序的参数在本文下方说明
增加函数
在UserService 接口中增加一个函数:find。此时文件内容如下:
package com.biboheart.demo.user.service;
import java.util.List;
import org.springframework.data.domain.Page;
import com.biboheart.brick.exception.BhException;
import com.biboheart.demo.user.domain.User;
public interface UserService {
/**
* 保存用户信息
*
* @param user
* 用户信息对象
* @return 保存成功后的用户信息或null
* @throws BhException 参数异常捕获
*/
public User save(User user) throws BhException;
/**
* 删除用户
*
* @param id
* 用户ID
* @return 返回删除成功的用户信息或null
*/
public User delete(Long id);
/**
* 查询用户信息
*
* @param id
* 用户ID
* @return 用户信息或null
*/
public User load(Long id);
/**
* 用户列表
*
* @return 返回用户对象列表
*/
public List list();
public Page find();
}
Page 是spring data jpa 的分页模型。数据结果如下:
{
"content": [{}], // 数据列表
"last": true, // 是否最后一页
"totalPages": 1, // 总页数
"totalElements": 1, // 数据总数
"sort": null, // 排序
"first": true, // 是否首页
"numberOfElements": 1, // 本页数据条数
"size": 10, // 每页长度
"number": 0 // 当前页序号
}
实现分页
在UserService实现中实现find函数,这里用更新时间降序排列
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
...
略
...
@Override
public Page find(Integer page, Integer size) {
if (null == page) {
page = 0;
}
if (CheckUtils.isEmpty(size)) {
size = 10;
}
PageRequest pageable = PageRequest.of(page, size, Sort.Direction.DESC, "updateTime");
Page users = userRepository.findAll(pageable);
return users;
}
}
开放接口
添加api接口
@RestController
public class UserController {
@Autowired
private UserService userService;
...
略
...
/**
* 用户列表(分页)
* @return
*/
@RequestMapping(value = "/userapi/user/find", method = {RequestMethod.POST, RequestMethod.GET})
public BhResponseResult> find(Integer pageOffset, Integer pageSize) {
Page users = userService.find(pageOffset, pageSize);
return new BhResponseResult<>(0, "success", users);
}
}
测试接口
在API工具(postmain)中测试下接口
测试结果
{
"code": 0,
"message": "success",
"result": {
"content": [
{
"id": 5,