强烈推荐:只要一行注解,使用mybatis的多数据源,无需要任何配置。

github地址:https://gitee.com/xiaojiezhu/mybadis-starter.git

只需要一行注解,就可以配置mybadis的多数据源

这是一个基于spring boot 的mybadis的starter

支持多个数据源

使用方法很简单,先定义一些配置文件,放到application.yml中

mysql:server:saas:url: "jdbc:mysql://localhost:3306/saas?useUnicode=true&characterEncoding=utf8"username: rootpassword: 123driverClassName: com.mysql.jdbc.DriverinitialSize: 1  #初始化大小minIdle: 1  #空闲连接池的大小maxActive: 50 #最大激活数量saas2:url: "jdbc:mysql://localhost:3306/saas2?useUnicode=true&characterEncoding=utf8"username: rootpassword: 123driverClassName: com.mysql.jdbc.DriverinitialSize: 1  #初始化大小minIdle: 1  #空闲连接池的大小maxActive: 50 #最大激活数量

main方法

@MyBadisLoader({"saas = com.llc.admin.web.dao.saas = classpath:mapper/*xml" , "saas2 = com.llc.admin.web.dao.saas2 = classpath:mapper/*.xml,classpath:mapper/user/*.xml"})
@SpringBootApplication
public class WebApplication {public static void main(String[] args) {SpringApplication.run(WebApplication.class,args);}
}

上面的注解中 saas是上方配置文件,数据源的名称,后面是扫描的接口包名,可以用逗号分隔传入多个,再后面是扫描xml的配置文件路径,也支持多个 注解中接收的是一个数组,所以支持多个数据源,除此不需要任何代码就可以使用

需要的包依赖 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.xiaojiezhu.mybadis.starter</groupId>
<artifactId>mybadis-starter</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.4.7.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.27</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
</dependencies>
</project>

详细使用看码云上代码

纯代码配置的spring boot mybadis多数据源的配置

github地址:https://gitee.com/xiaojiezhu/spring-boot-ds-mybadis

需要的包依赖 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>datasource-mybatis</groupId><artifactId>ds-mybatis</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><parent><groupId>com.framework.sass.service</groupId><artifactId>service-root</artifactId><version>1.0</version></parent><dependencies><!-- Begin of DB related --><dependency> <!-- for ChainedTransactionManager configuration --><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId></dependency><dependency> <!-- exclude掉缺省的jdbc配置 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><exclusions><exclusion><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 同项目的其它包...开始 --><dependency><groupId>com.framework.recWeiMsg</groupId><artifactId>msg-message</artifactId><version>1.0</version></dependency>
<!--        <dependency><groupId>com.framework.recWeiMsg</groupId><artifactId>msg-commons</artifactId><version>1.0</version></dependency>-->
<!--        <dependency><groupId>com.framework.recWeiMsg</groupId><artifactId>msg-weichat</artifactId><version>1.0</version></dependency>--><!-- 同项目的其它包...结束 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency> <!-- mybatis 分页插件 --><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>4.1.6</version></dependency></dependencies></project>

目录:resources/ mapper中xml文件 a.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zxj.ds.mybatis.dao.saas2.DbSaas2Dao"><select id="getOilOrder" resultType="com.framework.msg.db.businessTransaction.OrderRecord">select * from orderRecord</select>
</mapper>

启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 1:去掉配置中的basePackage路径 测试无法去掉,或者说多数据源情况下无法去掉,需要配置一个包,可以扫描到子包* 2:全部写在一个类里面          不行,读取不到* 3:注解class,使用class.forName        可以,(Class<? extends Annotation>) Class.forName("com.zxj.ds.mybatis.annotation.SaasDao")* 4:SQL写在配置文件中         可以* 5:两个数据源是否都支持事务   只有一个数据源支持事务,那就是dataSource中配置了@Primary注解的数据源* 6:两个数据源是不是可以一起回滚事务     只有一个注解支持事务* 7:自动转驼峰       可以,但是设置了驼峰就强制转驼峰,不支持下划线*/
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}
}

更换数据源为druid,删除了注解的配置

DataSourceConfiguration.java

package com.zxj.ds.mybatis.configuration;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/*** Created by Administrator on 2017/5/4.*/
@Configuration
public class DataSourceConfiguration {//数据库连接相关的参数:private String driverClassName = "com.mysql.jdbc.Driver";private String jdbcIpPort = "3306";private String jdbcUrl = "jdbc:mysql://server1:3306/%s?useUnicode=true&characterEncoding=utf8";private String userName = "root";private String password = "123";//连接池相关的参数://等待从连接池中获得连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒private long connectionTimeout = 30000;//一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟private long idleTimeout = 600000;//一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒以上,//参考MySQL wait_timeout参数(show variables like '%timeout%';)private long maxLifetime = 1765000;//连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)private int maximumPoolSize = 15;@Bean()@Primarypublic DataSource dataSource1(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driverClassName);ds.setUrl(String.format(jdbcUrl, "saas"));ds.setUsername(userName);ds.setPassword(password);return ds;}@Bean()public DataSource dataSource2(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driverClassName);ds.setUrl(String.format(jdbcUrl, "saas2"));ds.setUsername(userName);ds.setPassword(password);return ds;}
}

新建 MyBatisConfiguration.java 文件

只需要一行注解,就可以配置mybadis的多数据源

这是一个基于spring boot 的mybadis的starter

支持多个数据源

使用方法很简单,先定义一些配置文件,放到application.yml中

package com.zxj.ds.mybatis.configuration;import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.data.transaction.ChainedTransactionManager;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;/*** Created by Administrator on 2017/5/4.*/
@Configuration
@EnableTransactionManagement
@AutoConfigureAfter(DataSourceConfiguration.class)
public class MyBatisConfiguration implements TransactionManagementConfigurer {private final static Logger logger = LoggerFactory.getLogger(MyBatisConfiguration.class);@Resource(name = "dataSource1")private DataSource ds1;@Resource(name = "dataSource2")private DataSource ds2;/*** 配置SqlSessionFactory:* - 创建SqlSessionFactoryBean,并指定一个dataSource;* - 设置这个分页插件:https://github.com/pagehelper/Mybatis-PageHelper;* - 指定mapper文件的路径;*/@Beanpublic SqlSessionFactory sqlSessionFactory1() {return setMapper(ds1);}@Beanpublic SqlSessionFactory sqlSessionFactory2() {return setMapper(ds2);}private SqlSessionFactory setMapper(DataSource ds) {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(ds);//分页插件PageHelper pageHelper = new PageHelper();Properties properties = new Properties();properties.setProperty("dialect", "mysql");properties.setProperty("reasonable", "false");properties.setProperty("pageSizeZero", "true");pageHelper.setProperties(properties);bean.setPlugins(new Interceptor[]{pageHelper});try {//指定mapper xml目录ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));//设置配置项org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();//自动把下划线转成驼峰
//            configuration.setMapUnderscoreToCamelCase(true);bean.setConfiguration(configuration);return bean.getObject();} catch (Exception e) {logger.error(e.getMessage(), e);throw new RuntimeException(e);}}/*** Transaction 相关配置* 因为有两个数据源,所有使用ChainedTransactionManager把两个DataSourceTransactionManager包括在一起。*/@Overridepublic PlatformTransactionManager annotationDrivenTransactionManager() {DataSourceTransactionManager dtm1 = new DataSourceTransactionManager(ds1);DataSourceTransactionManager dtm2 = new DataSourceTransactionManager(ds2);ChainedTransactionManager ctm = new ChainedTransactionManager(dtm2, dtm1);return ctm;}}

创建 MyBatisScanner.java

package com.zxj.ds.mybatis.configuration;import com.zxj.ds.mybatis.annotation.Saas2Dao;
import com.zxj.ds.mybatis.annotation.SaasDao;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.lang.annotation.Annotation;/*** Created by Administrator on 2017/5/4.*/
@Configuration
@AutoConfigureAfter(MyBatisConfiguration.class)
public class MyBatisScanner {/*** - 设置SqlSessionFactory;* - 设置dao所在的package路径,路径可以以逗号或者分号进行分隔设置多个* - 关联注解在dao类上的Annotation名字;* - 上面的注解可以不需要*/@Beanpublic MapperScannerConfigurer mapperScannerConfigurer1() throws ClassNotFoundException, IllegalAccessException, InstantiationException {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory1");mapperScannerConfigurer.setBasePackage("com.zxj.ds.mybatis.dao.saas");//mapperScannerConfigurer.setAnnotationClass((Class<? extends Annotation>) Class.forName("com.zxj.ds.mybatis.annotation.SaasDao"));return mapperScannerConfigurer;}@Beanpublic MapperScannerConfigurer mapperScannerConfigurer2() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory2");mapperScannerConfigurer.setBasePackage("com.zxj.ds.mybatis.dao.saas2");//mapperScannerConfigurer.setAnnotationClass(Saas2Dao.class);return mapperScannerConfigurer;}
}

配置完成,从 controller开始,具体使用

创建 HelloController.java
package com.zxj.ds.mybatis.controller;import com.framework.msg.db.WeichatAccount;
import com.framework.msg.db.businessTransaction.OrderRecord;
import com.zxj.ds.mybatis.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;
import java.util.Map;/*** @Author 朱小杰* @Date 2017/5/4 10:41:42* 说明这个类的作用...*/
@Controller
public class HelloController {@Autowiredprivate HelloService service;@RequestMapping("/")@ResponseBodypublic String a(){List<Map<String,Object>> users = service.getUsers();System.out.println(users);List<OrderRecord> orders = service.getOilOrder();System.out.println(orders);List<WeichatAccount> accounts = service.getAccounts();System.out.println(accounts);return "SUCCESS";}@ResponseBody@RequestMapping("/b")public String b(){service.b();return "b";}
}

service新建  HelloService.java 文件

package com.zxj.ds.mybatis.service;import com.framework.msg.db.WeichatAccount;
import com.framework.msg.db.businessTransaction.OrderRecord;
import com.zxj.ds.mybatis.dao.saas2.DbSaas2Dao;
import com.zxj.ds.mybatis.dao.saas.DbSaasDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;
import java.util.Map;@Service
public class HelloService {@Autowiredprivate DbSaasDao saasDao;@Autowiredprivate DbSaas2Dao saas2Dao;public List<Map<String, Object>> getUsers() {List<Map<String, Object>> datas = saasDao.getUsers();return datas;}public List<OrderRecord> getOilOrder() {List<OrderRecord> d = saas2Dao.getOilOrder();return d;}public List<WeichatAccount> getAccounts() {return saasDao.getAccounts();}@Transactionalpublic void b() {
/*        boolean r = saasDao.addApp("002","xxx");System.out.println(r);throw new RuntimeException("");*/boolean r = saas2Dao.addStaff("id1","xx");throw new RuntimeException("");}
}

Dao中分别创建二个包 saas 和 saas2

saas中创建  DbSaasDao.java 文件

package com.zxj.ds.mybatis.dao.saas;import com.framework.msg.db.WeichatAccount;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;
import java.util.Map;//@SaasDao
@Mapper
public interface DbSaasDao {@Select("select * from weichat_user limit 50")List<Map<String, Object>> getUsers();@Select("select * from weichat_account limit 50")List<WeichatAccount> getAccounts();@Insert("INSERT INTO `saas`.`app_version` (`id`, `name`, `version`, `can_use_version`, `update_url`, `create_time`, `update_time`, `desc`, `fileSize`) VALUES (#{id}, #{name}, '1.0.4', '1.0.3', 'http://www.kindpetro.com.cn/admin/sqf.apk', '2017-04-18 11:09:49', '2017-04-18 11:09:52', '1,优化页面显示; \\r\\n2,修复Bug。', '0');\n")boolean addApp(@Param("id") String id,@Param("name") String name);
}

saas2中创建  DbSaas2Dao.java 文件

package com.zxj.ds.mybatis.dao.saas2;import com.framework.msg.db.businessTransaction.OrderRecord;
import com.zxj.ds.mybatis.annotation.Saas2Dao;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;import java.util.List;@Mapper
//@Repository
public interface DbSaas2Dao {List<OrderRecord> getOilOrder();@Insert("INSERT INTO `saas2`.`staff` (`id`, `name`, `appid`, `openid`, `create_time`) VALUES (#{id},#{name}, 'wx2e9a7946612800c5', 'oZnKxwb6QKhv8xNN0of3eAvEd6mM', '2016-12-15 15:04:48');\n")boolean addStaff(@Param("id") String id,@Param("name") String name);
}

创建 annotation 包

创建Saas2Dao.java文件

package com.zxj.ds.mybatis.annotation;import java.lang.annotation.*;/*** 连SAAS2数据库*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Saas2Dao {
}

创建SaasDao.java文件

package com.zxj.ds.mybatis.annotation;import java.lang.annotation.*;/*** 连接SAAS库*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface SaasDao {
}

完成

spring-boot mybadis多数据源配置相关推荐

  1. Spring Boot Jpa多数据源配置

    2019独角兽企业重金招聘Python工程师标准>>> 前言 随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源,如:user一个库,busine ...

  2. boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...

  3. spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法

    Spring Boot项目中数据源的配置可以通过两种方式实现: 1.application.yml或者application.properties配置 2.注入DataSource及SqlSessio ...

  4. spring boot 动态切换数据源实现多租户开发

    之前的文章有介绍过spring boot 动态切换数据源spring boot 动态切换数据源(数据源信息从数据库中读取)_lgq2016的博客-CSDN博客,今天简单介绍一下动态数据源切换实战,主要 ...

  5. Spring Boot 2.0 的配置详解(图文教程)

    本文来自作者 泥瓦匠 @ bysocket.com 在 GitChat 上分享 「Spring Boot 2.0 的配置详解(图文教程)」 编辑 | 哈比 Spring Boot 配置,包括自动配置和 ...

  6. Spring Boot使用动态数据源

    文章目录 前言 一.什么是动态数据源 二.动态数据源实现 1.实现原理 2.实现过程 前言 有这样一个场景,现在要开发一个数据API功能,用户自己编写数据源脚本,在界面任意选择一个数据源,可选择的数据 ...

  7. Spring Security 实战:Spring Boot 下的自动配置

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1. 前言 我们在前几篇 ...

  8. spring boot通过命令行配置属性

    spring boot通过命令行配置属性 命令:java -jar xxx.jar --server.port=8888,通过使用–-server.port属性来设置xxx.jar应用的端口为8888 ...

  9. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

最新文章

  1. 删除数组中指定元素_如何删除PHP数组元素键值并重新排序
  2. oracle的函数索引怎么建,如何创建oracle函数索引
  3. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  4. 作业三——原型化系统——外卖app
  5. linux mail命令查看邮件/mail控制台
  6. hadoop之 YARN配置参数剖析—RM与NM相关参数
  7. SVN客户端与服务端安装详解
  8. MySQL 5.7.18的安装与主从复制
  9. CCF2015-12-2 消除类游戏
  10. python学习链接
  11. elasticsearch的javaAPI之query
  12. checkbox未赋值时获取value是on_【漏洞分析】关于mysqlconnectorjava连接时的反序列化...
  13. android程序连接网络出现android.os.NetworkOnMainThreadEx
  14. 软件结构体系与设计模式--1.软件设计模式概述
  15. 自己动手画一个CPU——Logisim,下
  16. Myshare.cc 图床对接ShareX自定义图片上传
  17. 中国智慧城市健康发展应注意八个方面
  18. 软件加入使用时间_Adobe CC 2020 系列软件更新(Adobe Zii 2020 5.2.1)| Mac软件天堂
  19. 弄懂 JavaScript 执行机制,宏任务和微任务
  20. [征询意见]关于博客园与出版社合作出书

热门文章

  1. Python数据分析与处理(例题)
  2. 光线追踪学习:GPU端光线追踪学习
  3. XYplorer 21.50.0100多语言版,资源管理器件之一
  4. 一种更简单的求最小平方均值函数(MSE)的方法 -- 梯度下降法。
  5. 企业印章使用与管理办法
  6. 基于粒子群优化算法的微型燃气轮机冷热电联供系统优化调度(Matlab代码实现)
  7. opencv+python+OpenPose姿态实时识别
  8. carsim转向扭矩控制-开环控制设置
  9. 关于《学编程,还有必要上大学吗? 》
  10. ijkplayer播放器架构从原型到升级