Springboot整合Mybatis,配置多数据源

目录

 

本文是以分包的方式实现mybatias的多数据源配置,还有另外一种方式:以AOP方式实现。

一、数据库配置文件

二、导入相关数据库支持

三、配置类

主数据源配置类:

次数据源配置类:

三、项目结构

四、启动类——启动类需要取消加载数据源自动配置 

五、Controller

六、service

七、Mapper

八、mapper.xml

九、postMan调用


本文是以分包的方式实现mybatias的多数据源配置,还有另外一种方式:以AOP方式实现。

一、数据库配置文件

#端口
server.port=8091
#数据库相关配置
#数据源一
spring.datasource.one.jdbc-url=jdbc:oracle:thin:@127.0.0.1:1521:kpwh
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.driver-class-name=oracle.jdbc.driver.OracleDriver
#数据源二
spring.datasource.two.jdbc-url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.Driver

####mybatis配置
# 这种方式需要自己在resources目录下创建mapper目录然后存放xml
mybatis.mapper-locations=classpath:/mapper/*/*.xml 
#mybatis.config-location=classpath:/mybatis/mybatis-config.xml
# 指定POJO扫描包来让mybatis自动扫描到自定义POJO
mybatis.type-aliases-package=com.ykx.transinfo.model
# 驼峰命名规范 如:数据库字段是  order_id 那么 实体字段就要写成 orderId
mybatis.configuration.map-underscore-to-camel-case=true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
mybatis.configuration.log-impl= org.apache.ibatis.logging.stdout.StdOutImpl

二、导入相关数据库支持

		<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>

三、配置类

主数据源配置类:

/**   
 * Copyright © 2020 eSunny Info. Tech Ltd. All rights reserved.
 * 功能描述:
 * @Title: d.java  
 * @Package com.ykx.transinfo.datasource  
 * @Description: TODO  
 * @author Administrator   
 * @date 2020年4月1日 下午4:45:12  
 * @version  
 */  

package com.ykx.transinfo.datasource;

/**   
 * 类名称: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);
    }
}

三、项目结构

注意:重点是mapper结构和配置类里的路径对应

四、启动类——启动类需要取消加载数据源自动配置 

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);
	}

}

五、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;
    }
}

六、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);
	}

}

七、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);
	
}

八、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>

九、postMan调用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章