

Springboot 之 Mybatis-plus 多数据源 - BUG弄潮儿
source link: https://www.cnblogs.com/happyhuangjinjin/p/16755266.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Mybatis-puls 多数据源的使用,采用的是官方提供的dynamic-datasource-spring-boot-starter
包的 @DS 注解,具体可以参考官网:
https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter
pom.xml文件引入如下依赖
主要引入dynamic-datasource-spring-boot-starter
包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.olive</groupId> <artifactId>mybatis-plus-multip-datasource</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>mybatis-multip-datasource</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.14</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> </dependencies></project>
配置两个数据源
分别为第一个主数据源(primary),第二数据源(slave_1),具体配置如下:
# 基本配置server: port: 8080 # 数据库spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: url: jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置 slave_1: url: jdbc:mysql://127.0.0.1:3306/crm72?characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: mapper/*.xml type-aliases-package: com.olive.entity configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl jackson: serialization: indent-output: true
创建学生与老师实体类
学生实体类
package com.olive.entity; import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data; @TableName("t_student")@Datapublic class StudentDO implements Serializable{ @TableId(value="id", type = IdType.AUTO) private Long id; @TableField("user_name") private String name; @TableField("sex") private int sex; @TableField("grade") private String grade;}
老师实体类
package com.olive.entity; import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data; @Data@TableName("t_teacher")public class TeacherDO implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Long id; @TableField("user_name") private String name; @TableField("sex") private int sex; @TableField("office") private String office;}
数据库持久类
StudentMapper持久类
package com.olive.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.olive.entity.StudentDO;import org.apache.ibatis.annotations.Mapper; @Mapperpublic interface StudentMapper extends BaseMapper<StudentDO> { }
TeacherMapper持久类
package com.olive.mapper; import com.baomidou.dynamic.datasource.annotation.DS;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.olive.entity.TeacherDO;import org.apache.ibatis.annotations.Mapper; @DS("slave_1")@Mapperpublic interface TeacherMapper extends BaseMapper<TeacherDO> { }
以上,两个持久类的实现都是继承BaseMapper
基类,该类提供了基本的增删改查的方法;要注意的是,TeacherMapper
类使用了@DS("slave_1")
指定了数据源;而StudentMapper
没有指定,使用的是默认的数据源。
服务类的实现
先定义操作学生和老师的两个接口
StudentService接口
package com.olive.service; import com.baomidou.mybatisplus.extension.service.IService;import com.olive.entity.StudentDO; public interface StudentService extends IService<StudentDO> {}
TeacherService接口
package com.olive.service; import com.baomidou.mybatisplus.extension.service.IService;import com.olive.entity.TeacherDO; public interface TeacherService extends IService<TeacherDO> {}
再定义接口的实现类
StudentServiceImpl类
package com.olive.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.olive.entity.StudentDO;import com.olive.mapper.StudentMapper;import com.olive.service.StudentService;import org.springframework.stereotype.Service; @Servicepublic class StudentServiceImpl extends ServiceImpl<StudentMapper, StudentDO> implements StudentService {}
TeacherServiceImpl类
package com.olive.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.olive.entity.TeacherDO;import com.olive.mapper.TeacherMapper;import com.olive.service.TeacherService;import org.springframework.stereotype.Service; @Servicepublic class TeacherServiceImpl extends ServiceImpl<TeacherMapper, TeacherDO> implements TeacherService { }
观察接口定义和接口实现,套路非常标准。都是实现和继承Mybatis-Plus
提供的标准接口和基类
创建springboot引导类
package com.olive; import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("com.olive.mapper")@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class); } }
package com.olive; import com.olive.service.StudentService;import com.olive.service.TeacherService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest; import com.olive.entity.StudentDO;import com.olive.entity.TeacherDO; @SpringBootTestpublic class MybatisPlusTest { @Autowired StudentService studentService; @Autowired TeacherService teacherService; @Test public void userSave() { StudentDO studentDO = new StudentDO(); studentDO.setName("BUG弄潮儿"); studentDO.setSex(1); studentDO.setGrade("一年级"); studentService.save(studentDO); TeacherDO teacherDO = new TeacherDO(); teacherDO.setName("Java乐园"); teacherDO.setSex(2); teacherDO.setOffice("语文"); teacherService.save(teacherDO); }}
Recommend
-
90
HTTP 404 - SegmentFault 当前页面无法访问,可能没权限或已删除 长老们,去别处看看吧 彡(-_-;)彡回首页...
-
66
前言 说实话,这章本来不打算讲的,因为配置多数据源的网上有很多类似的教程。但是最近因为项目要用到分库分表,所以让我研究一下看怎么实现。我想着上一篇博客讲了多环境的配置,不同的环境调用不同的数据库,那接下...
-
24
概述 本文分别讲述了 spring 与 springboot 是怎么整合 mybatis 与 druid 数据源的?如果你只是想实现其中一种,那你就不要把他们的配置过程搞混了。 1、myb...
-
7
【DB系列】Mybatis-Plus多数据源配置 ...
-
8
项目场景:ClickHouse 操作基于 Mybatis-puls源码扩展开发。解决ClickHouse的修改和删除 SQL操作与Mysql不相同。 基于 Mybatis-puls:update 、updateById 、 delete 函数 1、SqlMethodDiv.java 文件枚举类,对sq...
-
6
数据库字段为int类型 实体字段为了可读性强,使用枚举类型 一般来说,数据库为varchar时,你的枚举元素直接会进行转换 字段为整型 这些如果你是mybatis-plus,可以使用如下default-enum-type...
-
6
1. 卸载旧 MySQL 查看 rpm 包 rpm-qa | grep mysql 如果存在,使用如下命令卸载 rpm -e 查找是否存在mysql 相关目录 find / -name mysql
-
4
上一篇: IDEA SpringBoot-Mybatis实现增删改查(CRUD) 下一篇:Intellij IDEA 高效使用教程 (插件,实用技巧) 最...
-
7
代码版本管理 在项目中,代码的版本管理非常重要。每个需求版本的代码开发在版本控制里都应该经过以下几个步骤。 在master分支中拉取该需求版本的两个分支,一个feature分支,一个release分支;feature分支用于接受个人...
-
6
DynamicTableNameInnerInterceptor是mybatis-plug的一个拦截器插件,可以自己定义需要拦截的表单,然后对它进行加工,这时mybatis-plus就会把SQL代码的表名加上你的这个装饰。 封装的思想 我们通常把mybatis做成一个包,公司其它同...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK