公司最近切换了持久层框架:
spring-boot-starter-data-jpa
2.2.2.RELEASE
使用的时候还是需要详细回忆一下ORM全自动框架的用法:
1、持久层需要继承JpaRepository<数据库实体entity,ID类型> QuerydslPredicateExecutor<数据库实体entity>
JpaRepository可以使我们使用一些基本的增删改查通用方法,例如findAll,findById等,需要注意的是,这些方法的关键字在你的方法中不能随意使用,否则会造成关键字冲突,所以持久层方法越命名不能和这些关键字有任何相似度的匹配
QuerydslPredicateExecutor可以使我们能够使用BooleanExpression的条件查询,maven编辑项目会生成前缀为Q的库对象实体的查询条件类实体
此接口配合maven插件com.querydsl.apt.jpa.JPAAnnotationProcessor,编译项目即可生成条件对象,注意下图中Q开头的一些对象,可以直接当成条件来比较运算,相当于我们sql中的where条件
注意下图getBooleanExperssion方法将我们的条件拼装起来,然后findAll()中传入条件与pageAble对象达到条件查询与分页查询的效果,淡然还可以再pageAble中传入排序对象来达到排序的效果
2、QuerydslPredicateExecutor->多表查询的大杀器
可以像下图中一样多表关联查询
有时候我们需要用one实体中的某个字段条件但是却为null,我们可以加上@QueryInit注解来解决条件实体为空的问题
3、有时候我们想用hql的方式来查询
用对象的方式来写sql
4、更可以用原生sql的方式来写
注意注解运用与取值方式
5、库实体的命名
6、Entity与Dto之间的转换
用到了mapstruct插件
依赖包
编译需maven插件
另外的话还有一种SpringData Redis可以直接接口访问redis了解一下
另外需要注意的一个问题就是herbnet的n+1的问题,
当表存在一对多的问题的话,很有可能会产生查询多次pet的问题,这个问题有待详细研究,由于开发难度问题,所以herbnet一直没流行起来,