JPA 多表分页查询
业务场景:大学生毕业后统计毕业去向。学生实体和毕业去向实体一对一关系。
实体:
@Entity
@Data
@Table(name = "t_s_student")
public class TSStudent implements Serializable { /**主键*/
@Id
@GeneratedValue(generator = "idGenerator")
@GenericGenerator(name = "idGenerator",strategy = "uuid")
@Column(length = 32)
private String id; /**姓名*/
@Column(name = "name")
private String name; /**学号*/
@Column(name = "student_id",length = 20)
private String studentId; /**电话*/
@Column(name = "phone",length = 20)
private String phone; /**地址*/
@Column(name = "address",length = 200)
private String address; /**籍贯*/
@Column(name = "birthplace",length = 200)
private String birthplace;
/**生日*/ @Column(name = "birthday")
private String birthday; /**毕业时间*/
@Column(name = "graduation_time")
private String graduationTime; /**班级*/
@Column(name = "clazz",length = 50)
private String clazz; /**
* 性别
*/
@Column(name = "sex",length = 5)
private String sex; /**
* 年级
*/
@Column(name = "grade",length = 20)
private String grade;
/**
* 成绩
*/
@Column(name = "achievement",length = 20)
private String achievement; /**
* 毕业去向
*/
@Column(name = "graduation",length = 100)
private String graduation; /**
* 所在地区
*/
@Column(name = "area",length = 200)
private String area; /**
*/
@Column(name = "qq",length = 20)
private String qq; /**
* 行业
*/
@Column(name = "industry",length = 20)
private String industry; }
毕业去向实体:
@Entity
@Table(name ="t_s_graduation")
@Data
public class TSGraduation implements Serializable { @Id
@GeneratedValue(generator = "idGenerator")
@GenericGenerator(name = "idGenerator",strategy = "uuid")
@Column(length = 32)
private String id; /**
* 城市
*/
@Column(name = "city",length = 50)
private String city; /**
* 公司名
*/
@Column(name = "company",length = 100)
private String company; /**
* 公司地址
*/
@Column(name = "company_address",length = 200)
private String companyAddress; /**
* 公司电话
*/
@Column(name = "company_phone",length = 20)
private String companyPhone; /**
* 从事行业
*/
@Column(name = "industry",length = 20)
private String industry; /**
* 所属地区
*/
@Column(name = "area",length = 100)
private String area; /**
* 入职时间
*/
@Column(name = "entry_time",length = 20)
private String entryTime; /**
* 薪资
*/
@Column(name = "salary")
private Integer salary; /**
* 是否有五险一金
*/
@Column(name = "has_insurance_and_housing_fund",length = 5)
private String hasInsuranceAndHousingFund; /**
* 关联学生ID
*/
@OneToOne(cascade = CascadeType.ALL)//student 是关系的维护端,当删除学生的时候,会级联删除去向信息
@JoinColumn(name = "student_id",referencedColumnName = "id")//去向中的student_id字段参考学生表中的ID字段
private TSStudent student;
}
分页服务接口实现:
@Override
public Page<TSGraduation> search(TSGraduation graduation, AbstractPageRequest pageable) {
return graduationRepository.findAll(new Specification<TSGraduation>() {
@Override
public Predicate toPredicate(Root<TSGraduation> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { List<Predicate> list = new ArrayList<>(); //获取学生属性,查询条件
Join<Object, TSStudent> student = root.join("student", JoinType.LEFT); if (graduation.getStudent() != null && !StringUtils.isEmpty(graduation.getStudent().getClazz())){
list.add(criteriaBuilder.like(student.get("clazz").as(String.class),"%" + graduation.getStudent().getClazz() + "%"));
}
if (graduation.getStudent() != null && !StringUtils.isEmpty(graduation.getStudent().getName())){
list.add(criteriaBuilder.like(student.get("name").as(String.class),"%" + graduation.getStudent().getName() + "%"));
} if (graduation.getStudent() != null && !StringUtils.isEmpty(graduation.getStudent().getSex())){
list.add(criteriaBuilder.equal(student.get("sex").as(String.class),graduation.getStudent().getSex()));
} if (graduation.getStudent() != null && !StringUtils.isEmpty(graduation.getStudent().getGraduation())){
list.add(criteriaBuilder.equal(student.get("graduation").as(String.class), graduation.getStudent().getGraduation() ));
} if (!StringUtils.isEmpty(graduation.getCompany())){
list.add(criteriaBuilder.like(root.get("company"),"%" + graduation.getCompany()+ "%"));
} if (!StringUtils.isEmpty(graduation.getIndustry())){
list.add(criteriaBuilder.like(root.get("industry"),"%" + graduation.getIndustry()+ "%"));
} if (!StringUtils.isEmpty(graduation.getArea())){
list.add(criteriaBuilder.like(root.get("area"),"%" + graduation.getArea()+ "%"));
} if (!StringUtils.isEmpty(graduation.getSalary())){
list.add(criteriaBuilder.equal(root.get("salary"),graduation.getSalary()));
} if (!StringUtils.isEmpty(graduation.getHasInsuranceAndHousingFund())){
list.add(criteriaBuilder.equal(root.get("hasInsuranceAndHousingFund"),graduation.getHasInsuranceAndHousingFund()));
} return criteriaBuilder.and(list.toArray(new Predicate[list.size()]));
}
},pageable);
}
参考:https://blog.csdn.net/qq_36289377/article/details/80761103
JPA 多表分页查询的更多相关文章
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- sql连表分页查询(存储过程)
1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句 先在数据库新建一个存储过程 拷贝以下代码 CREATE PROCEDURE [dbo].[ ...
- Mybatis-plus多表关联查询,多表分页查询
学习plus真的觉得写代码真的越来越舒服了.昨天开始接触吧,只要学会了多表关联查询.plus就能随意搭配使用了. 关于怎么搭建的就自行了去研究了哦.这里直接进入主题. 我用的是springboot+m ...
- spring jpa 带参数分页查询(一)
1.写个接口继承JpaRepository @NoRepositoryBean public interface BaseRepository<T,PK extends Serializable ...
- springBootJpa 联表分页查询总数不准的问题
问题情景: 在联表查询时 ``` // 两张表关联查询 Join<Project, Plan> planJoin = root.join("plans", JoinTy ...
- SQLServer多表联查,多表分页查询
多表联查: select p.*,s.Sheng , i.Shifrom [dbo].[ProductRecordInfo] --表名 p left join [ShengInfo] s on ...
- jpa自定义条件分页查询
主要依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- .net EF Join 关联表分页查询
Join中第二个参数和第三个参数即为两张表关联对应的字段 第四个参数new 后面如果不写Model名,系统会自动生成带字段的list类型 IQueryable<Operator> oper ...
- jpa多表leftjoin 查询,自定义返回结果
sql代码 自定义返回结果 package com.cdp.ecosaas.coredb.uua.sync.vo; import java.io.Serializable; public class ...
随机推荐
- 使用终端shell命令批量改动一个文件下的全部文件的读写权限
之前对openfire安装的目录就遇到过这个问题,今天再次遇到.须要改动一个目录以下的全部子目录以及文件的三个权限:本用户读写.管理员读写.全部人读写,三个都要需改为wr 步骤例如以下:比如我要改动/ ...
- Linux组件封装(三)使用面向对象编程封装Thread
C++11提供了thread,但是过于复杂,我们还是倾向于在项目中编写自己的Thread. Posix Thread的使用这里不再赘述. 重点是这个函数: #include <pthread.h ...
- JavaScript数组求最大值 面试题
1.JavaScript数组求最大值 (1)方法一:借用math.max (2)方法二:ES6 2.代码 <!DOCTYPE html> <html lang="zh&qu ...
- dr-helper项目设计介绍(一个包括移动端和Web端的点餐管理系统)
一.源代码路径 https://github.com/weiganyi/dr-helper 二.界面 通过浏览器訪问Web服务,能够看到界面例如以下: ADT-Bundle编译project生成dr- ...
- 原生JS实现的h5小游戏-植物大战僵尸
代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结 ...
- (九)Thymeleaf用法——Themeleaf注释
4. 注释 模板名称:comment.html 4.1 标准 HTML/XML注释 语法:<!-- --> 4.2 解析器级注释块(Parser-level ...
- Burp Suite基本用法
从上一篇已经知道Burp Suite安装.启动方法,本章将会阐述Burp Suite抓包.重放.爆破.双参数爆破.爬虫等基本用法.同博客园看到一篇描述Burp Suite界面各个字段和按钮作用,感兴趣 ...
- elk systemd管理
1.logstash /etc/systemd/system/logstash.service Type=simple User=logstash Group=logstash # Load env ...
- 【0】按照Django官网:实现第一个django app 安装必要的工具/模块
1.环境配置: (1)Install Setuptools¶ To install Python packages on your computer, Setuptools is needed. Do ...
- could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
© 版权声明:本文为博主原创文章,转载请注明出处 1.问题描述 搭建SSH框架启动报错如下: 六月 07, 2017 2:34:34 下午 org.springframework.web.contex ...