SpringBoot整合Mybatis-plus配置多数据源
本文是以分包的,还有另外一种方式:以方式实现。实现动态数据源的几种方式,本文介绍mybatis和mybati-plus两种方式。
文章共2,910字 · 阅读需要大约10分钟
一键AI生成摘要,助你高效阅读
问答
·
目录
本文是以分包的方式实现mybatias的多数据源配置,还有另外一种方式:以AOP方式实现。
实现动态数据源的几种方式,本文介绍mybatis和mybati-plus两种方式
1.Mybatis
1.1.数据库配置文件
spring:
datasource:
dynamic:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
#设置默认的数据源或者数据源组
druid:
ds1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.6.70:3306/cpt?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: ykxdzky
password: ykxd
ds2:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: mysql://192.168.6.70:3306/ins?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: ykxdzky
password: ykx
1.2.导入相关数据库支持
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!--引入MySQL连接依赖包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--引入oracle连接依赖包 -->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope>
</dependency>
1.3.数据源配置类
主数据源配置类:
/**
* 类名称:d
* 类描述:
* 创建人:Administrator
* 创建时间:2020年4月1日 下午4:45:12
* 修改人:Administrator
* 修改时间:2020年4月1日 下午4:45:12
* 修改备注:
* @version
*/
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.boot.jdbc.DataSourceBuilder;
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 javax.sql.DataSource;
@Configuration
//配置mapper路径
@MapperScan(basePackages = "com.ykx.transinfo.mapper", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataSourceConfig1 {
// 将这个对象放入Spring容器中
@Bean(name = "test1DataSource")
// 表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.one")
public DataSource getDateSource1()
{
return DataSourceBuilder.create().build();
}
@Bean(name = "test1SqlSessionFactory")
// 表示这个数据源是默认数据源
@Primary
// @Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource") DataSource datasource)
throws Exception
{
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/one/*.xml"));
return bean.getObject();
}
@Bean("test1SqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate test1SqlSessionTemplate(
@Qualifier("test1SqlSessionFactory") SqlSessionFactory sessionFactory)
{
return new SqlSessionTemplate(sessionFactory);
}
}
次数据源配置类:
/**
* Copyright © 2020 eSunny Info. Tech Ltd. All rights reserved.
* 功能描述:
* @Title: s.java
* @Package com.ykx.transinfo.datasource
* @Description: TODO
* @author Administrator
* @date 2020年4月1日 下午4:45:38
* @version
*/
package com.ykx.transinfo.datasource;
/**
* 类名称:s
* 类描述:
* 创建人:Administrator
* 创建时间:2020年4月1日 下午4:45:38
* 修改人:Administrator
* 修改时间:2020年4月1日 下午4:45:38
* 修改备注:
* @version
*/
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.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.ykx.transinfo.mysqlmapper", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSourceConfig2 {
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource getDateSource2()
{
return DataSourceBuilder.create().build();
}
@Bean(name = "test2SqlSessionFactory")
public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource") DataSource datasource)
throws Exception
{
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/two/*.xml"));
return bean.getObject();
}
@Bean("test2SqlSessionTemplate")
public SqlSessionTemplate test2SqlSessionTemplate(
@Qualifier("test2SqlSessionFactory") SqlSessionFactory sessionFactory)
{
return new SqlSessionTemplate(sessionFactory);
}
}
2.项目结构
注意:重点是mapper结构和配置类里的路径对应
2.1.启动类
启动类需要取消加载数据源自动配置
package com.ykx.transinfo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling;
// @MapperScan 和dao层@Mapper 二选一
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableScheduling
@MapperScan("com.ykx.transinfo.mapper,com.ykx.transinfo.mysqlmapper")
public class DataServerApplication {
public static void main(String[] args) {
SpringApplication.run(DataServerApplication.class, args);
}
}
2.2.Controller测试
这里只演示数据源二的相关调用
/**
* Copyright © 2020 eSunny Info. Tech Ltd. All rights reserved.
* 功能描述:
* @Title: UserController.java
* @Package com.ykx.transinfo.controller
* @Description: TODO
* @author Administrator
* @date 2020年4月1日 下午2:59:06
* @version
*/
package com.ykx.transinfo.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.ykx.transinfo.model.User;
import com.ykx.transinfo.service.UserService;
/**
* 类名称:UserController
* 类描述:
* 创建人:Administrator
* 创建时间:2020年4月1日 下午2:59:06
* 修改人:Administrator
* 修改时间:2020年4月1日 下午2:59:06
* 修改备注:
* @version
*/
@RestController
public class UserController {
@Autowired
private UserService service;
@PostMapping("/user")
public Object selectUserById(
@RequestParam(name = "userId", required = false, defaultValue = "1995")String userid){
JSONObject map = new JSONObject();//创建JSONmap来存放JSON数据传到前台
List<User> users = null;
try {
// 这里的custCerNo是指按证件号码查询,1是指:页数 ,2是指每页展示的数据
users = service.selectUserById(userid);
map.put("data", users);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return users;
}
}
2.3.service
/**
* Copyright © 2020 eSunny Info. Tech Ltd. All rights reserved.
* 功能描述:
* @Title: UserServiceImp.java
* @Package com.ykx.transinfo.service
* @Description: TODO
* @author Administrator
* @date 2020年4月1日 下午2:56:41
* @version
*/
package com.ykx.transinfo.service.imp;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ykx.transinfo.model.User;
import com.ykx.transinfo.mysqlmapper.UserMapper;
import com.ykx.transinfo.service.UserService;
/**
* 类名称:UserServiceImp
* 类描述:
* 创建人:Administrator
* 创建时间:2020年4月1日 下午2:56:41
* 修改人:Administrator
* 修改时间:2020年4月1日 下午2:56:41
* 修改备注:
* @version
*/
@Service
public class UserServiceImp implements UserService{
@Autowired
private UserMapper userMapper;
/**
* @see com.ykx.transinfo.service.UserService#selectUserById(java.lang.String)
* @Function: UserServiceImp.java
* @Description: 该函数的功能描述
*
* @param:描述1描述
* @return:返回结果描述
* @throws:异常描述
*
* @version: v1.0.0
* @author: Administrator
* @date: 2020年4月1日 下午2:57:49
*
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2020年4月1日 Administrator v1.0.0 修改原因
*/
@Override
public List<User> selectUserById(String userId) {
return userMapper.selectUserById(userId);
}
}
2.4.Mapper
/**
* Copyright © 2020 eSunny Info. Tech Ltd. All rights reserved.
* 功能描述:
* @Title: UserMapper.java
* @Package com.ykx.transinfo.mysqlmapper
* @Description: TODO
* @author Administrator
* @date 2020年4月1日 下午2:32:40
* @version
*/
package com.ykx.transinfo.mysqlmapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.ykx.transinfo.model.User;
/**
* 类名称:UserMapper
* 类描述:
* 创建人:Administrator
* 创建时间:2020年4月1日 下午2:32:40
* 修改人:Administrator
* 修改时间:2020年4月1日 下午2:32:40
* 修改备注:
* @version
*/
@Repository
public interface UserMapper {
List<User> selectUserById(@Param("userId") String userId);
}
2.5.mapper.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.ykx.transinfo.mysqlmapper.UserMapper">
<select id="selectUserById" parameterType="java.lang.String" resultType="com.ykx.transinfo.model.User">
select * from user WHERE 1 = 1
<if test="userId != null and userId !=''">
AND user_id = #{userId,jdbcType=VARCHAR}
</if>
ORDER BY user_id
</select>
</mapper>
2.6.postMan调用
更多推荐
已为社区贡献25条内容
所有评论(0)