一、主要内容
专栏的标题基本上已概括了本专栏的主要内容,本专栏是基于Java的泛型和反射,结合SpringBoot和JPA实现生产级别的通用的增删改查,即将所有的单表的增删改查以及常用的联表查询等操作抽取到父类中实现。此后子类要做的则仅仅是继承这些父类,在无需其他任何代码的情况下即可应对大多数常见的需求。该项目虽然仅有几百行代码,但却可以使你的工作效率提升几倍、几十倍甚至几百倍。
除上面所说的将基本的增删改查抽取到父类中以外,本专栏还会讲到如何编写一些简单的注解来处理一对多和多对多关系,以及借助这些注解来实现联表查询和数据回显等。这样在应对一对多或多对多关系的时候仅仅需要一个简单的注解,而不需要额外的任何代码,就会自动地创建关系数据并会进行数据校验。这有点类似于@ManyToMany等注解,不同的是这个是自己手动编写和实现的,而且使用起来更为简便,功能也更为强悍。除此之外,还会有其他的一些有意思的和小巧的设计,比如有些数据一旦初始化就不可更改(像创建时间、创建人等)等的实现。
在看完这个专栏后,你可能会有这样一种体会:自己竟然不知不觉间写出来了一个ORM框架。其实,这不仅仅是一个简单的ORM框架,而是对整个MVC架构的整合。当初开发这个项目的初衷就是让自己从那些简单无聊但又不得不做的工作中解脱出来。
本专栏会详述每一步的设计理念和实现过程,以及需要注意的地方,尽可能地做到通俗易懂,老少皆宜。让读者在看了这个专栏后能够对Java的泛型和反射以及对Spring和JPA有更为深入的理解。由于个人写作能力有限,文章在撰写的过程中可能有些拖沓和啰嗦,还请见谅。对于一些经验丰富的读者可以略过文字直接阅读代码。
“欲事之无繁,则必劳于始而逸于终。”这是出自苏轼《策别第八》中的一句话,我想在Java开发的工作中若能够善于利用泛型和反射就必然能够“劳于始而逸于终”。
二、专栏提纲
1、项目搭建
Idea + Gradle + SpringBoot + JPA + Mysql + Druid
2、通用的增删改查的底层设计
BaseEntity、BaseController、BaseService、BaseRepository的设计
3、通用的增删改查的简单实现
BaseController、BaseService的具体实现,静态内部类的经典使用
4、通用的增删改查的优雅实现
BaseController、BaseService的优雅实现
5、利用反射完成带条件的查询和分页
ReflectUtil的编写和JPA中Specification的使用
6、利用反射解决JPA执行修改操作时的缺陷
避免执行update操作时属性值丢失的风险
7、利用泛型和反射实现必输属性的后端校验
ValidUtil的编写,使你的接口更安全和高效
8、手写一个注解实现一个属性一旦初始化就不可更改
避免人为更改数据库中的createTime等信息
9、手写一个注解实现对多对多关系的处理以及查询时的数据回显
利用Annotation和反射处理多对多关系的关系数据创建和数据校验
10、手写一个注解完成一对多关系的处理和查询回显
一对多关系的处理和回显
11、基于手写的注解实现任何条件下的联表分页查询
编写一个几乎适用于所有分页查询场景的接口
12、通用的根据关键字模糊联表分页查询匹配数据的实现
对基于手写的注解实现任何条件下的联表分页查询升级
13、通用的根据某个指定属性分组统计的实现
应对几乎所有场景下的分组统计接口
14、通用的数据导入的实现
利用apache的common-csv包完成统一的导入模板的下载和数据导入,通过AES加解密实现对导入模板的保护
15、通用的数据导出的实现
使用一个接口应对几乎所有场景下的数据导出
16、写在后面
项目展望和源码地址分享