使用@Query两表级联查询写法

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

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

 

实体类:

1、EduOrg.java

 


 
 
  1. package com.lhc.bean;
  2. import java.util.Date;
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.GenerationType;
  7. import javax.persistence.Id;
  8. import javax.persistence.SequenceGenerator;
  9. import javax.persistence.Table;
  10. @Entity
  11. @Table(name= "Edu_Org")
  12. public class EduOrg {
  13. private Integer id;
  14. private Integerparent_id;
  15. private Stringorgname;
  16. private String is_use;
  17. private Dateupdate_date;
  18. @Id
  19. @GeneratedValue(generator= "a",strategy=GenerationType.SEQUENCE)
  20. @SequenceGenerator(initialValue= 1,allocationSize= 1,name= "a",sequenceName= "org_seq1")
  21. public Integer getId(){
  22. return id;
  23. }
  24. public voidsetId(Integer id) {
  25. this.id =id;
  26. }
  27. public IntegergetParent_id() {
  28. returnparent_id;
  29. }
  30. public voidsetParent_id(Integer parent_id) {
  31. this.parent_id= parent_id;
  32. }
  33. @Column(name= "org_name")
  34. public StringgetOrgname() {
  35. returnorgname;
  36. }
  37. public voidsetOrgname(String orgname) {
  38. this.orgname= orgname;
  39. }
  40. public StringgetIs_use() {
  41. returnis_use;
  42. }
  43. public void setIs_use(Stringis_use) {
  44. this.is_use= is_use;
  45. }
  46. public DategetUpdate_date() {
  47. returnupdate_date;
  48. }
  49. public voidsetUpdate_date(Date update_date) {
  50. this.update_date= update_date;
  51. }
  52. @Override
  53. public StringtoString() {
  54. return "EduOrg [id=" + id + ", parent_id=" + parent_id + ",org_name=" + orgname + ", is_use=" + is_use
  55. + ", update_date=" + update_date + "]";
  56. }
  57. }


 

2、EduTeachers.java


 
 
  1. package com.lhc.bean;
  2. import java.util.Date;
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.FetchType;
  6. import javax.persistence.GeneratedValue;
  7. import javax.persistence.GenerationType;
  8. import javax.persistence.Id;
  9. import javax.persistence.JoinColumn;
  10. import javax.persistence.ManyToOne;
  11. import javax.persistence.SequenceGenerator;
  12. import javax.persistence.Table;
  13. @Entity
  14. @Table(name= "edu_teachers")
  15. public class EduTeachers {
  16. private Integer id;
  17. private String empno;
  18. private String name;
  19. private String sex;
  20. private String degree;
  21. private Dateupdate_date;
  22. private Integerorg_id;
  23. private EduOrg org;
  24. public EduTeachers() {
  25. // TODOAuto-generated constructor stub
  26. }
  27. publicEduTeachers(String empno, String name, String sex, String degree, Dateupdate_date) {
  28. this.empno =empno;
  29. this.name =name;
  30. this.sex =sex;
  31. this.degree= degree;
  32. this.update_date= update_date;
  33. }
  34. @Id
  35. @GeneratedValue(generator= "b",strategy=GenerationType.SEQUENCE)
  36. @SequenceGenerator(initialValue= 1,allocationSize= 1,name= "b",sequenceName= "tea_seq1")
  37. public Integer getId(){
  38. return id;
  39. }
  40. public voidsetId(Integer id) {
  41. this.id =id;
  42. }
  43. @Column(name= "emp_no")
  44. public StringgetEmpno() {
  45. returnempno;
  46. }
  47. public voidsetEmpno(String empno) {
  48. this.empno =empno;
  49. }
  50. public StringgetName() {
  51. return name;
  52. }
  53. public voidsetName(String name) {
  54. this.name =name;
  55. }
  56. public String getSex(){
  57. return sex;
  58. }
  59. public voidsetSex(String sex) {
  60. this.sex =sex;
  61. }
  62. public StringgetDegree() {
  63. returndegree;
  64. }
  65. public voidsetDegree(String degree) {
  66. this.degree= degree;
  67. }
  68. public DategetUpdate_date() {
  69. returnupdate_date;
  70. }
  71. public voidsetUpdate_date(Date update_date) {
  72. this.update_date= update_date;
  73. }
  74. @Column(name= "org_id",insertable= false,updatable= false)
  75. public Integer getOrg_id(){
  76. returnorg_id;
  77. }
  78. public voidsetOrg_id(Integer org_id) {
  79. this.org_id= org_id;
  80. }
  81. @Override
  82. public StringtoString() {
  83. return "EduTeachers [emp_no=" + empno + ", name=" + name + ",sex=" + sex + ", degree=" + degree
  84. + ", update_date=" + update_date + ", org_id=" + org_id + "]";
  85. }
  86. @ManyToOne(fetch=FetchType.EAGER)
  87. @JoinColumn(name= "org_id")
  88. public EduOrg getOrg(){
  89. return org;
  90. }
  91. public voidsetOrg(EduOrg org) {
  92. this.org =org;
  93. }
  94. }


 

 

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


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

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

         


 
 
  1. @Override
  2. @Transactional
  3. publicPage<EduTeachers> query(final String tname,final String sex,final Stringdegree,final String orgname) {
  4. //TODO Auto-generated method stub
  5. returnteacherDao.findAll( new Specification<EduTeachers>() {
  6. @Override
  7. publicPredicate toPredicate(Root<EduTeachers> root, CriteriaQuery<?>query, CriteriaBuilder cb) {
  8. //TODO Auto-generated method stub
  9. Path<String>namepath = root.get( "name");
  10. Path<String> sexpath =root.get( "sex");
  11. Path<String> degreepath =root.get( "degree");
  12. List<Predicate> list = newArrayList<Predicate>();
  13. if(tname!= null&&! "".equals(tname)) {
  14. list.add(cb.like(namepath, "%"+tname+ "%"));
  15. }
  16. if(sex!= null&&! "".equals(sex)) {
  17. list.add(cb.like(sexpath, "%"+sex+ "%"));
  18. }
  19. if(degree!= null&&! "".equals(degree)) {
  20. list.add(cb.like(degreepath, "%"+degree+ "%"));
  21. }
  22. if(orgname!= null&&! "".equals(orgname)) {
  23. Path<String>orgnamepath=root.get( "org").get( "orgname");
  24. list.add(cb.like(orgnamepath, "%"+orgname+ "%"));
  25. }
  26. Predicate[] p = new Predicate[list.size()];
  27. return cb.and(list.toArray(p));
  28. }
  29. }, new PageRequest( 0, 2, new Sort(Direction.DESC, "org.orgname")));

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值