微信号:yunqiinsight

介绍:云栖社区是由阿里云负责运营、阿里巴巴技术协会和阿里巴巴集团各技术团队提供内容支持的开放式技术社区.

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

2018-04-01 22:11 小柒


前言


有人说 从 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的核心概念图:



实现


班级表:



学生表:



封装接口 DynamicQuery:



封装实现 DynamicQueryImpl:



封装实现 DynamicQueryImpl:



业务 IStudentService:



业务实现 StudentServiceImpl:



接口测试:



Swagger2测试



返回List< Object[] >:



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



返回List< Student >:



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


end

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

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

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

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

更多精彩

 
云栖社区 更多文章 关于8K,阿里云最近做了啥? 《云栖精选》3月刊:2017阿里巴巴技术盘点 一文看清深圳云栖阿里云重磅产品发布 微服务架构下分布式事务解决方案 —— 阿里GTS 厉害了,蚂蚁金服!创造了中国自己的数据库OceanBase
猜您喜欢 【数据库】MySQL · 8.0版本更新 · 性能优化篇 Python使用MySQL数据库的方法以及一个实例 收藏级!史上最全的漫画小程序合辑,让你一次爽到底 Tomcat深入研究文章之十(userguide10 Tomcat classloader分析) 2016,我们想为大家做一点小事