常见问题汇总(十七)——关于spring data jpa

1、如何实现排序

        a 命名查询:

public interface ParamsRepository extends JpaRepository<CwParams, String>,JpaSpecificationExecutor<CwParams> {

	List<CwParams> findAllByOrderByCodeDesc();//根据code倒序查询

}

       b 基于Sort:

    public ResponseResult listRecord(RecordCondition condition) {

        LocalResponseResult responseResult = super.buildResponseResult(condition);
        Pageable pageable = new PageRequest(condition.getPage() - 1, condition.getSize(),new Sort(Sort.Direction
                .DESC,"id"));//创建分页条件和排序条件

        Specification<CwStopRecord> specification = (Specification<CwStopRecord>) (root, query, cb) -> {

            List<Predicate> list = new ArrayList<>();
            //条件全为空则执行无条件查询

            if (StringUtils.isNotBlank(condition.getType())) {
                Predicate p1 = cb.equal(root.get("type"), condition.getType());
                list.add(p1);
            }
            if (StringUtils.isNotBlank(condition.getCarNo())) {
                Predicate p2 = cb.like(root.get("carNo"), "%" + condition.getCarNo() + "%");
                list.add(p2);
            }
            if (StringUtils.isNotBlank(condition.getPhone())) {
                Predicate p3 = cb.like(root.get("phone"), "%" + condition.getPhone() + "%");
                list.add(p3);
            }
            if (StringUtils.isNotBlank(condition.getStallNo())) {
                Predicate p4 = cb.like(root.get("stallNo"), "%" + condition.getStallNo() + "%");
                list.add(p4);
            }
            if (StringUtils.isNotBlank(condition.getGardName())) {
                Predicate p5 = cb.like(root.get("gardName"), "%" + condition.getGardName() + "%");
                list.add(p5);
            }

            return cb.and(list.toArray(new Predicate[0]));
        };

        Page<CwStopRecord> page = stopRecordRepository.findAll(specification, pageable);
        Map<String, Object> result = new HashMap<>();
        result.put("total", page.getTotalElements());
        result.put("rows", page.getContent());
        return responseResult.result(HttpStatus.OK, result);
    }

2、Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query

        在service层没有在对应的方法上添加事物注解导致

3、JPA注解查询的两种参数注入方式

        a   ?参数位置

@Query(value = "select name,author,price from Book b where b.price>?1 and b.price<?2")
List<Book> findByPriceRange(long price1, long price2);

        b   :参数名

@Query(value = "select name,author,price from Book b where b.name = :name AND b.author=:author AND b.price=:price")
List<Book> findByNamedParam(@Param("name") String name, @Param("author") String author,
        @Param("price") long price);

猜你喜欢

转载自blog.csdn.net/qq_35813653/article/details/81194941