Java基础之《mybatis-plus多数据源配置》

1、pom文件引入依赖
引入MyBatis-Plus之后请不要再次引入MyBatis以及mybatis-spring-boot-starter和MyBatis-Spring,以避免因版本差异导致的问题

		<!--引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 mybatis-spring-boot-starter和MyBatis-Spring,以避免因版本差异导致的问题--><!--<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${spring-boot.mybatis}</version></dependency>--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId><version>${mybatis-plus.version}</version></dependency>

2、DataSourceConfig.java
数据源

package cn.xxx.coupon.pay.config;import javax.sql.DataSource;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;@Configuration
public class DataSourceConfig {@Primary@ConfigurationProperties(prefix = "spring.datasource.druid.one")@Bean(name = "dsOne")public DataSource dsOne() {return DruidDataSourceBuilder.create().build();}@ConfigurationProperties(prefix = "spring.datasource.druid.two")@Bean(name = "dsTwo")public DataSource dsTwo() {return DruidDataSourceBuilder.create().build();}}

3、MybatisPlusConfigOne.java
配置mybatis-plus第一个数据库的SqlSessionFactory和SqlSessionTemplate

package cn.xxx.coupon.pay.config;import javax.sql.DataSource;import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;@Configuration
@MapperScan(basePackages = "cn.xxx.coupon.pay.mapper.dsOne", sqlSessionFactoryRef = "dsOneSqlSessionFactory", sqlSessionTemplateRef = "dsOneSqlSessionTemplate")
public class MybatisPlusConfigOne {@Bean(name = "dsOneSqlSessionFactory")public SqlSessionFactory dsOneSqlSessionFactory(@Qualifier("dsOne") DataSource datasource) throws Exception {MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();// 设置mybatis的xml所在位置// bean.setMapperLocations(new// PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db2/*.xml"));// configuration配置bean// MybatisConfiguration configuration = new MybatisConfiguration();// configuration.setMapUnderscoreToCamelCase(true); //数据库字段下划线到Java的驼峰的映射,默认true// configuration.setCacheEnabled(true); //是否支持mybatis的二级缓存,默认true// 配置打印sql语句// configuration.setLogImpl(StdOutImpl.class);// 添加自定义配置// bean.setConfiguration(configuration);// 设置datasourcebean.setDataSource(datasource);// 插件对象MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();// 分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));bean.setPlugins(mybatisPlusInterceptor);return bean.getObject();}@Bean(name = "dsOneSqlSessionTemplate")public SqlSessionTemplate dsOneSqlSessionTemplate(@Qualifier("dsOneSqlSessionFactory") SqlSessionFactory sessionFactory) {return new SqlSessionTemplate(sessionFactory);}
}

4、MybatisPlusConfigTwo.java
配置mybatis-plus第二个数据库的SqlSessionFactory和SqlSessionTemplate

package cn.xxx.coupon.pay.config;import javax.sql.DataSource;import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;@Configuration
@MapperScan(basePackages = "cn.xxx.coupon.pay.mapper.dsTwo", sqlSessionFactoryRef = "dsTwoSqlSessionFactory", sqlSessionTemplateRef = "dsTwoSqlSessionTemplate")
public class MybatisPlusConfigTwo {@Bean(name = "dsTwoSqlSessionFactory")public SqlSessionFactory dsTwoSqlSessionFactory(@Qualifier("dsTwo") DataSource datasource) throws Exception {MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();// 设置mybatis的xml所在位置// bean.setMapperLocations(new// PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db2/*.xml"));// configuration配置bean// MybatisConfiguration configuration = new MybatisConfiguration();// configuration.setMapUnderscoreToCamelCase(true); //数据库字段下划线到Java的驼峰的映射,默认true// configuration.setCacheEnabled(true); //是否支持mybatis的二级缓存,默认true// 配置打印sql语句// configuration.setLogImpl(StdOutImpl.class);// 添加自定义配置// bean.setConfiguration(configuration);// 设置datasourcebean.setDataSource(datasource);// 插件对象MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();// 分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));bean.setPlugins(mybatisPlusInterceptor);return bean.getObject();}@Bean(name = "dsTwoSqlSessionTemplate")public SqlSessionTemplate dsTwoSqlSessionTemplate(@Qualifier("dsTwoSqlSessionFactory") SqlSessionFactory sessionFactory) {return new SqlSessionTemplate(sessionFactory);}
}

5、@MapperScan和dao层@Mapper二选一

6、定义接口类BranchInfoMapper.java

package cn.xxx.coupon.pay.mapper.dsTwo;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import cn.xxx.coupon.pay.dto.commodity.BranchInfo;public interface BranchInfoMapper extends BaseMapper<BranchInfo> {}

7、测试代码MybatisPlusTest.java

package cn.xxx.coupon.pay.test.coupon;import java.util.List;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import cn.xxx.coupon.pay.PreCouponPayApplication;
import cn.xxx.coupon.pay.dto.commodity.BranchInfo;
import cn.xxx.coupon.pay.mapper.dsTwo.BranchInfoMapper;@SpringBootTest(classes = PreCouponPayApplication.class)
public class MybatisPlusTest {@Autowiredprivate BranchInfoMapper branchInfoMapper;@Testpublic void testSelectList() {System.out.println(("----- selectAll method test ------"));List<BranchInfo> branchInfos = branchInfoMapper.selectList(null);branchInfos.forEach(System.out::println);}@Testpublic void testSelectOne() {System.out.println(("----- selectOne method test ------"));QueryWrapper<BranchInfo> queryWrapper = new QueryWrapper<>();queryWrapper.eq("storecode", "012999");queryWrapper.eq("issue_id", "80501");BranchInfo branchInfo = branchInfoMapper.selectOne(queryWrapper);System.out.println(branchInfo);}@Testpublic void testSelectPage() {QueryWrapper<BranchInfo> queryWrapper = new QueryWrapper<>();Page<BranchInfo> page = new Page<>(2, 30);Page<BranchInfo> branchInfoPage = branchInfoMapper.selectPage(page, queryWrapper);System.out.println("当前页:" + branchInfoPage.getCurrent());System.out.println("每页记录数:" + branchInfoPage.getSize());System.out.println("总记录数:" + branchInfoPage.getTotal());System.out.println("总页数:" + branchInfoPage.getPages());List<BranchInfo> branchInfoList = branchInfoPage.getRecords();branchInfoList.forEach(System.out::println);}
}

8、问题1:启动日志会打印两遍mybatis-plus的logo

 _ _   |_  _ _|_. ___ _ |    _ 
| | |\/|_)(_| | |_\  |_)||_|_\ /               |         3.5.5 _ _   |_  _ _|_. ___ _ |    _ 
| | |\/|_)(_| | |_\  |_)||_|_\ /               |         3.5.5 

9、问题2:eclipse里mybatis-plus自动提示显示中文乱码
Window -> Preferences -> General -> Workspace,找到Text file encoding,设置为UTF-8,保存重启eclipse

10、小结mybatis-plus使用方式
方式一:
自定义xxxMapper接口并继承BaseMapper接口,提供默认方法

方式二:
用IService接口,提供默认方法
(1)自定义xxxService接口并继承IService
(2)自定义接口实现类xxxServiceImpl,并继承ServiceImpl,并实现xxxService接口
IBranchInfoService.java

package cn.xxx.coupon.pay.mapper.service;import com.baomidou.mybatisplus.extension.service.IService;import cn.xxx.coupon.pay.dto.commodity.BranchInfo;/*** 在自己定义的service接口当中继承IService接口*/
public interface IBranchInfoService extends IService<BranchInfo> {}

IBranchInfoServiceImpl.java

package cn.xxx.coupon.pay.mapper.service.Impl;import org.springframework.stereotype.Service;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import cn.xxx.coupon.pay.dto.commodity.BranchInfo;
import cn.xxx.coupon.pay.mapper.dsTwo.BranchInfoMapper;
import cn.xxx.coupon.pay.mapper.service.IBranchInfoService;/*** 在接口实现impl当中继承ServiceImpl,实现自己的接口*/
@Service
public class IBranchInfoServiceImpl extends ServiceImpl<BranchInfoMapper, BranchInfo> implements IBranchInfoService {}

方式三:
复杂sql在mapper中用@Select、@Update、@Insert、@Delete自定义sql语句
BranchInfoMapper.java

package cn.xxx.coupon.pay.mapper.dsTwo;import org.apache.ibatis.annotations.Select;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import cn.xxx.coupon.pay.dto.commodity.BranchInfo;public interface BranchInfoMapper extends BaseMapper<BranchInfo> {@Select("select storecode, locname, loctype, supzone, supzonename, afbmerchantid, issue_id from t_afb_branchinfo where storecode = #{storeCode} and issue_id = #{issueId}")public BranchInfo selectBranchInfoByStoreCode(String storeCode, String issueId);
}

方式四:
复杂sql在mapper中使用@SelectProvider、@UpdateProvider、@InsertProvider、@DeleteProvider注解结合对应的Provider类,以及动态sql注解来实现动态生成sql语句

方式五:
是方式二和方式三的结合,在自定义接口实现类xxxServiceImpl调用mapper类里写好的方法。外部只调用service类不调用mapper类

11、测试类

package cn.xxx.coupon.pay.test.coupon;import java.util.List;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import cn.xxx.coupon.pay.PreCouponPayApplication;
import cn.xxx.coupon.pay.dto.commodity.BranchInfo;
import cn.xxx.coupon.pay.mapper.dsTwo.BranchInfoMapper;
import cn.xxx.coupon.pay.mapper.service.IBranchInfoService;@SpringBootTest(classes = PreCouponPayApplication.class)
public class MybatisPlusTest {@Autowiredprivate BranchInfoMapper branchInfoMapper;@Autowiredprivate IBranchInfoService iBranchInfoService;@Testpublic void testSelectList() {System.out.println(("----- selectAll method test ------"));List<BranchInfo> branchInfos = branchInfoMapper.selectList(null);branchInfos.forEach(System.out::println);}/*** >:gt* =:eq* <:lt* >=:ge* <=:le*/@Testpublic void testSelectOne() {System.out.println(("----- selectOne method test ------"));QueryWrapper<BranchInfo> queryWrapper = new QueryWrapper<>();queryWrapper.eq("storecode", "012999");queryWrapper.eq("issue_id", "80501");BranchInfo branchInfo = branchInfoMapper.selectOne(queryWrapper);System.out.println(branchInfo);}@Testpublic void testSelectPage() {QueryWrapper<BranchInfo> queryWrapper = new QueryWrapper<>();Page<BranchInfo> page = new Page<>(2, 30);Page<BranchInfo> branchInfoPage = branchInfoMapper.selectPage(page, queryWrapper);System.out.println("当前页:" + branchInfoPage.getCurrent());System.out.println("每页记录数:" + branchInfoPage.getSize());System.out.println("总记录数:" + branchInfoPage.getTotal());System.out.println("总页数:" + branchInfoPage.getPages());List<BranchInfo> branchInfoList = branchInfoPage.getRecords();branchInfoList.forEach(System.out::println);}@Testpublic void testSelectList2() {System.out.println(("----- selectAll method test2 ------"));List<BranchInfo> branchInfos = iBranchInfoService.list();branchInfos.forEach(System.out::println);}@Testpublic void testSelectOne2() {System.out.println(("----- selectOne method test2 ------"));BranchInfo branchInfo = branchInfoMapper.selectBranchInfoByStoreCode("012999", "80501");System.out.println(branchInfo);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】STL_ string的使用 + 模拟实现

前言 目录 1. STL简介&#xff08;1&#xff09;什么是STL&#xff08;2&#xff09;STL的版本&#xff08;3&#xff09;STL的六大组件 2. string的使用2.1 npos2.2 遍历字符串string的每一个字符2.3 迭代器&#xff1a;2.4 string的内存管理2.5 string模拟实现2.5.1 深拷贝&a…

Redis(主从复制搭建)

文章目录 1.主从复制示意图2.搭建一主多从1.搭建规划三台机器&#xff08;一主二从&#xff09;2.将两台从Redis服务都按照同样的方式配置&#xff08;可以理解为Redis初始化&#xff09;1.安装Redis1.yum安装gcc2.查看gcc版本3.将redis6.2.6上传到/opt目录下4.进入/opt目录下然…

iptables---防火墙

防火墙介绍 防火墙的作用可以理解为是一堵墙&#xff0c;是一个门&#xff0c;用于保护服务器安全的。 防火墙可以保护服务器的安全&#xff0c;还可以定义各种流量匹配的规则。 防火墙的作用 防火墙具有对服务器很好的保护作用&#xff0c;入侵者必须穿透防火墙的安全防护…

Leetcode—1991. 找到数组的中间位置【简单】

2024每日刷题&#xff08;129&#xff09; Leetcode—1991. 找到数组的中间位置 实现代码 class Solution { public:int findMiddleIndex(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);int prefix 0;for(int i 0; i < nums.size();…

考情分析 | 2025年西北工业大学计算机考研考情分析!

西北工业简称西工大&#xff08;英文缩写NPU&#xff09;&#xff0c;大学坐落于古都西安&#xff0c;是我国唯一一所以同时发展航空、航天、航海工程教育和科学研究为特色&#xff0c;以工理为主&#xff0c;管、文、经、法协调发展的研究型、多科性和开放式的科学技术大学。十…

怎么制作好玩的gif?试试这个工具轻松制作

视频之所以受大众的喜爱是因为有声音、画面的搭配&#xff0c;让观者深入其中体验感会更强。但是视频的体积较大、时长也比较长&#xff0c;给我们的传播和保存造成了一定的影响。那么&#xff0c;我们可以将视频制作成gif图片来使用&#xff0c;不需要下载软件&#xff0c;使用…

最大数字——蓝桥杯十三届2022国赛大学B组真题

问题分析 这道题属于贪心加回溯。所有操作如果能使得高位的数字变大必定优先用在高位&#xff0c;因为对高位的影响永远大于对低位的影响。然后我们再来分析一下&#xff0c;如何使用这两种操作&#xff1f;对于加操作&#xff0c;如果能使这一位的数字加到9则变成9&#xff0…

UE5自动生成地形一:地形制作

UE5自动生成地形一&#xff1a;地形制作 常规地形制作地形编辑器地形管理添加植被手动修改部分地形的植被 置换贴图全局一致纹理制作地貌裸露岩石地形实例 常规地形制作 地形制作入门 地形导入部分 选择模式&#xff1a;地形模式。选择地形子菜单&#xff1a;管理->导入 …

STC8增强型单片机开发——C51版本Keil环境搭建

一、目标 了解C51版本Keil开发环境的概念和用途掌握C51版本Keil环境的安装和配置方法熟悉C51版本Keil开发环境的使用 二、准备工作 Windows 操作系统Keil C51 安装包&#xff08;可以从Keil官网下载&#xff09;一款8051单片机开发板 三、搭建流程 环境搭建的基本流程&#xf…

思维导图网页版哪个好?2024年值得推荐的8个在线思维导图软件!

思维导图如今已成为一种常用的工具&#xff0c;帮助我们清晰地组织和整理信息。随着科技的发展&#xff0c;思维导图的产品形态也经过多轮迭代&#xff0c;从最初的本地客户端过渡到基于云的 Web 端&#xff0c;各类网页版思维导图软件应运而生&#xff0c;它们方便快捷&#x…

【Linux】gcc/g++的使用

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中gcc/g使用的相关内容。 如果看到最后您觉得这篇文章写得不错…

【Linux】CAN根据时钟频率、波特率计算采样点详解

1、采样点知识回顾 参考博客:【CAN】知识点:帧类型、数据帧结构、传输速率、位时间、采样点 CAN 采样点是指在一个数据位的传输周期内,接收器实际采样数据的时间点。这个时间点是以百分比来表示的,它决定了在数据位的传输周期中,何时读取数据位的值。 正确设置采样点对…

js api part3

环境对象 环境对象&#xff1a; 指的是函数内部特殊的 变量 this &#xff0c; 它代表着当前函数运行时所处的环境 作用&#xff1a; 弄清楚this的指向&#xff0c;可以让我们代码更简洁 函数的调用方式不同&#xff0c;this 指代的对象也不同 【谁调用&#xff0c; this 就是…

Qt | QLineEdit 类(行编辑器)

01、上节回顾 Qt | QComboBox(组合框)02、QLineEdit 1、QLineEdit 类是 QWidget 类的直接子类,该类实现了一个单行的 输入部件,即行编辑器,见右图 2、验证器(QValidator 类)和输入掩码简介:主要作用是验证用户输入的字符是否符合验证器 的要求,即限制对用户的输入,比…

论文阅读_使用有向无环图实现流程工程_AgentKit

英文名称: AgentKit: Flow Engineering with Graphs, not Coding 中文名称: AgentKit&#xff1a;使用图而非编码进行流程工程 链接: https://arxiv.org/pdf/2404.11483.pdf 代码: https://github.com/holmeswww/AgentKit 作者: Yue Wu, Yewen Fan, So Yeon Min, Shrimai Prabh…

Julia 语言环境安装与使用

1、Julia 语言环境安装 安装教程&#xff1a;https://www.runoob.com/julia/julia-environment.html Julia 安装包下载地址为&#xff1a;https://julialang.org/downloads/。 安装步骤&#xff1a;注意&#xff08;勾选 Add Julia To PATH 自动将 Julia 添加到环境变量&…

C语言 函数的嵌套与递归 调用

本文 我们来说函数的嵌套调用和递归调用 在很多大型项目中 我们肯定不可能将所有逻辑都写在一个函数中 肯定要按功能拆解成多个特定的功能函数 函数并不允许嵌套调用&#xff0c;但是 允许在逻辑代码中嵌套调用 所谓函数嵌套调用 就是在一个函数中调用另一个函数&#xff0c;而…

【计算机毕业设计】基于SSM++jsp的菜匣子优选系统【源码+lw+部署文档+讲解】

目录 第一章 绪 论 第二章 关键技术的研究 2.1 JSP技术介绍 2.2 JAVA简介 2.3 ECLIPSE 开发环境 2.4 Tomcat服务器 2.5 MySQL数据库 第三章 系统分析 3.1 系统设计目标 3.2 系统可行性分析 3.3 系统功能分析和描述 3.4系统UML用例分析 3.4.1管理员用例 3.4.2用户用例 3.5系统流…

C语言 计数控制循环

今天 我们来说 计数控制的循环 对于循环次数 我们已知的循环 我们称之为 计数控制的循环 这种情况 我们一般选择 for来实现 更为方便 先看一个案例 求 1 到 N 的累加合 我们代码可以这样写 #define _CRT_SECURE_NO_WARNINGS//禁用安全函数警告 #pragma warning(disable:6031…

信创基础硬件之芯片

信创基础硬件之芯片 文章目录 信创基础硬件之芯片服务器服务器的定义服务器的功能服务器的构成服务器的性能 处理器&#xff08;CPU&#xff09;CPUGPUDPU CPU的分类按CPU指令集架构分类按CPU体系架构分类 CPU产业链六大国产CPU公司详解海光飞腾鲲鹏兆芯龙芯申威 国产CPU对比从…