SpringBoot开发案例之整合Spring-data-jpa进阶篇

SpringBoot开发案例之整合Spring-data-jpa进阶篇


前言


有人说 从 jdbc->jdbctemplate->hibernation/mybatis 再到 jpa,真当开发人员的学习时间不要钱?我觉得到 h/m 这一级的封装已经有点过了,再往深处走就有病了。


还有人说JPA 很反人类(一个面试官),还举了一个很简单举了例子说:一个数据库如果有 50 个字段,那你写各种条件查询不是要写很多?就是应该用类似 SQL 的方式来查询啊?


其实在我看来,存在即合理,人们总是向着好的方向去发展,学习什么不需要成本,底层语言牛逼倒是去学啊,不还是看不懂,弄不明白。很多知识对于程序员来说,都是一通百通,查询文档就是了,最主要的是能方便以后的开发即可。


对于反人类这一说,只能说 to young to simple,JPA的初衷肯定也不会是让你写一个几十个字段的查询,顶多一到两个而已,非要这么极端?再说JPA也是提供了EntityManager来实现SQL或者HQL语句查询的不是,JPA本质上还是集成了Hibernate的很多优点的。


进阶查询


需求:


学生表(app_student)、班级表(app_class)、当然表结构比较简单,比如这时候我们需要查询学生列表,但是需要同时查询班级表的一些数据,并以JSON或者实体的方式返回给调用者。


本次需求,主要实现JPA的以下几个特性:


  • 封装EntityManager基类

  • 多表查询返回一个List

  • 多表查询返回一个Map

  • 多表查询返回一个实体


Entitymanager的核心概念图:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


实现


班级表:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


学生表:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


封装接口 DynamicQuery:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


封装实现 DynamicQueryImpl:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


封装实现 DynamicQueryImpl:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


业务 IStudentService:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


业务实现 StudentServiceImpl:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


接口测试:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


Swagger2测试


SpringBoot开发案例之整合Spring-data-jpa进阶篇


返回List< Object[] >:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


返回List< Map< Object, Object > >:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


返回List< Student >:


SpringBoot开发案例之整合Spring-data-jpa进阶篇


源码地址:https://gitee.com/52itstyle/spring-data-jpa


end

厉害了,蚂蚁金服!创造了中国自己的数据库OceanBase

微服务架构下分布式事务解决方案 —— 阿里GTS

如何利用秒级监控进行MongoDB故障排查

带你走进神经网络的“前世今生”

更多精彩

SpringBoot开发案例之整合Spring-data-jpa进阶篇