简单几步使用Spring整合MyBatis(含配置多数据源和多Mapper XML文件路径)

1. 逻辑梳理

我们先分析下使用者视角:代码中使用Mapper接口对数据进行数据库操作,具体的SQL在Mapper xml文件中。可以看到Mapper接口Mapper xml是有一定的关联关系的,我们的配置思路也是如此,就是把两者绑定起来即可。

  1. 首先我们需要先定义一个dataSource,用于连接数据库;
  2. 其次我们需要定义一个sessionFactory来管理dataSourceMapper文件
  3. 最后我们需要使用MapperScanner把Mapper文件和Mapper接口关联起来。

经过以上3个步骤,我们就使用Spring把Mybatis整合完成了。 根据以上思路,来具体操作下

2. 开始配置

2.1 数据源

这个比较简单,就是一个普通的bean,配置上账号密码数据库链接就好了。数据库的个数想配置几个就配置几个,下面是两个示例。

    @Bean("db1")public DruidDataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/jsk?characterEncoding=utf-8&useUnicode=true");dataSource.setUsername("root");dataSource.setPassword("root");return dataSource;}@Bean("db2")public DruidDataSource adbDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://xxx:3306/my_xxx?characterEncoding=utf-8&useUnicode=true");dataSource.setPassword("root");dataSource.setUsername("root");return dataSource;}

2.2 配置session工厂(加载xml文件)

这个配置也非常简单,只需要配置要引用的datasourcemapper文件的位置

    @Beanpublic SqlSessionFactory adbSqlSessionFactory() throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();// 1.这里按需使用你2.1配置的数据源// 这里多解释一下,adbDataSource()这个方法上面有@Bean注解,多次调用不会重复数据源sessionFactory.setDataSource(adbDataSource());// 2.mapper xml文件位置Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:com/kaka/jtest/springboot/biz/mapper/*.xml");sessionFactory.setMapperLocations(resources);return sessionFactory.getObject();}

如果你的mapper文件有多个路径,配置改为下面这样

    @Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();// 1. 这一步不变,正常引用datasource即可sessionFactory.setDataSource(dataSource());// 2. 重要的是这里,使用PathMatchingResourcePatternResolver来读取多个路径中的xml文件即可ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();List<Resource> resources = new ArrayList<Resource>();try {// 每个表达式,解析出一批mapper资源// 注意:xml的文件目录,idea的显示方式是com.kaka.jtest...(有的文件名就是“.”,就不能使用“/”了)Resource[] mappers1 = resourceResolver.getResources("classpath:com/kaka/jtest/springboot/biz/mapper/mysql/*.xml");resources.addAll(Arrays.asList(mappers1));Resource[] mappers2 = resourceResolver.getResources("classpath:com/kaka/jtest/springboot/biz/mapper/adb/*.xml");resources.addAll(Arrays.asList(mappers2));} catch (IOException e) {// ignore}// 最后使用setMapperLocations指定扫描到的mapper xml文件位置sessionFactory.setMapperLocations(resources.toArray(new Resource[0]));return sessionFactory.getObject();}

2.3 配置MapperScanner(扫描Mapper接口,并与xml建立连接)

前面两个步骤配置好了数据源xml文件,此时就可以扫描Mapper接口了。这个配置只需要指定sessionFactoryMapper接口的路径即可。
常用的配置方式有两种,下面分别示例一下。

2.3.1 注解方式

// 如果存在多个包,可使用逗号分割
@MapperScan(basePackages = "com.kaka.jtest.springboot.biz.mapper",sqlSessionFactoryRef = "sqlSessionFactory")

2.3.2 java配置方式

    @Beanpublic MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();// 1. 指定Mapper接口包名(路径若有多个,使用逗号分隔)mapperScannerConfigurer.setBasePackage("com.kaka.jtest.springboot.biz.mapper");// 2. 指定工厂的bean名称mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");return mapperScannerConfigurer;}

3. 配置多数据源

看完以上步骤,应该就了解spring整合Mybatis的大致思路了,这个配置也就比较明了了。这里简单些一下。

3.1 配置多个datasource

    @Bean("db1")public DruidDataSource dataSource() {// 省略具体配置...return dataSource;}@Bean("db2")public DruidDataSource dataSource() {// 省略具体配置...return dataSource;}

3.2 配置多个sessionFactory

这里不同的sessionFactory使用不同的数据源,扫描不同的xml配置文件。

    @Beanpublic SqlSessionFactory sqlSessionFactory1(@Qualifier("db1") DataSource dataSource) throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();// 1.按需使用配置的数据源sessionFactory.setDataSource(dataSource);// 2.数据源1的mapper xml文件位置Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:com/kaka/mapper/db1/*.xml");sessionFactory.setMapperLocations(resources);return sessionFactory.getObject();}@Beanpublic SqlSessionFactory sqlSessionFactory2(@Qualifier("db2") DataSource dataSource) throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();// 1.按需使用配置的数据源sessionFactory.setDataSource(dataSource);// 2.数据源2的mapper xml文件位置Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:com/kaka/mapper/db2/*.xml");sessionFactory.setMapperLocations(resources);return sessionFactory.getObject();}

2.4.3 配置多个MapperScanner

    @Beanpublic MapperScannerConfigurer mapperScannerConfigurer1() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();// 1. 指定Mapper接口包名(路径若有多个,使用逗号分隔)mapperScannerConfigurer.setBasePackage("com.kaka.jtest.springboot.biz.mapper");// 2. 指定工厂的bean名称mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory1");return mapperScannerConfigurer;}@Beanpublic MapperScannerConfigurer mapperScannerConfigurer2() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();// 1. 指定Mapper接口包名(路径若有多个,使用逗号分隔)mapperScannerConfigurer.setBasePackage("com.kaka.jtest.springboot.biz.mapper");// 2. 指定工厂的bean名称mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory2");return mapperScannerConfigurer;}

至此多数据源配置完成!

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

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

相关文章

Idea live template

1:打印入参日志的配置 log.info("$methodName$ 方法入参: $argsLog$",$argsJson$); methodName:methodName() argsLog:groovyScript( "def result; def params\"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList(); for(i 0; i <…

【负载均衡oj】(七)ojserver

一.目的 负责负载均衡&#xff0c;获取网站首页&#xff0c;通过网络罗调用编译并运行并提供结果给用户。根据用户的操作提供不同的功能。采用mvc结构。使用 ctemplate文字模板做数据渲染 m在这里指的是和数据的交互&#xff0c;可以用文件或者sql交互。在使用文件的情况下&a…

CISP-DSG和CDGA该如何选择?

同样是数据治理&#xff0c;CDGA证书和CISP-DSG证书&#xff0c;它们之间有什么区别和各自的优势呢❓ 1️⃣CISP-DSG CISP-DSG证书聚焦于信息an全领域&#xff0c;特别guan注数据an全治理。 国际知名zi询机构Gartner用“风暴之眼”比喻“数据an全治理”&#xff0c;&#x1f44…

hyperf 基础合集

目前合计不包括数据库。 hyperf 一、搭建 -CSDN博客hyperf 二、路由 -CSDN博客hyperf 三、中间件 -CSDN博客hyperf 四、控制器 -CSDN博客hypef 五、请求及响应 -CSDN博客hyperf 六、异常处理 -CSDN博客hypef 七、配置文件的使用_-CSDN博客hypef 八、缓存 -CSDN博客hypef 九、日…

【机器学习】线性回归·可运行源码

一&#xff0c;基础函数库 import numpy as np from utils.features import prepare_for_trainingclass LinearRegression:def __init__(self, data, labels, polynomial_degree0, sinusoid_degree0, normalize_dataTrue):"""1.对数据进行预处理操作2.先得到所…

ssm基于java web 的QQ村旅游网站的设计+vue论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统旅游信息管理难度大&#xff0c;容错率低&#xff0c;管理…

el-select下拉框 change事件返回该项所有数据

主要代码 value-key <template><div><el-selectv-model"value"value-key"label"placeholder"请选择"change"selectChange"><el-optionv-for"item in options":key"item.label":label"…

云计算历年题整理

第一大题 第一大题计算 给出计算连接到EC2节点的EBS的高可用性(HA)的数学公式&#xff0c;如场景中所述&#xff1b;计算EC2节点上的EBS的高可用性(HA)&#xff1b;场景中80%的AWS EC2节点用于并行处理&#xff0c;总共有100个虚拟中央处理单元(vCPUs)用于处理数据&#xff0…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)在EventLoop的任务队列中添加新任务

任务队列是一个链表&#xff0c;每个节点包含channel类型、文件描述符和操作类型。在添加节点时&#xff0c;需要考虑线程同步&#xff0c;并确保节点被正确地添加到链表中。节点的操作可以写到另一个函数中&#xff0c;以便于程序的维护。在添加任务节点时&#xff0c;需要加互…

迅为RK3588开发板使用 FFMpeg 进行推流

Debian/Ubuntu 系统使用以下命令安装 FFMpeg &#xff0c;如下图所示&#xff1a; apt-get install ffmpeg 使用 ifconfig 查看开发板 ip 为 192.168.1.245 如下图所示&#xff1a; 使用 FFMpeg 推流一个 mp4 视频进行测试&#xff0c;作者将测试视频 test.mp4 放在了根目录下…

轻松入门:Anaconda 在 PyCharm 中的配置与应用指南

1 Anaconda Anaconda 和 Conda 是两个相关但不同的概念。 Anaconda 是一个免费且开源的发行版&#xff0c;包含了 Python 和 R 语言的数据科学和机器学习相关的众多包&#xff0c;它包括 Conda、Python、Jupyter Notebook 等多个科学计算和数据科学中常用的应用。 Anaconda 通过…

2022年山东省职业院校技能大赛高职组信息安全管理与评估—开发测试服务器解析

任务5:开发测试服务器 目录 任务5:开发测试服务器 解题方法:

外包干了4个月,技术退步明显了...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四…

K8S陈述式资源管理(1)

命令行: kubectl命令行工具 优点: 90%以上的场景都可以满足对资源的增&#xff0c;删&#xff0c;查比较方便&#xff0c;对改不是很友好 缺点:命令比较冗长&#xff0c;复杂&#xff0c;难记声明式 声明式&#xff1a;K8S当中的yaml文件来实现资源管理 GUI&#xff1a;图形…

第九节HarmonyOS 常用基础组件7-RichText

1、描述 富文本组件&#xff0c;解析并显示HTML格式文本。 富文本&#xff08;RichText&#xff09;是一种特殊的文本格式&#xff0c;它比普通文本更加丰富多彩。富文本可以包含各种字体、颜色、大小、图像、链接、表格、视频等元素&#xff0c;使文本更加生动、有趣。 2、…

【elastic search】下载安装、使用教程

目录 1.下载安装 1.1.ES&Kibana 1.2.分词器 2.操作 2.1.索引操作 2.1.1.索引的新增、删除、查找 2.1.2.数据类型 2.1.3.结构化 2.2.文档操作 2.2.1.文档的增、删、改 2.2.2.文档的查询 2.2.3.聚合操作 1.下载安装 1.1.ES&Kibana Kibana是一个开源的数据可…

WPF中MVVM手动实现PropertyChanged和RelayCommand

背景&#xff1a;PropertyChanged和Command总是没有记住怎么写 PropertyChanged&#xff1a; public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName null) {PropertyChanged?.In…

vue3中Element Plus全局组件配置中文的两种方案

Element是一款用于制作页面样式&#xff0c;设计页面结构的框架。相比于其他的几个框架&#xff0c;这个框架设计的更为人性化&#xff0c;对企业级框架VUE的集成也很高。 Element Plus 组件 默认 使用英语&#xff0c;如果你希望使用其他语言&#xff0c;你可以参考下面的两种…

OpenHarmony如何隐藏系统状态栏、导航栏

前言 OpenHarmony源码版本&#xff1a;4.0release 开发板&#xff1a;DAYU / rk3568 一、通过setWindowSystemBarEnable方法设置 当我们应用的Alility继承的是UIAbility时&#xff0c;可以onWindowStageCreate(windowStage: window.WindowStage)方法中实现如下操作&#xf…

【AI】搭建Windows Linux子系统(WSL2)CUDA环境

0.准备工作 Windows本机安装CUDA Driver 首先去下载页面下载驱动文件 点击Get CUDA Driver进入下载页面&#xff0c;我看下载页面跟普通驱动下载页面相同&#xff0c;感觉应该不是单独的驱动&#xff0c;只要之前显卡已经安装好了CUDA的驱动&#xff0c;就可以先省略这一步。…