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