Spring Boot(十二):MyBatis-Plus的多数据源和分页

Spring Boot(十二):MyBatis-Plus的多数据源和分页,第1张

同一个项目有时会涉及到多个数据库,这时我们就要配置多个数据源。配置多数据源的常见情况有以下两种:

1)同一个项目中涉及两个或多个业务数据库,它们之间相互独立,这种情况也可以作为两个或多个项目来开发

2)两个或多个数据库之间是主从关系,主库负责写,从库负责读

1、pom.xml配置

在pom.xml中增加MyBatis-Plus多数据源依赖:

2、配置文件配置

在配置文件application.yml中配置我们需要连接的数据库:blog和user,默认为blog

3、启动类配置

在@SpringBootApplication注解上增加exclude = DruidDataSourceAutoConfigure.class配置:

这个配置的作用是去掉对DruidDataSourceAutoConfigure的自动配置,否则程序会报错:

原因:

DruidDataSourceAutoConfigure在DynamicDataSourceAutoConfiguration之前,其会注入一个DataSourceWrapper,会在原生的spring.datasource下找url, username, password等,而我们动态数据源的配置路径是变化的。

4、实体类和dao层配置

在po文件夹下创建blog和user文件夹,分别用于存储blog数据库和user数据库的实体:

注解:

@TableName: 表名注解,标识实体类对应的表

@TableId: 主键注解,当type = IdType.AUTO时,表示这个主键是自增主键

在dao文件夹下创建blog和user文件夹,分别用于存储blog和user的dao:

注解:

@Repository: 将数据访问层(DAO层)的类标识为Spring Bean

@DS: 配置非默认数据源,本示例中blog为默认数据源,user为非默认数据源,在使用@DS注解时,有如下注意事项:

1)不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源

2)第一次加载数据源之后,第二次,第三次…… *** 作其他数据源,如果数据源不存在,使用的还是第一次加载的数据源

3)数据源名称不要包含下划线,否则不能切换

5、测试验证

编写ArticleController和UserInfoController:

注 : 业务逻辑复杂时,Controller和Mapper中间会有Service层来处理业务逻辑,现在我们就简单的测试一下多数据源,所以直接使用Controller调用Mapper了

1、配置分页插件

2、分页方法

1)使用MyBatis-Plus的selectPage方法

使用MyBatis-Plus的selectPage方法,返回了IPage,示例:

2)sql分页

有时候有些分页需要关联多张表,使用LambdaQueryWrapper不太方便,这时候可以自己写sql来实现分页,主要有两种:纯sql自己实现分页和使用IPage实现分页

注 : 这里的sql示例就使用单表查询了,具体的可根据业务场景使用多表查询

A、纯sql自己实现分页

分页的数据list和总条数单独调用方法返回 :

B、使用IPage实现分页(常用)

返回IPage,返回值的数据结构见“ 1)使用MyBatis-Plus的selectPage方法

本文简单介绍了一下MyBatis-Plus的多数据源和分页,本文示例代码, 详见https://gitee.com/tunan222/spring-boot-demo

若您觉得还可以,请帮忙点个 “赞” ,谢谢

一,引言

在我们实际业务开发中,有时需要同时涉及多个数据库, 可能一个 API 中所需要的数据,往往是包含了多个数据库中的数据,这个时候我们就需要在项目运行中,切换数据源。

二,具体实现

步骤一:我们先需要引入maven配置,版本可自选。dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

步骤二:多数据源配置,需要注意的后面都有写注释。

步骤三:步骤三就可以直接使用啦,真的是太方便了, @DS 可以注解在方法上或类上, 同时存在就近原则 方法上注解 优先于 类上注解

官方建议:

1,本框架只做 切换数据源 这件核心的事情,并不限制你的具体 *** 作,切换了数据源可以做任何CRUD。

2,配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。

3,切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。

4,默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。

方法上的注解优先于类上注解。

5,强烈建议只在service的类和方法上添加注解,不建议在mapper上添加注解。

本人最近接到一个任务,将一个系统改成同时兼容Oracle和PostgreSQL(原来是仅支持Oracle)。虽然大部分的sql语句通用,但是还有许多语法存在差异,所以我们可以通过mybatis自身提供的databaseIdProvider解决这个问题,这里记录一下过程。

通过配置文件开启mysql支持或者postgresql支持


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9936659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存