MyBatis-Plus与Druid结合Dynamic-datasource实现多数据源操作数据库的示例
MyBatis-Plus 官网:https://baomidou.com/
MyBatis-Plus 官方文档:https://baomidou.com/pages/24112f/
dynamic-datasource 文档(付费):https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611
创建数据库
在这里我分别创建了两个数据库:
test1
和test2
,并分别创建相同结构的数据表User
,当然,你也可以根据实际情况创建不同结构的数据表:-- ---------------------------- -- User 表结构 -- ---------------------------- CREATE TABLE `user` ( `user_id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `user_name` varchar(30) NOT NULL COMMENT '用户账号', `nick_name` varchar(30) NOT NULL COMMENT '用户昵称', `email` varchar(50) NULL DEFAULT '' COMMENT '用户邮箱', `password` varchar(100) NULL DEFAULT '' COMMENT '密码', PRIMARY KEY (`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
分别向两个数据库中插入数据:
-- ---------------------------- -- 数据库 test1 插入记录 -- ---------------------------- INSERT INTO `user` VALUES (100, 'wangwu', '王五', 'wangwu@qq.com', '123456'); INSERT INTO `user` VALUES (101, 'zhaoliu', '赵六', 'zhaoliu@qq.com', '123456'); -- ---------------------------- -- 数据库 test2 插入记录 -- ---------------------------- INSERT INTO `user` VALUES (100, 'zhangsan', '张三', 'zhangsan@qq.com', '123456'); INSERT INTO `user` VALUES (101, 'lisi', '李四', 'lisi@qq.com', '123456');
添加依赖
接下来我们需要在pom.xml
文件中添加所需的依赖项。包括MyBatis-Plus、Dynamic Datasource、Druid和MySQL驱动程序的依赖:
<dependencies> <!-- Mybatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> <!-- Dynamic Datasource --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>最新版本</version> </dependency> <!-- Druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>最新版本</version> </dependency> <!-- MySQL驱动程序 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>最新版本</version> </dependency> </dependencies>
注:请确保将最新版本
替换为实际使用的版本号。
配置数据源
在application.yml
或application.properties
文件中配置数据源信息。以下是一个示例的application.yml
配置:
spring: #数据源配置 datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: statViewServlet: enabled: true # 设置白名单,不填则允许所有访问 allow: url-pattern: /druid/* # 控制台管理用户名和密码 login-username: helloworld login-password: 123456 dynamic: druid: initial-size: 10 # 连接池初始大小 max-active: 100 # 连接池最大连接数 min-idle: 10 # 连接池最小空闲连接数 max-wait: 60000 # 获取连接的最大等待时间,单位为毫秒 pool-prepared-statements: true # 是否缓存PreparedStatement,默认为true max-pool-prepared-statement-per-connection-size: 20 # 每个连接缓存Statement的最大数目 time-between-eviction-runs-millis: 60000 # 连接回收器运行的时间间隔,单位为毫秒 min-evictable-idle-time-millis: 300000 # 连接在池中最小空闲的时间,达到此值后将被移除,单位为毫秒 test-while-idle: true # 空闲连接检测是否可用,默认为true test-on-borrow: false # 取连接时检测连接是否可用,默认为false test-on-return: false # 还连接时检测连接是否可用,默认为false validationQuery: "select 1" # 验证连接的SQL语句 filters: stat,wall # 连接过滤器,用于统计和防火墙功能 stat: log-slow-sql: true # 是否打印慢SQL日志 slow-sql-millis: 1000 # 慢SQL的阈值时间,单位为毫秒 merge-sql: false # 是否合并SQL,默认为false wall: multi-statement-allow: true # 是否允许一次执行多条语句,默认为true primary: test1 #主数据源,在代码中不指定数据源时默认为该主数据源 datasource: test1: #数据源 test1 url: jdbc:mysql://localhost:3306/test1 username: root password: root test2: #数据源 test2 url: jdbc:mysql://localhost:3306/test2 username: root password: root
这里示例配置了两个数据源,分别是user
和admin
。你可以根据实际情况进行配置。
编写 Mapper
编写 Mapper 接口和对应的 XML 文件:创建 Mapper 接口,并使用 MyBatis-Plus 提供的注解来定义数据库操作。例如:
@Mapper public interface UserMapper extends BaseMapper<User> { // 定义数据库操作方法 }
<!-- UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <!-- 编写SQL语句 --> </mapper>
编写 Service
在 UserService 接口中,定义了两个方法:
getUsersFromTest1Db()
:返回一个List类型的列表,表示从test1数据库中获取用户信息。getUsersFromTest2Db()
:返回一个List类型的列表,表示从test2数据库中获取用户信息。
public interface UserService extends IService<User> { /** * 从test1数据库中获取用户信息 */ List<User> getUsersFromTest1Db() ; /** * 从test2数据库中获取用户信息 */ List<User> getUsersFromTest2Db() ; }
编写 UserServiceImpl 实现类实现具体的方法:
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userMapper; @DS("test1") // 指定数据源为 test1 public List<User> getUsersFromTest1Db() { return userMapper.selectList(null); } @DS("test2") // 指定数据源为 test2 public List<User> getUsersFromTest2Db() { return userMapper.selectList(null); } }
由于我们需要分别查询 test1 和 test2 数据库中的 user 表,所以我们需要在查询时切换数据源,Dynamic-datasource
提供了注解的方式切换数据源,即我们在上述示例中使用的@DS
注解来为每个方法指定数据源。
这样,当调用getUsersFromTest1Db()
方法时,会使用名为test1
的数据源进行数据库操作;而调用getUsersFromTest2Db()
方法时,则会使用名为test2
的数据源。
编写 Controller
编写一个控制器类 UserController,使用@RestController注解标记为控制器组件,表示它可以处理HTTP请求,并将结果直接响应给客户端。
在类中使用@Autowired注解将UserService依赖注入到UserController中,以便在方法中使用UserService对象。
user1List()方法使用@GetMapping注解,指定了路径为"/test1-list",表示当客户端发送GET请求到该路径时,会执行该方法。在方法体内部,调用userService的getUsersFromTest1Db方法,以获取用户列表,并将结果作为List类型返回给客户端。
userList()方法同样使用@GetMapping注解,指定了路径为"/test2-list",表示当客户端发送GET请求到该路径时,会执行该方法。在方法体内部,调用userService的getUsersFromTest2Db方法,以获取用户列表,并将结果作为List类型返回给客户端。
@RestController public class UserController { @Autowired private UserService userService; @GetMapping("/test1-list") public List<User> user1List() { // 调用UserService的getUsersFromTest1Db方法获取用户列表并返回 return userService.getUsersFromTest1Db(); } @GetMapping("/test2-list") public List<User> user2List() { // 调用UserService的getUsersFromTest2Db方法获取用户列表并返回 return userService.getUsersFromTest2Db(); } }
配置 MyBatis-Plus
在项目启动类上添加Mapper
扫描注解:
@MapperScan("com.hw.mapper") @SpringBootApplication public class HelloWorldApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldApplication.class, args); } }
在配置文件中添加XML路径:
mybatis-plus: # 指定 Mapper XML 文件所在路径 mapper-locations: classpath*:mapper/*.xml
测试
启动项目,查看控制台输出日志,可以看到已经初始化两个数据源,主数据源就是我们在配置文件中指定的 primary: test1
:
使用 ApiFox 分别访问两个接口,分别返回不同数据源的数据信息:
访问/test1-list
:
访问/test2-list
:
到此这篇关于MyBatis-Plus与Druid结合Dynamic-datasource实现多数据源操作数据库的示例的文章就介绍到这了,更多相关MyBatis-Plus Druid Dynamic-datasource多数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
JDBC中Statement和Preparement的使用讲解
今天小编就为大家分享一篇关于JDBC中Statement和Preparement的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01Java EasyExcel实现导出多sheet并设置单元格样式
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具,下面我们就来学习一下EasyExcel如何实现导出多sheet并设置单元格样式吧2023-11-11Spring Boot中@ConditionalOnProperty的使用方法
这篇文章主要给大家介绍了关于Spring Boot中@ConditionalOnProperty的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-12-12SpringMVC事件监听ApplicationListener实例解析
这篇文章主要介绍了SpringMVC事件监听ApplicationListener实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-11-11如何使用Spring-Test对Spring框架进行单元测试
这篇文章主要介绍了如何使用Spring-Test对Spring框架进行单元测试,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09
最新评论