springboot+mybatis多数据源最简解决方案
说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解决方案,还有的是利用aop动态切换,感觉有点小复杂,其实我只是想找一个简单的多数据支持而已,折腾了两个小时整理出来,供大家参考。
废话不多说直接上代码吧
配置文件
pom包就不贴了比较简单该依赖的就依赖,主要是数据库这边的配置:
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver
spring.datasource.test1.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
spring.datasource.test1.username = root
spring.datasource.test1.password = root
spring.datasource.test2.driverClassName = com.mysql.jdbc.Driver
spring.datasource.test2.url = jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8
spring.datasource.test2.username = root
spring.datasource.test2.password = root
一个test1库和一个test2库,其中test1位主库,在使用的过程中必须制定主库,不然会报错。
数据源配置
@Configuration
@MapperScan(basePackages =
"com.neo.mapper.test1", sqlSessionTemplateRef =
"test1SqlSessionTemplate")
public
class
DataSource1Config
{
@Bean(name =
"test1DataSource")
@ConfigurationProperties(prefix =
"spring.datasource.test1")
@Primary
public DataSource testDataSource()
{
return DataSourceBuilder.create().build();
}
@Bean(name =
"test1SqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean =
new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
return bean.getObject();
}
@Bean(name =
"test1TransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
return
new DataSourceTransactionManager(dataSource);
}
@Bean(name =
"test1SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return
new SqlSessionTemplate(sqlSessionFactory);
}
}
最关键的地方就是这块了,一层一层注入,先创建DataSource,在创建SqlSessionFactory在创建事务,最后包装到SqlSessionTemplate中。其中需要制定分库的mapper文件地址,以及分库到层代码。
@MapperScan(basePackages =
"com.neo.mapper.test1", sqlSessionTemplateRef =
"test1SqlSessionTemplate")
这块的注解就是指明了扫描dao层,并且给dao层注入指定的SqlSessionTemplate。所有@Bean都需要按照命名指定正确。
dao层和xml层
dao层和xml需要按照库来分在不同的目录,比如:test1库dao层在com.neo.mapper.test1包下,test2库在com.neo.mapper.test1
public
interface
User1Mapper
{
List<UserEntity>
getAll();
UserEntity getOne(Long id);
void
insert(UserEntity user);
void
update(UserEntity user);
void
delete(Long id);
}
xml层
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace="com.neo.mapper.test1.User1Mapper" >
<resultMap
id="BaseResultMap" type="com.neo.entity.UserEntity" >
<id
column="id" property="id" jdbcType="BIGINT" />
<result
column="userName" property="userName" jdbcType="VARCHAR" />
<result
column="passWord" property="passWord" jdbcType="VARCHAR" />
<result
column="user_sex" property="userSex" javaType="com.neo.enums.UserSexEnum"/>
<result
column="nick_name" property="nickName" jdbcType="VARCHAR" />
</resultMap>
<sql
id="Base_Column_List" >
id, userName, passWord, user_sex, nick_name
</sql>
<select
id="getAll" resultMap="BaseResultMap" >
SELECT
<include
refid="Base_Column_List" />
FROM users
</select>
<select
id="getOne" parameterType="java.lang.Long" resultMap="BaseResultMap" >
SELECT
<include
refid="Base_Column_List" />
FROM users
WHERE id = #{id}
</select>
<insert
id="insert" parameterType="com.neo.entity.UserEntity" >
INSERT INTO
users
(userName,passWord,user_sex)
VALUES
(#{userName}, #{passWord}, #{userSex})
</insert>
<update
id="update" parameterType="com.neo.entity.UserEntity" >
UPDATE
users
SET
<if
test="userName != null">userName = #{userName},</if>
<if
test="passWord != null">passWord = #{passWord},</if>
nick_name = #{nickName}
WHERE
id = #{id}
</update>
<delete
id="delete" parameterType="java.lang.Long" >
DELETE FROM
users
WHERE
id =#{id}
</delete>
</mapper>
测试
测试可以使用SpringBootTest,也可以放到Controller中,这里只贴Controller层的使用
@RestController
public
class
UserController
{
@Autowired
private User1Mapper user1Mapper;
@Autowired
private User2Mapper user2Mapper;
@RequestMapping("/getUsers")
public List<UserEntity>
getUsers()
{
List<UserEntity> users=user1Mapper.getAll();
return users;
}
@RequestMapping("/getUser")
public UserEntity getUser(Long id)
{
UserEntity user=user2Mapper.getOne(id);
return user;
}
@RequestMapping("/add")
public
void
save(UserEntity user) {
user2Mapper.insert(user);
}
@RequestMapping(value="update")
public
void
update(UserEntity user) {
user2Mapper.update(user);
}
@RequestMapping(value="/delete/{id}")
public
void
delete(@PathVariable("id") Long id) {
user1Mapper.delete(id);
}
}
最后源码地址在这里spring-boot-mybatis-mulidatasource
相关链接
- Spring Boot系列(六):如何优雅的使用mybatis
- Spring Boot系列(五):spring data jpa的使用
- Spring Boot系列(四):thymeleaf使用详解
- Spring Boot系列(三):Spring Boot中Redis的使用
- Spring Boot系列(二):web综合开发
- Spring Boot系列(一):Spring Boot 入门篇
作者:纯洁的微笑 @张强 (转载已获得作者同意,如需转载请与原作者联系!)
出处:www.ityouknow.com
springboot+mybatis多数据源最简解决方案相关推荐
- springboot(七):springboot+mybatis多数据源最简解决方案
为什么80%的码农都做不了架构师?>>> 说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多,大都是 ...
- Spring Boot(七):Mybatis 多数据源最简解决方案
Spring Boot(七):Mybatis 多数据源最简解决方案 参考文章: (1)Spring Boot(七):Mybatis 多数据源最简解决方案 (2)https://www.cnblogs. ...
- 关于纯洁的微笑《Spring Boot(七):Mybatis 多数据源最简解决方案》文章补充说明多数据源事务的配置
关于Spring boot中使用Mybatis多数据源的配置,我推荐纯洁的微笑博主的<Spring Boot(七):Mybatis 多数据源最简解决方案>这篇文章,简单清晰易懂 疑问 但是 ...
- (转)Spring Boot(七):Mybatis 多数据源最简解决方案
http://www.ityouknow.com/springboot/2016/11/25/spring-boot-multi-mybatis.html 说起多数据源,一般都来解决那些问题呢,主从模 ...
- Spring boot(七):Spring boot+ mybatis 多数据源最简解决方案
多数据源一般解决哪些问题?主从模式或者业务比较复杂需要连接不同的分库来支持业务. 直接上代码. 配置文件 pom包依赖,该依赖的依赖.主要是数据库这边的配置: mybatis.config-locat ...
- 探讨 | SpringBoot + MyBatis 多数据源事物问题
这是小小本周的第二篇,本篇将会着重讲解关于SpringBoot + MyBatis 多数据源的事物的问题. 多数据源 此处模拟创建订单和扣减库存.先创建订单表和库存表 CREATE TABLE `t_ ...
- springboot+mybatis多数据源配置
目录 1.前言 2.多数据源配置 2.1 AbstractRoutingDataSource 2.2.首先maven依赖 2.3 数据源配置 2.4 mybatis配置 2.5 设置数据源的路由ke ...
- SpringBoot mybatis多数据源配置,记录下我磕磕碰碰的三个月找工作经历
*/ public class DynamicDataSource extends AbstractRoutingDataSource { /** 取得当前使用哪个数据源 @return */ @Ov ...
- SpringBoot Mybatis多数据源配置
参考资料: Spring Boot 2.x基础教程:MyBatis的多数据源配置 目录 一. 配置文件 二. 多数据源配置类 三. 多数据源Mybatis配置 3.1 primary数据源配置 3.2 ...
最新文章
- Windows 7使用wubi硬盘安装Ubuntu (文字版)
- Java 网关-Servlet Gateway
- Android中fragment之间和Activity的传值、切换
- c/c++编码规范(2)--作用域
- 写在2009年的开始
- oracle电梯案例,Oracle技术嘉年华的一个案例,redo的那些事,连载一
- 亚马逊与Visa就交易费达成协议 重新接受Visa支付
- 关于数据准备时,自动棌番的主键,这一字段数据的注意(IT总结之五)
- MongoDB数据库读书笔记
- 小众却非常好用的文件同步备份工具-FileYee
- Axure原型图教程
- Zynga和Unity:独家奖励广告
- 11.构建Ubuntu系统
- python re提取中文
- 【富集分析】GO KEGG
- 隐私计算之数据隐私保护
- 百度地图查询数据结果
- 教你轻松学会用PYTHON给对象画圣诞树
- 【青水评级】Ultrain超脑链项目分析
- NBA历史连胜记录和连胜记录及不可超越的记录