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

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")));

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值