Spring boot 数据层框架尝试

2020-03-15  本文已影响0人  Antz_H碎碎念

本文是原创持续连载发布,这篇主要讲解Spring boot整合Spring Data JPA和mybatis-spring-boot-starter框架进行简单尝试使用,后面配置多数据源和使用Druid连接池。如文中有书写或部署问题,请留言指导修正,互相交流,共同进步,本人QQ:417213902。

1、Spring Data JPA理解

从开发以来,本人经历使用从最原始的JDBC,到后来的JDBCtemplate,再者就是ORM(如hibernate等),最后到现在的Spring Data JPA,以上经历不是说本人工作年限很长,只是说使用技术比较落后。对于了解Spring Data 的小伙伴来说,这个技术可能并不是什么新鲜事了,因为它早在2010年就已经诞生了,再者JPA规范,更是早些年就有被定义了。JPA全称是Java Persisterence API ,中文名Java持久层API,是描述对象-关系表的映射并将运行期的实体[对象持久化。而Spring Data就是把各种orm框架的实现都隐藏掉,把查询规则和查询接口统一起来,就是行为即实现,由接口去定义数据库的查询实现,而你更不需要关注你使用的是哪个orm框架,因为查询模型(使用统一接口)和返回模型都是统一的,而orm查询封装这些spring-data通通帮你处理了,这样做的好处就是当你在实体类中新增或修改属性值时,基本不需要动Dao代码。当然以上操作对于简单的单表查询的确已经实现的非常完善,基本不需要写任何SQL,但是据了解因为JPA是一种面向对象的设计理念,所以这对数据库的设计就要相当高的要求,特别是在多表级联查询,表与表之间的主键、外键关系都需要很好的设计,这样在处理一对一、一对多及多对多的情况下能够好的兼容,这个框架本身也提供对于分页、排序等支持。再者网上对于复杂的SQL也有很好的解决方案,采用Spring Data JPA + QueryDSL框架,我尝试着去测试了下,感觉还是不那么方便,比如在增加条件查询的时候需要定义Predicate 等一些对象,其实就是能让程序根据业务自动生成符合条件的SQL。其实Spring Data JPA也是支持使用SQL的方式实现@query,这里JPA最重要一种实现方式,就是根据接口的命名规范代理类JPARepository自动生成想要的SQL,博客后文会给出github源码。

一般可按照以下三类情况使用Spring Data JPA
Spring Data JPA 支持的方式

2、mybatis-spring-boot-starter理解

mybatis对于现在的开发者来说,应该并不是一个默认的框架的,基本上现在市面上大部分互联网公司都是采用它,来作为数据层的框架。mybatis相对于hibernate来说,更灵活、方便、小巧、上手容易等特点。但是Spring官方并没有提供对mybatis的集成,相反JPA正符合hibernate的设计理念,当然我们现在使用的集成都是由mybatis公司或者开源社区开发者提供的。那么为什么Spring不主动支持呢?我想应该是在当前的微服务盛行的大环境下,在业务表设计下不建议使用级联查询,那么就是说我们在开发微服务时基本都是单个服务仅指向单张表,对于单张表的查询,那么Spring Data JPA 的确有很好的实现方式,基本不需要写任何的sql。但是在我们使用的mybatis-spring-boot-starter也可以做到相应的功能,也有类似的插件,插件的实现甚至是比JPA实现的更完善,它的名字叫mapper-spring-boot-starter,有了它可以达到对单表操作时基本不需要写SQL,它也有丰富的分页排序插件(pagehelper-spring-boot-starter),逆向工程插件(mybatis-generator-core)等,基本已经囊括了所有Spring Data JPA的能实现的功能(这里不要深究,在目前来看两者基本一致了,甚至说mybatis更强大,当然在技术选型时还是需要结合自己的业务)。

mybatis-spring-boot-starter 支持方式

3、Spring boot 配置多数据源
通过注解定义多个datasource,在加载bean时,加载不同的datasource到管理中,然后在相应的接口方法上采用自定义注解定义使用的数据源,最终通过Spring AOP实现数据源的切换。
代码见文末github

4、推荐使用阿里Druid数据源使用

以上内容为本次进行Spring boot架构中摸索尝试,如在使用中遇到任何问题,欢迎找我讨论。

2018-05-23 23:52:00

上一篇 下一篇

猜你喜欢

热点阅读