SpringBoot实战(三):整合Mybatis配置多数据源
【前言】
最近接到一个新需求,经过分析后做了相应的设计;其中需要在一个项目中操做不同的数据源;于是进行了相关验证;在此记录一下验证过程。
【实战多数据源】
一、Pom中引入相应的Jar包
<!-- mysql 基础服务-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.39</version>
</dependency><!-- mybatis -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>
二、主要代码展示
1、application.properties增加数据库连接的相关配置
#****************************用户数据库***************************
user.datasource.url=jdbc:mysql://127.0.0.1:3306/zh_user?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8
user.datasource.username=root
user.datasource.password=root
user.datasource.connectionTimeout=30000
user.datasource.idleTimeout=600000
user.datasource.maxLifetime=1800000
user.datasource.maximumPoolSize=10
user.datasource.minimumIdle=5
#****************************订单数据库***************************
order.datasource.url=jdbc:mysql://127.0.0.1:3306/zh_order?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8
order.datasource.username=root
order.datasource.password=root
order.datasource.connectionTimeout=30000
order.datasource.idleTimeout=600000
order.datasource.maxLifetime=1800000
order.datasource.maximumPoolSize=10
order.datasource.minimumIdle=5
2、启动类中排除DataSourceAutoConfiguration和MybatisAutoConfiguration
package com.zhanghan.zhboot;import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class})
public class ZhBootApplication {public static void main(String[] args) {SpringApplication.run(ZhBootApplication.class, args);}}
3、数据库属性读取类(以UserDataSourceProperties为例)
package com.zhanghan.zhboot.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@Data
@ConfigurationProperties(prefix = "user.datasource")
public class UserDataSourceProperties {private String url;private String username;private String password;private Integer connectionTimeout;private Integer idleTimeout;private Integer maxLifetime;private Integer maximumPoolSize;private Integer minimumIdle;}
4、数据源配置器(以UserDataSourceConfig为例)---注:数据库连接池用的是springboot2.0后默认的hikariCP(性能高)
package com.zhanghan.zhboot.config;import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import com.zhanghan.zhboot.properties.UserDataSourceProperties;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = UserDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "userSqlSessionFactory")
public class UserDataSourceConfig {static final String PACKAGE = "com.zhanghan.zhboot.mybatis.mapper.user";@Autowiredprivate UserDataSourceProperties userDataSourceProperties;@Bean(name = "userDataSource")public DataSource userDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl(userDataSourceProperties.getUrl());config.setUsername(userDataSourceProperties.getUsername());config.setPassword(userDataSourceProperties.getPassword());config.setConnectionTestQuery("select 1");config.setConnectionTimeout(userDataSourceProperties.getConnectionTimeout());config.setIdleTimeout(userDataSourceProperties.getIdleTimeout());config.setMaxLifetime(userDataSourceProperties.getMaxLifetime());config.setMaximumPoolSize(userDataSourceProperties.getMaximumPoolSize());config.setMinimumIdle(userDataSourceProperties.getMinimumIdle());return new HikariDataSource(config);}@Bean(name = "userTransactionManager")public DataSourceTransactionManager userTransactionManager() {return new DataSourceTransactionManager(userDataSource());}@Bean(name = "userSqlSessionFactory")public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource userDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(userDataSource);return sessionFactory.getObject();}
}
5、相应的mapper文件
package com.zhanghan.zhboot.mybatis.mapper.user;import com.zhanghan.zhboot.mybatis.entity.UserInfoEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.type.JdbcType;@Mapper
public interface UserInfoMapper {@Select({"select","id, no, mobile, name, sex, create_time, update_time, param1, param2, param3, ","param4, param5, param6","from user_info","where mobile = #{mobile,jdbcType=VARCHAR}","limit 1"})@Results({@Result(column="id", property="id", jdbcType= JdbcType.BIGINT, id=true),@Result(column="no", property="no", jdbcType=JdbcType.VARCHAR),@Result(column="mobile", property="mobile", jdbcType=JdbcType.VARCHAR),@Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),@Result(column="sex", property="sex", jdbcType=JdbcType.INTEGER),@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),@Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),@Result(column="param1", property="param1", jdbcType=JdbcType.INTEGER),@Result(column="param2", property="param2", jdbcType=JdbcType.INTEGER),@Result(column="param3", property="param3", jdbcType=JdbcType.INTEGER),@Result(column="param4", property="param4", jdbcType=JdbcType.VARCHAR),@Result(column="param5", property="param5", jdbcType=JdbcType.VARCHAR),@Result(column="param6", property="param6", jdbcType=JdbcType.VARCHAR)})UserInfoEntity findByMobile(String mobile);
}
6、相应的Service
package com.zhanghan.zhboot.service.impl;import com.zhanghan.zhboot.controller.request.OrderRequest;
import com.zhanghan.zhboot.mybatis.entity.OrderInfoEntity;
import com.zhanghan.zhboot.mybatis.entity.UserInfoEntity;
import com.zhanghan.zhboot.mybatis.mapper.order.OrderInfoMapper;
import com.zhanghan.zhboot.mybatis.mapper.user.UserInfoMapper;
import com.zhanghan.zhboot.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate UserInfoMapper userInfoMapper;@Autowiredprivate OrderInfoMapper orderInfoMapper;@Overridepublic Object findOrder(OrderRequest orderRequest) {UserInfoEntity userInfoEntity = userInfoMapper.findByMobile(orderRequest.getMobile());if (ObjectUtils.isEmpty(userInfoEntity)) {return null;}OrderInfoEntity orderInfoEntity = orderInfoMapper.findByUserNo(userInfoEntity.getNo());return orderInfoEntity;}
}
7、相应的Controller
package com.zhanghan.zhboot.controller;import com.zhanghan.zhboot.controller.request.OrderRequest;
import com.zhanghan.zhboot.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController {@Autowiredprivate OrderService orderService;@RequestMapping(value = "/get/order/borrow", method = RequestMethod.POST)public Object getOrderBorrow(@RequestBody OrderRequest orderRequest) {return orderService.findOrder(orderRequest);}
}
三、效果图
五、项目地址及代码版本
1、地址:https://github.com/dangnianchuntian/springboot
2、代码版本:1.0.0-Release
【总结】
1、实践出真知;
2、技术是为业务服务;
SpringBoot实战(三):整合Mybatis配置多数据源相关推荐
- SpringBoot 实战 (九) | 整合 Mybatis
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实 ...
- SpringBoot实战之整合WebSocket之群聊
SpringBoot实战之整合WebSocket 文章目录 SpringBoot实战之整合WebSocket 前言 一.WebSocket简介 二.WebSocket原理 三.WebSocket特点 ...
- 利用IDEA搭建SpringBoot项目,整合mybatis,实现简单的登录功能。
利用IDEA搭建SpringBoot项目,整合mybatis,实现简单的登录功能. 仅供参考!!! 仅供参考!!! 仅供参考!!! 利用闲余时间想自己搭建一个springboot+mybatis的项目 ...
- SpringBoot2x整合Mybatis(多数据源)
SpringBoot2x整合Mybatis(多数据源)现在基本上都有各大项目必须的配置,一个项目需要多个数据源进行操作多个数据库,下面以三数据源为例,如果有更多数据源直接照着弄即可. 1.pom依赖 ...
- SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等(附源码)
创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...
- SpringBoot进阶教程 | 第四篇:整合Mybatis实现多数据源
这篇文章主要介绍,通过Spring Boot整合Mybatis后如何实现在一个工程中实现多数据源.同时可实现读写分离. 准备工作 环境: windows jdk 8 maven 3.0 IDEA 创建 ...
- SpringBoot进阶教程 | 第四篇:整合Mybatis实现多数据源 1
这篇文章主要介绍,通过Spring Boot整合Mybatis后如何实现在一个工程中实现多数据源.同时可实现读写分离. 准备工作 环境: windows jdk 8 maven 3.0 IDEA 创建 ...
- mysql动态配置数据源_Spring整合Mybatis实现动态数据源切换教程配置
一.摘要 这篇文章将介绍Spring整合Mybatis 如何完成SqlSessionFactory的动态切换的.并且会简单的介绍下MyBatis整合Spring中的官方的相关代码. Spring整合M ...
- Springboot环境下mybatis配置多数据源配置
mybatis多数据源配置(本文示例为两个),方便实现数据库的读写分离,分库分表功能 本文基于springboot2进行的配置,如版本为springboot1系列则需修改yml的配置(在文末附带) m ...
最新文章
- Thread系列——Thread.Sleep(0)
- Vysor_v1.6.9
- java 继承 私有变量_java – 继承和私有变量
- python画二维图_使用python绘制二维图形示例
- 如何删掉oracle服务,oracle留下的服务如何删除啊
- (转)windows 下 Java 及 Python 环境变量设置
- 【C语言】07-基本语句和运算
- C++实现一个基于mfc的学生信息管理系统
- GlobalMapper20提取点云LAS文件当中的投影信息
- WinForGIFSicle 1.0.0.1 免费开源版,基于GIFSicle的开源可视化批量GIF压缩工具
- 科创人|容联七陌CEO陈光:90后街舞少年的CEO修炼手册
- 迎接天翻地覆的重大演变:微软加速器区块链论坛成功举办
- Feedback from Microsoft
- 20200714学习笔记
- matlab不能定位,matlab定位问题!
- NVME-MI 学习记录_1 框架
- oracle open_cursors参数配置
- 作文 深海机器人_海底机器人作文500字
- 安卓无障碍API封装库: Android-Accessibility-Api
- JSP之数据库连接池·笔记