spring data jpa动态条件查询

来源:互联网 发布:紫青双剑坐骑进阶数据 编辑:程序博客网 时间:2024/06/04 08:30

这里,spring data jpa为我们提供了JpaSpecificationExecutor接口,只要简单实现toPredicate方法就可以实现复杂的查询

@Repositorypublic interface MonitorRepository extends JpaRepository<Monitor, Long>, JpaSpecificationExecutor {}

ctrl类

 @GetMapping("/api/listPage")    @ResponseBody    public Map<String, Object> listPage(@RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,                                        @RequestParam(value = "pageSize", defaultValue = "100") Integer pageSize,                                        @RequestParam("searchName") String searchName, @RequestParam("searchUrl") String searchUrl) {        //Pageable默认从0开始        pageNumber = pageNumber <= 0 ? 0 : pageNumber - 1;        Pageable pageable = new PageRequest(pageNumber, pageSize);//        Page<Monitor> monitorList = monitorRepository.findMonitorByNameOrUrl(pageable, searchName, urlPath);        Specification specification = new Specification() {            @Override            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {                List<Predicate> predicates = new ArrayList<>();                if (StringUtils.isNotBlank(searchName)) {                    predicates.add(cb.like(root.get("name"), "%" + searchName + "%"));                }                if (StringUtils.isNotBlank(searchUrl)) {                    predicates.add(cb.like(root.get("url"), "%" + searchUrl + "%"));                }                return cb.and(predicates.toArray(new Predicate[predicates.size()]));            }        };        Page<Monitor> monitorList = monitorRepository.findAll(specification, pageable);        Map<String, Object> result = new HashMap<>();        result.put("total", monitorList.getTotalElements());        result.put("rows", monitorList.getContent());        return result;    }


bean类

import com.fasterxml.jackson.annotation.JsonFormat;import org.hibernate.annotations.CreationTimestamp;import javax.persistence.*;import java.io.Serializable;import java.util.Date;@Entity@Table(name = "monitor")public class Monitor implements Serializable {    private static final long serialVersionUID = 1L;    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    @Column(name = "m_id", length = 11)    private Long id;    @Column(name = "m_name", length = 64)    private String name;    @Column(name = "m_group", length = 64)    private String group;    @Column(name = "m_url", length = 200)    private String url;    @Temporal(TemporalType.TIMESTAMP)    @Column(name = "create_time")    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")    @CreationTimestamp    private Date createTime;   }




阅读全文
0 0
原创粉丝点击