springdataJpa多表查询,多条件组合查询+分页

来源:互联网 发布:linux运行安卓应用 编辑:程序博客网 时间:2024/06/11 06:14

springdataJpa多表查询,多条件组合查询+分页

注意事项:实体类中的属性不能带有下划线

 

实体类:

1、EduOrg.java

 

package com.lhc.bean; import java.util.Date; import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.SequenceGenerator;import javax.persistence.Table; @Entity@Table(name="Edu_Org")public class EduOrg {         private Integer id;         private Integerparent_id;         private Stringorgname;         private String is_use;         private Dateupdate_date;         @Id         @GeneratedValue(generator="a",strategy=GenerationType.SEQUENCE)         @SequenceGenerator(initialValue=1,allocationSize=1,name="a",sequenceName="org_seq1")         public Integer getId(){                   return id;         }         public voidsetId(Integer id) {                   this.id =id;         }         public IntegergetParent_id() {                   returnparent_id;         }         public voidsetParent_id(Integer parent_id) {                   this.parent_id= parent_id;         }         @Column(name="org_name")         public StringgetOrgname() {                   returnorgname;         }         public voidsetOrgname(String orgname) {                   this.orgname= orgname;         }         public StringgetIs_use() {                   returnis_use;         }         public void setIs_use(Stringis_use) {                   this.is_use= is_use;         }         public DategetUpdate_date() {                   returnupdate_date;         }         public voidsetUpdate_date(Date update_date) {                   this.update_date= update_date;         }         @Override         public StringtoString() {                   return"EduOrg [id=" + id + ", parent_id=" + parent_id + ",org_name=" + orgname + ", is_use=" + is_use                                     +", update_date=" + update_date + "]";         }        }


 

2、EduTeachers.java

package com.lhc.bean; import java.util.Date; import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.SequenceGenerator;import javax.persistence.Table; @Entity@Table(name="edu_teachers")public class EduTeachers {          private Integer id;         private String empno;         private String name;         private String sex;         private String degree;         private Dateupdate_date;         private Integerorg_id;                 private EduOrg org;                 public EduTeachers() {                   // TODOAuto-generated constructor stub         }                 publicEduTeachers(String empno, String name, String sex, String degree, Dateupdate_date) {                   this.empno =empno;                   this.name =name;                   this.sex =sex;                   this.degree= degree;                   this.update_date= update_date;         }         @Id         @GeneratedValue(generator="b",strategy=GenerationType.SEQUENCE)         @SequenceGenerator(initialValue=1,allocationSize=1,name="b",sequenceName="tea_seq1")         public Integer getId(){                   return id;         }         public voidsetId(Integer id) {                   this.id =id;         }         @Column(name="emp_no")         public StringgetEmpno() {                   returnempno;         }          public voidsetEmpno(String empno) {                   this.empno =empno;         }          public StringgetName() {                   return name;         }         public voidsetName(String name) {                   this.name =name;         }         public String getSex(){                   return sex;         }         public voidsetSex(String sex) {                   this.sex =sex;         }         public StringgetDegree() {                   returndegree;         }         public voidsetDegree(String degree) {                   this.degree= degree;         }         public DategetUpdate_date() {                   returnupdate_date;         }          public voidsetUpdate_date(Date update_date) {                   this.update_date= update_date;         }         @Column(name="org_id",insertable=false,updatable=false)         public Integer getOrg_id(){                   returnorg_id;         }         public voidsetOrg_id(Integer org_id) {                   this.org_id= org_id;         }         @Override         public StringtoString() {                   return"EduTeachers [emp_no=" + empno + ", name=" + name + ",sex=" + sex + ", degree=" + degree                                     +", update_date=" + update_date + ", org_id=" + org_id +"]";         }          @ManyToOne(fetch=FetchType.EAGER)         @JoinColumn(name="org_id")         public EduOrg getOrg(){                   return org;         }          public voidsetOrg(EduOrg org) {                   this.org =org;         }        }


 

 

3、使用@Query两表级联查询写法(使用@Query注解, 使用姓名或组织机构名称查询数据)

@Query("fromEduTeachers t where t.name like ?1 and t.org.orgname like ?2")        publicList<EduTeachers> queryByNameOrOrgName(String tname,String orgName);


4、service层实现多条件查询+分页方法(根据姓名、性别、学历、组织机构名称 几个字段动态模糊查询,要判断是否为空,要加分页,按照组织机构排序)

         

@Override         @Transactional         publicPage<EduTeachers> query(final String tname,final String sex,final Stringdegree,final String orgname) {                   //TODO Auto-generated method stub                   returnteacherDao.findAll(new Specification<EduTeachers>() {                            @Override                            publicPredicate toPredicate(Root<EduTeachers> root, CriteriaQuery<?>query, CriteriaBuilder cb) {                                     //TODO Auto-generated method stub                                     Path<String>namepath = root.get("name");                                 Path<String> sexpath =root.get("sex");                                 Path<String> degreepath =root.get("degree");                                 List<Predicate> list = newArrayList<Predicate>();                               if(tname!=null&&!"".equals(tname)) {                                         list.add(cb.like(namepath,"%"+tname+"%"));                                }                               if(sex!=null&&!"".equals(sex)) {                                         list.add(cb.like(sexpath,"%"+sex+"%"));                                }                               if(degree!=null&&!"".equals(degree)) {                                         list.add(cb.like(degreepath,"%"+degree+"%"));                                }                               if(orgname!=null&&!"".equals(orgname)) {                                         Path<String>orgnamepath=root.get("org").get("orgname");                                         list.add(cb.like(orgnamepath,"%"+orgname+"%"));                                }                                Predicate[] p = new Predicate[list.size()];                     return cb.and(list.toArray(p));                            }                   },new PageRequest(0, 2, new Sort(Direction.DESC, "org.orgname")));

原创粉丝点击