springboot的原则是简化配置,本文试图不通过xml配置,使用configuration配置数据源,并进行简单的数据访问。

并且配置了多数据源,在开发过程中这种场景很容易遇到。

1、依赖

springboot的starter

mybatis的springboot集成包

jdbc

<dependencies>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
  <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
 </dependency>
 <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>

2、在application中打开configuration

@Configuration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

3、写主数据源的configuration

1)多数据源中有一个是主数据源,注意@primary注解的书写位置

2)MapperScan basePackages配置了扫描主数据源mapper的路径

3)//bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/sentinel/*.xml"));

注释掉了通过xml配置扩展sql的方式。如果频繁使用多表连接查询,可以打开自定义sql

package com.dqa.sentinel.configuration;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
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 org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration
@MapperScan(basePackages = "com.dqa.sentinel.mapper.sentinel", sqlSessionTemplateRef = "sentinelSqlSessionTemplate")
public class SentinelDataSource { @Bean(name = "sentinelData")
@ConfigurationProperties(prefix = "spring.datasource.sentinel") // application.properteis中对应属性的前缀
@Primary
public DataSource sentinelData() {
return DataSourceBuilder.create().build();
} @Bean(name = "sentinelSqlSessionFactory")
@Primary
public SqlSessionFactory sentinelSqlSessionFactory(@Qualifier("sentinelData") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/sentinel/*.xml"));
return bean.getObject();
} @Bean(name = "sentinelTransactionManager")
@Primary
public DataSourceTransactionManager sentinelTransactionManager(@Qualifier("sentinelData") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "sentinelSqlSessionTemplate")
@Primary
public SqlSessionTemplate sentinelSqlSessionTemplate(@Qualifier("sentinelSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
} }

4、比如你还有一个外部数据源,再写一个configuration

tips:这里不能有@primary注解,不然会有冲突

package com.dqa.sentinel.configuration;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
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 org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration
@MapperScan(basePackages = "com.dqa.sentinel.mapper.outer", sqlSessionTemplateRef = "outerSqlSessionTemplate")
public class OuterDataSource { @Bean(name = "outerData")
@ConfigurationProperties(prefix = "spring.datasource.outer") // application.properteis中对应属性的前缀
public DataSource outData() {
return DataSourceBuilder.create().build();
} @Bean(name = "outerSqlSessionFactory")
public SqlSessionFactory outerSqlSessionFactory(@Qualifier("outerData") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/outer/*.xml"));
return bean.getObject();
} @Bean(name = "outerTransactionManager")
public DataSourceTransactionManager outerTransactionManager(@Qualifier("outerData") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "outerSqlSessionTemplate")
public SqlSessionTemplate outerSqlSessionTemplate(@Qualifier("outerSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
} }

5、在mapper包中定义你需要的sql

路径要和刚才在configuration中配置的一样

package com.dqa.sentinel.mapper.sentinel;

import com.dqa.sentinel.model.SentinelClan;
import org.apache.ibatis.annotations.*; import java.util.List; @Mapper
public interface SentinelMapper {
@Select("SELECT * FROM sentinelClan;")
List<SentinelClan> getAllClan(); @Select("SELECT * FROM sentinelClan WHERE id = #{id}")
SentinelClan getOneClan(@Param("id") Integer id); @Insert("INSERT INTO sentinelClan (id,clanName,topicNames,bufferTime,countWidth,countPercent,alarmGroup,status,createTime,updateTime) " +
"VALUES( #{id}, #{clanName}, #{topicNames}, #{bufferTime}, #{countWidth}, #{countPercent}, #{alarmGroup}, #{status}, #{createTime}, #{updateTime})")
int insertOne(SentinelClan sentinelClan); @Update("UPDATE sentinelClan SET clanName = #{clanName},topicNames = #{topicNames},bufferTime = #{bufferTime}," +
"countWidth = #{countWidth},countPercent = #{countPercent},alarmGroup = #{alarmGroup},status = #{status}," +
"createTime=#{createTime}, updateTime=#{updateTime}" +
"WHERE id = #{id}")
int updateOne(SentinelClan sentinelClan);
}

6、model中是实体类

个人爱好写的班班程程的,或者你可以在数据库建表之后使用generator自动生成。

package com.dqa.sentinel.model;

import java.sql.Blob;
import java.util.Date; public class SentinelClan {
private Integer id ;
private String clanName;
private String topicNames;
private Integer bufferTime;
private Integer countWidth;
private Integer countPercent;
private String alarmGroup;
private Integer status;
private String createTime;
private String updateTime; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getClanName() {
return clanName;
}
public void setClanName(String clanName) {
this.clanName = clanName;
}
public String getTopicNames() {
return topicNames;
}
public void setTopicNames(String topicNames) {
this.topicNames = topicNames;
}
public Integer getBufferTime() {
return bufferTime;
}
public void setBufferTime(Integer bufferTime) {
this.bufferTime = bufferTime;
}
public Integer getCountWidth() {
return countWidth;
}
public void setCountWidth(Integer countWidth) {
this.countWidth = countWidth;
}
public Integer getCountPercent() {
return countPercent;
}
public void setCountPercent(Integer countPercent) {
this.countPercent = countPercent;
}
public String getAlarmGroup() {
return alarmGroup;
}
public void setAlarmGroup(String alarmGroup) {
this.alarmGroup = alarmGroup;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
}

springboot mybatis优雅的添加多数据源的更多相关文章

  1. SpringBoot Mybatis项目中的多数据源支持

    1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 项目结构如下: 2. ...

  2. SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页

    前言 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper 并实现多数据源和分页.其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了 ...

  3. springboot+mybatis +yml文件配置多数据源

    记录一下java开发中多数据源的配置过程, 参考博客:https://blog.csdn.net/weinichendian/article/details/72903757,我在这里进行了整理,使用 ...

  4. Springboot+Mybatis AOP注解动态切换数据源

    在开发中因需求在项目中需要实现多数据源(虽然项目框架是SpringCloud,但是因其中只是单独的查询操作,觉得没必要开发一个项目,所以采用多数据源来进行实现) 1.在配置文件中创建多个数据连接配置 ...

  5. springboot添加多数据源连接池并配置Mybatis

    springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018  ...

  6. springboot + mybatis + 多数据源

    此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1) ...

  7. DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载  吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...

  8. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  9. DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池

    DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑 ...

随机推荐

  1. 【深入Java虚拟机】之一:Java内存区域与内存溢出

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17565503 内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若 ...

  2. KVM网页管理工具WebVirtMgr部署

    KVM-WebVirtMgr 0ther https://github.com/retspen/webvirtmgr/wiki System Optimization(Only CentOS6.X) ...

  3. 团队作业5——测试与发布(Alpha版本)

    Deadline: 2017-5-7 22:00PM,以博客发表日期为准 评分基准: 按时交 - 有分,检查的项目包括后文的两个方面 测试报告 发布说明 晚交 - 0分 迟交一周以上 - 倒扣本次作业 ...

  4. 团队作业4---第一次项目冲刺(ALpha)版本 第五天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 a.完成所有基础功能 b.正在进行测试调试 四.困难与问题 1.根据测试需求功能,部分基础功能不能实现,性能不达标,后续已完成 ...

  5. 201521145《Java程序设计》第2周学习总结

    1. 本章学习总结 掌握了整数类型(byte short int long char),浮点型(float double),布尔型(boolean)的使用,以及它们的包装类Byte Short Int ...

  6. 201521123055 《Java程序设计》第2周学习总结

     1. 本章学习总结 (1)认识PATH和CLASSPATH (2)SET PATH/CLASSPATH和-cp的用法 (3)了解BigDecimal.BigInteger.ArrayList/Lis ...

  7. JAVA2015086第十一周作业

    本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了 ...

  8. 201521123033《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  9. java课设

    1.代码截图: 2.设计思路 建立GUI界面,系统产生一个随机数(对用户不可见),然后用户输入猜测数,系统根据用户每次输入的数据给出评语(偏大,偏小,猜测成功).当用户最终猜测成功后,就把当次的随机数 ...

  10. 201521123101 《Java程序设计》第10周学习总结

    1.本周学习总结 2.书面作业 1.finally,题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? finally不管是否捕获到异常,始终会被 ...