SpringBoot中使用多数据源[MySQL]

在这里插入代码片
<!-- 启动springboot -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
//配置application.properties

spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.url=jdbc:mysql://192.168.1.25/szch3?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
spring.datasource.test1.username=root
spring.datasource.test1.password=szch3

spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.url=jdbc:mysql://192.168.1.20/szch3?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
spring.datasource.test2.username=root
spring.datasource.test2.password=szch3

项目结构
在这里插入图片描述

Configuration数据源配置1

package com.szch3.configuration;

import javax.sql.DataSource;
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;

@Configuration

@MapperScan(basePackages = { "com.szch3.mapper.source1" }, sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataSource1Config { // 注入到这个容器

	@Bean(name = "test1DataSource") // 表示取application.properties配置文件中的前缀
	@ConfigurationProperties(prefix = "spring.datasource.test1")
	@Primary
	public DataSource testDataSouce() {
		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(
	              // 设置mybatis的xml所在位置
	             new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/source1/*.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) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
	
}

Configuration数据源配置2

package com.szch3.configuration;

import javax.sql.DataSource;
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;

@Configuration

@MapperScan(basePackages = { "com.szch3.mapper.source2" }, sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSource2Config { // 注入到这个容器

	@Bean(name = "test2DataSource") // 表示取application.properties配置文件中的前缀
	@ConfigurationProperties(prefix = "spring.datasource.test2")
	public DataSource testDataSouce() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "test2SqlSessionFactory")
	public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource)
			throws Exception {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		bean.setDataSource(dataSource);
		bean.setMapperLocations(
				// 设置mybatis的xml所在位置
				new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/source2/*.xml"));
		return bean.getObject();
	} // 配置事物

	@Bean(name = "test2TransactionManager")
	public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}

	@Bean(name = "test2SqlSessionTemplate")
	public SqlSessionTemplate testSqlSessionTemplate(
			@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

Controller层

controller层
package com.szch3.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.szch3.common.SysResult;
import com.szch3.pojo.UserInfo;
import com.szch3.service.source1.IndexService;
import com.szch3.service.source2.IndexService2;

@Controller
public class IndexController {
	@Autowired
	private  IndexService indexService;
	@Autowired
	private  IndexService2 indexService2;
	/*
	 * 增
	 */
	@RequestMapping("insert")
	@ResponseBody
	public SysResult indexInsert(String  account,String password) {
		int i=indexService.insert(account,password);
		return SysResult.oK();
		
	}
	/*
	 * 删
	 */
	@RequestMapping("delete")
	@ResponseBody
	public SysResult indexDelete(String  account) {
		int i=indexService.delete(account);
		return SysResult.oK();
		
	}
	/*
	 * 改
	 */
	@RequestMapping("update")
	@ResponseBody
	public SysResult indexUpdate(UserInfo userInfo) {
		indexService.indexUpdate(userInfo);
		return SysResult.oK();
	}
	/*
	 * 查
	 */
	@RequestMapping("select")
	@ResponseBody
	public SysResult login(String  account,String password) {
		UserInfo user=indexService2.select(account,password);
		return SysResult.oK(user);
		
	}
}

Service层增、删、改(1)

在这里插入代码片
package com.szch3.service.source1;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.szch3.mapper.source1.IndexMapper;
import com.szch3.pojo.UserInfo;
@Service
public class IndexService {
	@Autowired
	private IndexMapper indexMapper;
	@Transactional(transactionManager =("test1TransactionManager"))
	public int insert(String account, String password) {
		// TODO Auto-generated method stub
		UserInfo userInfo = new UserInfo();
		userInfo.setAccount(account);
		userInfo.setPwd(password);
		userInfo.setNickname("刘备");
		
		int insert = indexMapper.insert(userInfo);
		return insert;
	}
	@Transactional(transactionManager =("test1TransactionManager"))
	public int delete(String account) {
		int i=indexMapper.indexDelete(account);
		return i;
	}
	@Transactional(transactionManager =("test1TransactionManager"))
	public void indexUpdate(UserInfo userInfo) {
		String account=userInfo.getAccount();
		String pwd = userInfo.getPwd();
		String nickname = userInfo.getNickname();
		Boolean sex = userInfo.getSex();
		int updateByExample = indexMapper.indexUpdate(account, pwd,nickname,sex);
		System.err.println(updateByExample);
		
	}

}

Service层查询(2)

package com.szch3.service.source2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.szch3.mapper.source2.IndexMapper2;
import com.szch3.pojo.UserInfo;
@Service
public class IndexService2 {
	@Autowired
	private IndexMapper2 indexMapper2;
	
	@Transactional(transactionManager =("test2TransactionManager"))
	public UserInfo select(String account, String password) {
		//查询用户名下的信息
		//根据账号查询密码
		System.err.println("account:"+account+",password:"+password);
		UserInfo userInfo=indexMapper2.selectPassword(account,password);
		System.err.println(userInfo.toString());
		return userInfo;
	}
	
}

Mapper层增、删、改(1)

package com.szch3.mapper.source1;



import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;

import com.szch3.common.MyMapper;
import com.szch3.pojo.UserInfo;

@Mapper
@CacheConfig(cacheNames = "UserInfo")//缓存需要的注解,如果不使用缓存,可以去掉
public interface IndexMapper extends MyMapper<UserInfo>{
	//@ Cacheable(key = “'leader'+#p0 +#p1 +#p2” )一般用法,#p0表示方法的第一个参数,#p1表示第二个参数,以此类推。
	/**
	 * 删除用户的信息,并删除缓存
	 * @param account
	 * @return
	 */
	@CacheEvict(key ="'users'+#p0",allEntries=true)//缓存需要的注解,如果不使用缓存,可以去掉
	@Delete("delete from users where account=#{account}")//缓存需要的注解,如果不使用缓存,可以去掉
	int indexDelete(String account);
	/**
	 * 修改用户的信息,并跟新缓存
	 * @param account
	 * @param pwd
	 * @param nickName
	 * @param sex
	 * @return
	 */
	@CachePut(key = "'users'+#p0")//缓存需要的注解,如果不使用缓存,可以去掉
	int indexUpdate(@Param("account")String account ,@Param("password")String pwd,@Param("nickName")String nickName,@Param("sex")Boolean sex);

}

Mapper层查询(2)

在这里插入代码片
package com.szch3.mapper.source2;



import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;

import com.szch3.common.MyMapper;
import com.szch3.pojo.UserInfo;
@Mapper
@CacheConfig(cacheNames = "UserInfo")//缓存需要的注解,如果不使用缓存,可以去掉
public interface IndexMapper2 extends MyMapper<UserInfo>{
	/**
	 * 查询用户的信息,并写入缓存
	 * @param account
	 * @param password
	 * @return
	 */
	@Cacheable(key="'users'+#p0")//缓存需要的注解,如果不使用缓存,可以去掉
	UserInfo selectPassword(@Param("account")String account,@Param("password")String password);

}

数据源的配置XML1

在这里插入代码片
<?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.szch3.mapper.source1.IndexMapper">
<!-- 	<select id="selectPassword" resultType="com.szch3.pojo.UserInfo">
	select * from users where account=#{account} and pwd=#{password}
	</select> -->
	<update id="indexUpdate">
	update users set pwd =#{password},nickname=#{nickName},sex=#{sex} where account=#{account};
	</update>
</mapper> 

数据源的配置XML2

在这里插入代码片
<?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.szch3.mapper.source2.IndexMapper2">
	<select id="selectPassword" resultType="com.szch3.pojo.UserInfo">
		select * from users where account=#{account} and pwd=#{password}
	</select> 
</mapper> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值