最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis配置雙數(shù)據(jù)源/多數(shù)據(jù)源的實(shí)踐方式

 更新時(shí)間:2025年11月12日 09:03:24   作者:sayyy  
本文介紹了如何在Spring Boot項(xiàng)目中配置兩個(gè)數(shù)據(jù)源,兩個(gè)MyBatis實(shí)例,以及如何使用MyBatis Generator和PageHelper插件進(jìn)行數(shù)據(jù)庫操作和分頁,通過配置多個(gè)數(shù)據(jù)源,可以實(shí)現(xiàn)對不同數(shù)據(jù)庫的訪問,同時(shí),MyBatis Generator可以幫助快速生成MyBatis的Mapper和XML文件,提高開發(fā)效率

前言

  • spring boot 2.0.0.RELEASE
  • maven 3.5
  • eclipse 4.9.0
  • mybatis 1.3.2
  • mybatis generator 1.3.2
  • pagehelper(mybatis 分頁插件) 1.2.5
  • oracle 12c

在spring boot項(xiàng)目中,使用mybatis操作數(shù)據(jù)庫,很方便。經(jīng)過親測,比jpa好用。

mybatis提供了代碼生成器mybatis generator。使用mybatis generator可以很方便的生成mybatis代碼。

mybatis分頁插件Mybatis-PageHelper,很好的解決了分頁問題。

spring boot項(xiàng)目默認(rèn)提供1個(gè)數(shù)據(jù)源,多個(gè)數(shù)據(jù)源時(shí),需要手動進(jìn)行一些處理,如下。

概念

  • 數(shù)據(jù)源:javax.sql.DataSource類型。起到作為連接數(shù)據(jù)庫的橋梁的作用。
  • mybatis SessionFactory:org.apache.ibatis.session.SqlSessionFactory類型。mybatis通過該類獲取數(shù)據(jù)源。
  • Mybatis PageHelper:mybatis分頁插件,通過該插件可以很方便的實(shí)現(xiàn)分頁。
  • mybatis generator:mybatis代碼生成工具,通過該工具可以很方便的生成mybatis代碼。

步驟簡述

  • 先配置2個(gè)數(shù)據(jù)源,分別連2個(gè)數(shù)據(jù)庫。
  • 再配置2個(gè)mybatis,使mybatis能夠工作。
  • 然后配置2個(gè)mybatis的分頁插件,可以使用pagehelper處理分頁。
  • 最后,配置2個(gè)mybatis generator,能夠生成2個(gè)mybatis的代碼。

配置2個(gè)數(shù)據(jù)源

spring boot AutoConfigure提供的DataSourceAutoConfiguration類,自動配置數(shù)據(jù)源。因此,先禁用DataSourceAutoConfiguration類。

...
@SpringBootApplication(exclude = { 
		DataSourceAutoConfiguration.class})
...
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

假設(shè),要配置兩個(gè)數(shù)據(jù)源,連接兩個(gè)數(shù)據(jù)庫,分別為db1、db2,需要做如下操作:

1,在application.properties配置文件中添加如下db1和db2的jdbc配置。

spring.datasource.db1.driverClassName =oracle.jdbc.OracleDriver
spring.datasource.db1.jdbcUrl=jdbc:oracle:thin:@<db1 ip>/db1
spring.datasource.db1.username=xxx
spring.datasource.db1.password=xxx
spring.datasource.db1.platform=oracle

spring.datasource.db2.driverClassName =oracle.jdbc.OracleDriver
spring.datasource.db2.jdbcUrl=jdbc:oracle:thin:@<db2 ip>/db2
spring.datasource.db2.username=xxx
spring.datasource.db2.password=xxx
spring.datasource.db2.platform=oracle

2,添加db1數(shù)據(jù)源配置類PrimaryMybatisConfiguration,db2數(shù)據(jù)源配置類Db2MybatisConfiguration。

3,類PrimaryMybatisConfiguration中,添加db1 DataSourcebean。類Db2MybatisConfiguration中,添加db2 DataSourcebean。 

  • PrimaryMybatisConfiguration
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    @Primary
    public DataSource dataSource() {
    	log.info("config primaryDataSource success.");
    	return DataSourceBuilder.create().build();
    }
  • Db2MybatisConfiguration
    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource dataSource() {
    	log.info("config db2DataSource success.");
    	return DataSourceBuilder.create().build();
    }

至此,兩個(gè)數(shù)據(jù)源(db1、db2),添加完成。

注:上面代碼中,默認(rèn)的數(shù)據(jù)源實(shí)現(xiàn)類:com.zaxxer.hikari.HikariDataSource。

配置2個(gè)mybatis

mybatis spring boot AutoConfigure提供的MybatisAutoConfiguration類,自動配置Mybatis。因此,先禁用MybatisAutoConfiguration類。

...
@SpringBootApplication(exclude = { 
		DataSourceAutoConfiguration.class,
		MybatisAutoConfiguration.class})
...
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

假設(shè),要配置兩個(gè)mybatis,分別使用db1數(shù)據(jù)源、db2數(shù)據(jù)源,需要做如下操作:

1,在application.properties配置文件中添加如下2個(gè)mybatis配置和對應(yīng)的@Configuration類。

  • 使用db1數(shù)據(jù)源的mybatis的配置文件
spring.datasource.db1.extend.mybatisMapperLocations=classpath:config/mybatis/mapper/*.xml
  • 使用db1數(shù)據(jù)源的mybatis的@Configuration類
...
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.db1.extend")
public class PrimaryMybatisProperties {
	
	private String mybatisMapperLocations;
	...
}
  • 使用db2數(shù)據(jù)源的mybatis的配置文件
spring.datasource.db2.extend.mybatisMapperLocations=classpath:config/mybatis/mapper2/*.xml
  • 使用db2數(shù)據(jù)源的mybatis的@Configuration類
...
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.db2.extend")
public class Db2MybatisProperties {
	
	private String mybatisMapperLocations;
	...
}

2,配置2個(gè)mybatis的SqlSessionFactory 

  • PrimaryMybatisConfiguration
@Configuration
@MapperScan(basePackages = { "xxx.db.mapper" },sqlSessionFactoryRef="primarySqlSessionFactory")
public class PrimaryMybatisConfiguration {
	private Logger log = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private PrimaryMybatisProperties property;

    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    @Primary
    public DataSource dataSource() {
    	log.info("config primaryDataSource success.");
    	return DataSourceBuilder.create().build();
    }

    @Bean(name = "primarySqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(
    		@Qualifier("primaryDataSource") DataSource dataSource) {
        try {
            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources(this.property.getMybatisMapperLocations()));
            log.info("config primarySqlSessionFactory success.");
            return sessionFactory.getObject();
        } catch (Exception e) {
            log.error("config primarySqlSessionFactory failure.", e);
            return null;
        }
    }
    
    @Bean(name = "primarySqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
    		@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Bean(name = "primaryTransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(
    		@Qualifier("primaryDataSource") DataSource dataSource) {
    	return new DataSourceTransactionManager(dataSource);
    }
}
  • Db2MybatisConfiguration
@Configuration
@MapperScan(basePackages = { "xxx.db2.mapper" },sqlSessionFactoryRef="db2SqlSessionFactory")
public class Db2MybatisConfiguration {
	private Logger log = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private Db2MybatisProperties property;

    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource dataSource() {
    	log.info("config db2DataSource success.");
    	return DataSourceBuilder.create().build();
    }

    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(
    		@Qualifier("db2DataSource") DataSource dataSource) {
        try {
            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources(this.property.getMybatisMapperLocations()));
            log.info("config db2SqlSessionFactory success.");
            return sessionFactory.getObject();
        } catch (Exception e) {
            log.error("config db2SqlSessionFactory failure.", e);
            return null;
        }
    }
    
    @Bean(name = "db2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
    		@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Bean(name = "db2TransactionManager")
    public DataSourceTransactionManager transactionManager(
    		@Qualifier("db2DataSource") DataSource dataSource) {
    	return new DataSourceTransactionManager(dataSource);
    }
}

至此,2個(gè)mybatis的SqlSessionFactory已配置完成。此時(shí),2個(gè)mybatis已經(jīng)可以工作。接下來需要配置分頁插件。

配置2個(gè)mybatis的分頁插件

pagehelper spring boot AutoConfigure提供的PageHelperAutoConfiguration類,自動配置Mybatis的分頁插件。因此,先禁用PageHelperAutoConfiguration類。

...
@SpringBootApplication(exclude = { 
		DataSourceAutoConfiguration.class,
		MybatisAutoConfiguration.class, 
		PageHelperAutoConfiguration.class })
...
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

假設(shè),要配置兩個(gè)mybatis的分頁插件,需要做如下操作:

1,在application.properties配置文件中添加如下2個(gè)mybatis分頁插件的配置和對應(yīng)的@Configuration類。

  • 使用db1數(shù)據(jù)源的mybatis分頁插件的配置文件
spring.datasource.db1.extend.pagehelperDialect=Oracle
spring.datasource.db1.extend.pagehelperReasonable=true
spring.datasource.db1.extend.pagehelperSupportMethodsArguments=true
spring.datasource.db1.extend.pagehelperOffsetAsPageNum=true
spring.datasource.db1.extend.pagehelperRowBoundsWithCount=true
spring.datasource.db1.extend.pagehelperParams=count=countSql;pageNum=pageNumKey;pageSize=pageSizeKey;
  • 使用db1數(shù)據(jù)源的mybatis分頁插件的@Configuration類
...
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.db1.extend")
public class PrimaryMybatisProperties {
	
	private String mybatisMapperLocations;
	private String pagehelperDialect;
	private String pagehelperReasonable;
	private String pagehelperSupportMethodsArguments;
	private String pagehelperParams;
	private String pagehelperOffsetAsPageNum;
	private String pagehelperRowBoundsWithCount;
	...
}
  • 使用db2數(shù)據(jù)源的mybatis分頁插件的配置文件
spring.datasource.db2.extend.pagehelperDialect=Oracle
spring.datasource.db2.extend.pagehelperReasonable=true
spring.datasource.db2.extend.pagehelperSupportMethodsArguments=true
spring.datasource.db2.extend.pagehelperOffsetAsPageNum=true
spring.datasource.db2.extend.pagehelperRowBoundsWithCount=true
spring.datasource.db2.extend.pagehelperParams=count=countSql;pageNum=pageNumKey;pageSize=pageSizeKey;
  • 使用db2數(shù)據(jù)源的mybatis分頁插件的@Configuration類
...
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.db2.extend")
public class Db2MybatisProperties {
	
	private String mybatisMapperLocations;
	private String pagehelperDialect;
	private String pagehelperReasonable;
	private String pagehelperSupportMethodsArguments;
	private String pagehelperParams;
	private String pagehelperOffsetAsPageNum;
	private String pagehelperRowBoundsWithCount;
	...
}

2,配置2個(gè)mybatis的SqlSessionFactory,增加分頁插件 

  • PrimaryMybatisConfiguration
@Configuration
@MapperScan(basePackages = { "xxx.db.mapper" },sqlSessionFactoryRef="primarySqlSessionFactory")
public class PrimaryMybatisConfiguration {
	private Logger log = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private PrimaryMybatisProperties property;

    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    @Primary
    public DataSource dataSource() {
    	log.info("config primaryDataSource success.");
    	return DataSourceBuilder.create().build();
    }

    @Bean(name = "primarySqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(
    		@Qualifier("primaryDataSource") DataSource dataSource) {
        try {
            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources(this.property.getMybatisMapperLocations()));
                    
			//分頁插件
			Interceptor interceptor = new PageInterceptor();
			Properties properties = new Properties();
			properties.setProperty("helperDialect", this.property.getPagehelperDialect());
			properties.setProperty("reasonable", this.property.getPagehelperReasonable());
			properties.setProperty("supportMethodsArguments",this.property.getPagehelperSupportMethodsArguments());
			properties.setProperty("params",this.property.getPagehelperParams());
			interceptor.setProperties(properties);
			sessionFactory.setPlugins(new Interceptor[] {interceptor});
         
            log.info("config primarySqlSessionFactory success.");
            return sessionFactory.getObject();
        } catch (Exception e) {
            log.error("config primarySqlSessionFactory failure.", e);
            return null;
        }
    }
    
    @Bean(name = "primarySqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
    		@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Bean(name = "primaryTransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(
    		@Qualifier("primaryDataSource") DataSource dataSource) {
    	return new DataSourceTransactionManager(dataSource);
    }
}
  • Db2MybatisConfiguration
@Configuration
@MapperScan(basePackages = { "xxx.db2.mapper" },sqlSessionFactoryRef="db2SqlSessionFactory")
public class Db2MybatisConfiguration {
	private Logger log = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private Db2MybatisProperties property;

    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource dataSource() {
    	log.info("config db2DataSource success.");
    	return DataSourceBuilder.create().build();
    }

    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(
    		@Qualifier("db2DataSource") DataSource dataSource) {
        try {
            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                    .getResources(this.property.getMybatisMapperLocations()));

			//分頁插件
			Interceptor interceptor = new PageInterceptor();
			Properties properties = new Properties();
			properties.setProperty("helperDialect", this.property.getPagehelperDialect());
			properties.setProperty("reasonable", this.property.getPagehelperReasonable());
			properties.setProperty("supportMethodsArguments",this.property.getPagehelperSupportMethodsArguments());
			properties.setProperty("params",this.property.getPagehelperParams());
			interceptor.setProperties(properties);
			sessionFactory.setPlugins(new Interceptor[] {interceptor});
			
            log.info("config db2SqlSessionFactory success.");
            return sessionFactory.getObject();
        } catch (Exception e) {
            log.error("config db2SqlSessionFactory failure.", e);
            return null;
        }
    }
    
    @Bean(name = "db2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
    		@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Bean(name = "db2TransactionManager")
    public DataSourceTransactionManager transactionManager(
    		@Qualifier("db2DataSource") DataSource dataSource) {
    	return new DataSourceTransactionManager(dataSource);
    }
}

配置2個(gè)mybatis generator

1,在pom.xml中引入mybatis generator

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	...
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<!-- mybatis generator 自動生成代碼插件 -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<configuration>
					<overwrite>true</overwrite>
					<verbose>true</verbose>
				</configuration>
				<dependencies>
					<dependency>
						<groupId>com.oracle.jdbc</groupId>
						<artifactId>ojdbc7</artifactId>
						<version>12.1.0.1</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
	</build>
</project>

2, 配置2個(gè)mybatis generator配置文件。

  • 使用db1數(shù)據(jù)源的mybatis generator的配置文件generatorConfig.xml.
  • 使用db1數(shù)據(jù)源的mybatis generator的配置文件generatorConfig2.xml.

3,使用mvn執(zhí)行mybatis generator命令。

  • 使用db1數(shù)據(jù)源的mybatis generator生成代碼命令
mvn -Dmybatis.generator.configurationFile=src/main/resources/generatorConfig.xml mybatis-generator:generate
  • 使用db2數(shù)據(jù)源的mybatis generator生成代碼命令
mvn -Dmybatis.generator.configurationFile=src/main/resources/generatorConfig2.xml mybatis-generator:generate

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

稻城县| 沈阳市| 太白县| 台中市| 灵丘县| 黄石市| 新河县| 江津市| 双峰县| 荣成市| 苏州市| 错那县| 赤水市| 龙南县| 临江市| 柳州市| 镇康县| 宁阳县| 夏河县| 云梦县| 秦皇岛市| 屯昌县| 石棉县| 武强县| 岳阳县| 逊克县| 阿拉尔市| 江永县| 皋兰县| 泰安市| 都昌县| 巩留县| 龙南县| 仙居县| 息烽县| 卢湾区| 东安县| 陈巴尔虎旗| 西城区| 巍山| 句容市|