业务场景:大学生毕业后统计毕业去向。学生实体和毕业去向实体一对一关系。

实体:

@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; /**
* QQ
*/
@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

最新文章

  1. select * from table 时间长
  2. 树莓派及其他硬件平台国内外Linux镜像站全汇总
  3. ORACLE 回收站导致的故障
  4. C语言typeof详解 offsetof
  5. CSS网页布局错位:CSS宽度计算
  6. geeksforgeeks@ Maximum Index (Dynamic Programming)
  7. 由“大数据量Excel入库高效方式”瞥见“并联系统”之优势
  8. Android中的常见时区
  9. linux下virtualenv的python版本
  10. &quot;手机信号放大器&quot; 让手机信号增强的办法
  11. 【01背包】HDU 2602 Bone Collector (模板题)
  12. 计蒜客NOIP模拟赛4 D2T2 跑步爱天天
  13. C++实现单链表
  14. bootstrap模态框内容替换时会重新触发模态框?&lt;a&gt;标签到底有哪些特殊的特性呢?
  15. markdown写作方法规范参考汇总
  16. MTLAB: 稀疏矩阵的表示-sparse
  17. 章节七、5-Maps
  18. Unity中的定时器与延时器
  19. Ajax请求传递数组参数
  20. 在Markdown中写注释

热门文章

  1. PS如何为图片添加四面投影
  2. h5+ 管理设备信息
  3. Linux上安装tomcat、jdk
  4. (CF#257)A. Jzzhu and Children
  5. Intent之对象传递(Parcelable传递对象和对象集合)
  6. Android 函数回调
  7. 【已解决】 iView-admin 动态路由问题
  8. mac eclipse 删除不用的workspace
  9. mac上搭建docker镜像私服
  10. android 小游戏之数字猜猜