jpa中EntityManager实现CRUD和page功能
最近一周,在添加CRUD及分页。
原本是依据Repository做功能,要修改为EntityManager的步骤。
1.每个controller都做CRUD
刚开始在每个controller都做CRUD。
2.分页功能用JpaSpecificationExecutor
正如网上很多教程一般,添加字段进去,先做是否为空判断,再添加进list中,但是我这里的条件很多,后来改进用map做参数。
@Override
public Page<CfgApi> findByCriteria(Map<String, Object> params) {
if(params.get("page")!=null) {
page = Integer.parseInt(params.get("page").toString());
}
if(params.get("size")!=null) {
size = Integer.parseInt(params.get("size").toString());
}
params.remove("page");
params.remove("size");
Pageable pageable = new PageRequest(page, size, Sort.Direction.ASC, "id");
Page<CfgApi> apiPage;
if(params.size() >0){
apiPage = cfgApiRepository.findAll(new Specification<CfgApi>(){
@Override
public Predicate toPredicate(Root<CfgApi> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> list = new ArrayList<Predicate>();
for(Map.Entry<String, Object> entry : params.entrySet()){
list.add(criteriaBuilder.equal(root.get(entry.getKey()), entry.getValue()));
}
Predicate[] p = new Predicate[list.size()];
return criteriaBuilder.and(list.toArray(p));
}
},pageable)