九龙坡区建设二校有网站吗,做影视网站的软件,制作装饰公司网站,网站设计扁平化文章目录 前言 一、Mybatis-Plus是什么#xff1f; 二、多数据源是什么#xff1f; 三、使用步骤 1. 新建一个SpringBoot项目 2. 引入必要的MyBatis架包 3. 新建两个数据库及两张表 3.3.1 新建数据库#xff1a;DB_A#xff0c;并创建一张数据表alarm_kind#xff0c;以及…文章目录 前言 一、Mybatis-Plus是什么 二、多数据源是什么 三、使用步骤 1. 新建一个SpringBoot项目 2. 引入必要的MyBatis架包 3. 新建两个数据库及两张表 3.3.1 新建数据库DB_A并创建一张数据表alarm_kind以及一些测试数据。 3.3.2 同样再建一个数据库DB_B并创建一张数据表test以及一些测试数据。 4. 修改配置文件application.yml 5. 编码 5.1 entity 实体类 5.2 mapper接口 5.3 service服务接口 5.4 service服务实现 6. 测试及验证 总结 前言
在日常大型项目中经常会遇到分库分表的数据库设计咱们普通的SpringBoot 单体项目通过默认配置及注解可以很容易实现对单个数据库的操作管理但遇到需要多个数据库操作可能会比较麻烦因此咱们今天主要介绍如何使用MyBatis-Plus提供的一个多数据源动态加载组件简单轻松实现在单个项目中实现对多个数据库的操作管理。
关键词SpringBoot 、MyBatis、MyBatis-Plus、多数据源 一、Mybatis-Plus是什么
Mybatis-Plus是一个Mybatisopens new window的增强工具在Mybatis的基础上只做增强不做改变为简化开发。
二、多数据源是什么
多数据源是指在分布式环境或集群环境下为不同的数据库如MySQL、Oracle、SQLServer等配置数据源以便在项目中能够随意切换以获取数据。这种配置方式允许应用程序根据需要连接到不同的数据库以实现特定的业务需求如数据隔离、水平扩展、读写分离等。
三、使用步骤
1. 新建一个SpringBoot项目
可以通过Ide工具向导建立,这里不详细描述了。
2. 引入必要的MyBatis架包
在项目的pom.xml加入如何内容 !-- mysql --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.18/version/dependency!-- 连接池 --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.24/version/dependency!-- mybatis plus --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion${mybatisplus-spring-boot-starter.version}/version/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus/artifactIdversion3.4.2/version/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.4.1/version/dependencydependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion2.3/version/dependencydependencygroupIdcom.baomidou/groupIdartifactIddynamic-datasource-spring-boot-starter/artifactIdversion3.5.0/version/dependency
3. 新建两个数据库及两张表
3.3.1 新建数据库DB_A并创建一张数据表alarm_kind以及一些测试数据。
CREATE DATABASE IF NOT EXISTS DB_A /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE DB_A;DROP TABLE IF EXISTS alarm_kind;
CREATE TABLE IF NOT EXISTS alarm_kind (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,type_no varchar(255) DEFAULT NULL COMMENT 类型编号,type_name varchar(255) DEFAULT NULL COMMENT 类型名称,PRIMARY KEY (id)
) ENGINEInnoDB AUTO_INCREMENT23 DEFAULT CHARSETutf8mb4 COMMENT报警类型字典表;DELETE FROM alarm_kind;
INSERT INTO alarm_kind (id, type_no, type_name) VALUES(1, Powon, 市电),(2, Baton, UPS电源),(3, Move, 位移),(4, Alarm, 震动),(5, Cut, 切割检测),(6, Smoke, 烟雾),(7, LBJ, 声光),(8, HW, 红外),(9, Box4_NoPutTimeOut, 四号柜款箱未放入);
3.3.2 同样再建一个数据库DB_B并创建一张数据表test以及一些测试数据。
CREATE DATABASE IF NOT EXISTS DB_B /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE DB_B;DROP TABLE IF EXISTS test;
CREATE TABLE IF NOT EXISTS alarm_kind (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,type_no varchar(255) DEFAULT NULL COMMENT 类型编号,type_name varchar(255) DEFAULT NULL COMMENT 类型名称,PRIMARY KEY (id)
) ENGINEInnoDB AUTO_INCREMENT23 DEFAULT CHARSETutf8mb4 COMMENT报警类型字典表;DELETE FROM test;
INSERT INTO test (id, type_no, type_name) VALUES(1, Powon, 测试1),(2, Baton, 测试2),(3, Move, 测试3);
4. 修改配置文件application.yml
server:port: 8085 #服务端口配置
spring:application:name: ms-basedatasource:dynamic:primary: baseA #默认加载的数据库是DB_Astrict: falsedatasource:baseA:driver-class-name: com.mysql.cj.jdbc.Driver #数据源配置url: jdbc:mysql://127.0.0.1:13306/DB_A?serverTimezoneGMT%2B8useSSLfalseusername: rootpassword: data123456!type: com.alibaba.druid.pool.DruidDataSource #连接池配置max-idle: 10 #No operations allowed after connection closed错误原因及解决max-wait: 10000min-idle: 5initial-size: 5validation-query: SELECT 1test-on-borrow: falsetest-while-idle: truetime-between-eviction-runs-millis: 18800baseB:driver-class-name: com.mysql.cj.jdbc.Driver #数据源配置url: jdbc:mysql:///127.0.0.1:13306/DB_B?serverTimezoneGMT%2B8useSSLfalseusername: rootpassword: data123456!type: com.alibaba.druid.pool.DruidDataSource #连接池配置max-idle: 10 #No operations allowed after connection closed错误原因及解决max-wait: 10000min-idle: 5initial-size: 5validation-query: SELECT 1test-on-borrow: falsetest-while-idle: truetime-between-eviction-runs-millis: 18800 5. 编码
5.1 entity 实体类
AlarmKind.java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;/*** p* 报警类型字典表* /p** since 2022-05-24*/
Data
EqualsAndHashCode(callSuper false)
public class AlarmKind implements Serializable {private static final long serialVersionUID 1L;/*** 主键ID*/TableId(value id, type IdType.AUTO)private Long id;/*** 类型编号*/private String typeNo;/*** 类型名称*/private String typeName;
} Test.java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;/*** p* 测试表* /p**/
Data
EqualsAndHashCode(callSuper false)
public class Test implements Serializable {private static final long serialVersionUID 1L;/*** 主键ID*/TableId(value id, type IdType.AUTO)private Long id;/*** 类型编号*/private String typeNo;/*** 类型名称*/private String typeName;
}
5.2 mapper接口 AlarmKIndMapper.java import com.xxxx.rest.entity.AlarmKind;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** p* 报警类型字典表 Mapper 接口* /p**/
public interface AlarmKindMapper extends BaseMapperAlarmKind {ListAlarmKind getAll();
} TestMapper.java import com.xxxx.rest.entity.Test;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** p* 测试表 Mapper 接口* /p**/
public interface TestMapper extends BaseMapperTest {ListTest getAll();
}
5.3 service服务接口
IAlarmKIndService.java
import com.xxx.rest.entity.AlarmKind;
import com.baomidou.mybatisplus.extension.service.IService;import com.xianban.rest.model.msbase.vo.platform.BaseLineVO;import java.util.List;/*** p* 报警类型表 服务类* /p**/
public interface IAlarmKindService extends IServiceAlarmKind {ListAlarmKind getAll();
}
ITestService.java
import com.xxx.rest.entity.Test;
import com.baomidou.mybatisplus.extension.service.IService;import com.xianban.rest.model.msbase.vo.platform.BaseLineVO;import java.util.List;/*** p*测试表 服务类* /p**/
public interface ITestService extends IServiceTest {ListTest getAll();
}
5.4 service服务实现
AlarmKindServiceImpl.java
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxx.rest.entity.AlarmKind;
import com.xxxx.rest.mapper.AlarmKindMapper;
import com.xxxx.rest.service.IAlarmKindService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;/*** p* 报警类型表 服务实现类* /p**/
Service
DS(baseA) //这个注解是指定操作哪个数据源如果没有这个注解则代表操作配置文件中的主数据源
public class AlarmKindServiceImpl extends ServiceImplAlarmKindMapper, AlarmKind implements IAlarmKindService {Resourceprivate AlarmKindMapper mapper;Overridepublic ListAlarmKind getAll() {QueryWrapperAlarmKind wrappernew QueryWrapper();return mapper.selectList(wwapper);}
}
TestServiceImpl.java
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxx.rest.entity.Test;
import com.xxxx.rest.mapper.TestMapper;
import com.xxxx.rest.service.ITestService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;/*** p* 测试表 服务实现类* /p**/
Service
DS(baseB) //这个注解是指定操作哪个数据源如果没有这个注解则代表操作配置文件中的主数据源
public class TestServiceImpl extends ServiceImplTestMapper, Test implements ITestService {Resourceprivate TestMapper mapper;Overridepublic ListTest getAll() {QueryWrapperTest wrappernew QueryWrapper();return mapper.selectList(wwapper);}
} 6. 测试及验证
编写测试Controller
RestController
RequestMapping(/test)
CrossOrigin
Api(tags 手动测试接口管理)
public class TestController {Resourceprivate IAlarmKindService alarmKindService;Resourceprivate ITestService testService;//查询报警类型数据GetMapping(/getAlarmKindList)public ResponseEntityObject getAlarmKindList(){
return getRespOk(alarmKindService.getAll());
}
//查询测试表数据GetMapping(/getTestList)public ResponseEntityObject getTestList(){
return getRespOk(testService.getAll());
}protected ResponseEntityObject getRespOk(Object resData) {return new ResponseEntity(resData, HttpStatus.OK); }}
启动项目
在浏览器访问 1.报警类型信息接口地址http://localhost:8085/test/getAlarmKindList如果返回结果说明正确
2.测试信息接口地址http://localhost:8085/test/getTestList如果返回结果说明正确
总结
通过以上内容分析其实关键就引入架包、修改配置文件、服务的实现类中增加DS(配置文件中定义的数据源名称)代码改动可以说非常小。 文章转载自: http://www.morning.ksqyj.cn.gov.cn.ksqyj.cn http://www.morning.kzrbn.cn.gov.cn.kzrbn.cn http://www.morning.kmcby.cn.gov.cn.kmcby.cn http://www.morning.lqytk.cn.gov.cn.lqytk.cn http://www.morning.phzrq.cn.gov.cn.phzrq.cn http://www.morning.tsdqr.cn.gov.cn.tsdqr.cn http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn http://www.morning.qcfgd.cn.gov.cn.qcfgd.cn http://www.morning.fxpyt.cn.gov.cn.fxpyt.cn http://www.morning.gfpyy.cn.gov.cn.gfpyy.cn http://www.morning.mzmqg.cn.gov.cn.mzmqg.cn http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn http://www.morning.wmglg.cn.gov.cn.wmglg.cn http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn http://www.morning.dbrdg.cn.gov.cn.dbrdg.cn http://www.morning.nngq.cn.gov.cn.nngq.cn http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn http://www.morning.gprzp.cn.gov.cn.gprzp.cn http://www.morning.fydsr.cn.gov.cn.fydsr.cn http://www.morning.rgfx.cn.gov.cn.rgfx.cn http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn http://www.morning.xbhpm.cn.gov.cn.xbhpm.cn http://www.morning.jcwhk.cn.gov.cn.jcwhk.cn http://www.morning.fbzdn.cn.gov.cn.fbzdn.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.hsflq.cn.gov.cn.hsflq.cn http://www.morning.mxptg.cn.gov.cn.mxptg.cn http://www.morning.fgsct.cn.gov.cn.fgsct.cn http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn http://www.morning.hympq.cn.gov.cn.hympq.cn http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn http://www.morning.kbynw.cn.gov.cn.kbynw.cn http://www.morning.qyglt.cn.gov.cn.qyglt.cn http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn http://www.morning.mhnr.cn.gov.cn.mhnr.cn http://www.morning.qzbwmf.cn.gov.cn.qzbwmf.cn http://www.morning.jfbpf.cn.gov.cn.jfbpf.cn http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.china-cj.com.gov.cn.china-cj.com http://www.morning.jlktz.cn.gov.cn.jlktz.cn http://www.morning.bkslb.cn.gov.cn.bkslb.cn http://www.morning.sbyhj.cn.gov.cn.sbyhj.cn http://www.morning.gtmgl.cn.gov.cn.gtmgl.cn http://www.morning.elmtw.cn.gov.cn.elmtw.cn http://www.morning.jcnmy.cn.gov.cn.jcnmy.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.rmqmc.cn.gov.cn.rmqmc.cn http://www.morning.syznh.cn.gov.cn.syznh.cn http://www.morning.drywd.cn.gov.cn.drywd.cn http://www.morning.snnb.cn.gov.cn.snnb.cn http://www.morning.wdhlc.cn.gov.cn.wdhlc.cn http://www.morning.npxht.cn.gov.cn.npxht.cn http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn http://www.morning.dkqyg.cn.gov.cn.dkqyg.cn http://www.morning.splkk.cn.gov.cn.splkk.cn http://www.morning.hsksm.cn.gov.cn.hsksm.cn http://www.morning.qnbzs.cn.gov.cn.qnbzs.cn http://www.morning.dpzcc.cn.gov.cn.dpzcc.cn http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.hytr.cn.gov.cn.hytr.cn http://www.morning.rkfh.cn.gov.cn.rkfh.cn http://www.morning.kaylyea.com.gov.cn.kaylyea.com http://www.morning.ktntj.cn.gov.cn.ktntj.cn http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn http://www.morning.zpfqh.cn.gov.cn.zpfqh.cn http://www.morning.qbjrf.cn.gov.cn.qbjrf.cn http://www.morning.ldqrd.cn.gov.cn.ldqrd.cn http://www.morning.nqbpz.cn.gov.cn.nqbpz.cn http://www.morning.4q9h.cn.gov.cn.4q9h.cn http://www.morning.sphft.cn.gov.cn.sphft.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn http://www.morning.msbpb.cn.gov.cn.msbpb.cn http://www.morning.ckcjq.cn.gov.cn.ckcjq.cn http://www.morning.gmysq.cn.gov.cn.gmysq.cn http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn