企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 一、持久层模块单独拆分 > 术语:持久层。就是进行应用数据存取的代码层,就是将数据持久化保存。可以是保存到文件、数据库等。通常对于web开发就是指针对数据库的操作被称为持久层。 **为什么要将持久层的代码单独拆分出来?** 通常来说,每一个微服务都单独对应一个数据库实例。但是不排除某些微服务业务发生了拆分,但数据之间的耦合度非常强,仍然存储在同一个数据库里面。这就可能产生一个问题:**针对同一个数据库的同一个持久化方法,在不同的微服务里面定义了多次**。 ![](https://img.kancloud.cn/93/73/937306fbafd9aec03e6458e44ef44470_550x439.png) 所以,通常将持久层的代码单独抽离出来,形成一个模块。这样做的好处在于: * 避免持久层代码,多次重复定义,造成开发资源的浪费。 * 可以抽离出对SQL优化、数据库知识掌握较好的团队成员,专门维护持久层操作的代码 * 有利于在各个微服务之间的实现跨库的分布式事务 ## 二、新建持久层模块 首先使用maven的方式,新建一个模块bcloud-persistence-spring-boot-starter。然后在dongbb-cloud父项目的pom中dependencyManagement添加版本号管理(我是用的是mybatis构建持久层) ~~~ <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> <type>pom</type> <scope>import</scope> </dependency> ~~~ 在dbcloud-persistence-spring-boot-starter添加dependency引入jar包 ~~~ <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> </dependencies> ~~~ ## 三、代码迁移 我们的持久层RBAC权限代码都是从[dongbb](https://gitee.com/hanxt/dongbb)单体应用项目的common-persistence迁移过来的。 ![](https://img.kancloud.cn/17/3c/173cbe6798a9ff216171128c0880d357_520x546.png) * 第一部分:蓝色的部分,这个是RBAC基于角色的权限管理数据库的表结构创建的SQL语句及部分样例数据insert语句。[rbac-sql-mysql.sql](https://gitee.com/hanxt/dongbb-cloud/blob/master/dbcloud-persistence-spring-boot-starter/src/main/resources/com/zimug/dongbb/cloud/starter/persistence/sql/rbac-sql-mysql.sql) * 第二部分:红色的部分,这部分代码是针对RBAC用户表、角色表、权限表等十张表的mybatis(xml、model、mapper、modelExample文件)。这部分代码是可以根据数据库表结构自动生成的,不要手动迁移。(mybatis代码生成工具的使用,在我的Spring Boot课程和dongbb实战课程里面都讲过,网上也有很多资料。) * 第三部分:黄色的部分,是从dongbb单体应用项目迁移过来的。只有三个文件,把xml和java类里面的package名改一改即可。 > 大家不用过于纠结于:代码迁移的部分内容,这部分不是我们微服务架构课程的重点。这里面的绝大部分代码,在讲解微服务的时候都用不到。我们本课程的核心内容是讲解微服务的架构,不是RBAC业务的实现逻辑。如果有关心此部分内容的朋友可以学习:[DongBB前后端分离RBAC权限管理系统](https://www.kancloud.cn/hanxt/vue-spring/1528239)。之所以讲解这部分内容,主要是为了让大家理解单体应用拆分微服务的过程及项目的代码结构。 ## 四、在各微服务中使用持久层模块 在dongbb-cloud父项目中设定统一版本号管理 ~~~ <dependencyManagement> <dependencies> ...... <dependency> <groupId>com.zimug.dongbb.cloud</groupId> <artifactId>dbcloud-persistence-spring-boot-starter</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version> </dependency> ...... </dependencies> </dependencyManagement> ~~~ 在aservice-rbac微服务中引用该模块 ~~~ <dependency> <groupId>com.zimug.dongbb.cloud</groupId> <artifactId>dbcloud-persistence-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ~~~ 最后,为了让所有的mybatis mapper都能够被正确的注入Spring,加入mybatis组件的扫描路径。 ~~~ @MapperScan(basePackages = {"com.zimug.dongbb.cloud.**.mapper"}) public class AserviceRbacApplication { ~~~ 当然,你还需要在application.yml中做数据库连接的配置。