最近刚接触spring boot,正是因为他的及简配置方便开发,促使我下定决心要用它把之前写的项目重构,那么问题来了,spring boot怎么整合mybatis呢,下面几个配置类来搞定。
在我的代码当中是实现了数据库读写分离的,所以代码仅做参考,如有需要可以加我微信:benyzhous
【后续更新】
1、文件结构
DataBaseConfiguration.Java用来获取数据库连接配置信息,配置从application.properties中读取
MybatisConfiguration.java也就是MyBatis配置核心入口,构建连接创建SqlSessionFactory
2、下面直接贴代码,有问题的话可以留言或者加我的微信公众号:cha-baba,或者个人微信号:benyzhous
application.yml 相关配置
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# Server settings server: port: 8080 address:localhost # DATASOURCE jdbc: driverClass: com.mysql.jdbc.Driver url: jdbc:mysql: //127.0.0.1:3306/local-kaishustory?useUnicode=true&characterEncoding=utf-8 username: root password: root # SPRING PROFILES spring: # HTTP ENCODING http: encoding.charset: UTF- 8 encoding.enable: true encoding.force: true # WeiXin Configuration weixin: mp: appid: xx secret: ee token: weixin aeskey: # MyBatis mybatis: typeAliasesPackage: com.modou.**.domain mapperLocations: classpath:/com/modou /**/ mapper/*.xml configLocation: classpath:/mybatis-config.xml # LOGGING logging: level: com.ibatis:DEBUG |
DataBaseConfiguration.java
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package com.modou.conf.mybatis; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import org.springframework.transaction.annotation.EnableTransactionManagement; import com.alibaba.druid.pool.DruidDataSource; @Configuration @EnableTransactionManagement public class DataBaseConfiguration implements EnvironmentAware { private RelaxedPropertyResolver propertyResolver; private static Logger log = LoggerFactory.getLogger(DataBaseConfiguration. class ); @Override public void setEnvironment(Environment env) { this .propertyResolver = new RelaxedPropertyResolver(env, "jdbc." ); } @Bean (name= "writeDataSource" , destroyMethod = "close" , initMethod= "init" ) @Primary public DataSource writeDataSource() { log.debug( "Configruing Write DataSource" ); DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(propertyResolver.getProperty( "url" )); datasource.setDriverClassName(propertyResolver.getProperty( "driverClassName" )); datasource.setUsername(propertyResolver.getProperty( "username" )); datasource.setPassword(propertyResolver.getProperty( "password" )); return datasource; } @Bean (name= "readOneDataSource" , destroyMethod = "close" , initMethod= "init" ) public DataSource readOneDataSource() { log.debug( "Configruing Read One DataSource" ); DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(propertyResolver.getProperty( "url" )); datasource.setDriverClassName(propertyResolver.getProperty( "driverClassName" )); datasource.setUsername(propertyResolver.getProperty( "username" )); datasource.setPassword(propertyResolver.getProperty( "password" )); return datasource; } @Bean (name= "readTowDataSource" , destroyMethod = "close" , initMethod= "init" ) public DataSource readTowDataSource() { log.debug( "Configruing Read Two DataSource" ); DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(propertyResolver.getProperty( "url" )); datasource.setDriverClassName(propertyResolver.getProperty( "driverClassName" )); datasource.setUsername(propertyResolver.getProperty( "username" )); datasource.setPassword(propertyResolver.getProperty( "password" )); return datasource; } @Bean (name= "readDataSources" ) public List<DataSource> readDataSources(){ List<DataSource> dataSources = new ArrayList<DataSource>(); dataSources.add(readOneDataSource()); dataSources.add(readTowDataSource()); return dataSources; } } |
MyBatisConfiguration.java
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package com.modou.conf.mybatis; import java.util.List; import javax.annotation.Resource; import javax.persistence.EntityManager; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.plugin.rw.RoundRobinRWRoutingDataSourceProxy; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * * 获取第二个数据库的连接信息,在application.yml中配置,并指定特定的前缀 * */ @Configuration @ConditionalOnClass ({ EnableTransactionManagement. class , EntityManager. class }) @AutoConfigureAfter ({ DataBaseConfiguration. class }) @MapperScan (basePackages={ "com.modou.**.mapper" , "com.github.abel533.entity.mapper" }) public class MybatisConfiguration implements EnvironmentAware{ private static Log logger = LogFactory.getLog(MybatisConfiguration. class ); private RelaxedPropertyResolver propertyResolver; @Resource (name= "writeDataSource" ) private DataSource writeDataSource; @Resource (name= "readDataSources" ) private List<Object> readDataSources; @Override public void setEnvironment(Environment environment) { this .propertyResolver = new RelaxedPropertyResolver(environment, "mybatis." ); } @Bean @ConditionalOnMissingBean public SqlSessionFactory sqlSessionFactory() { try { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(roundRobinDataSouceProxy()); sessionFactory.setTypeAliasesPackage(propertyResolver .getProperty( "typeAliasesPackage" )); sessionFactory .setMapperLocations( new PathMatchingResourcePatternResolver() .getResources(propertyResolver .getProperty( "mapperLocations" ))); sessionFactory .setConfigLocation( new DefaultResourceLoader() .getResource(propertyResolver .getProperty( "configLocation" ))); return sessionFactory.getObject(); } catch (Exception e) { logger.warn( "Could not confiure mybatis session factory" ); return null ; } } @Bean public RoundRobinRWRoutingDataSourceProxy roundRobinDataSouceProxy(){ RoundRobinRWRoutingDataSourceProxy proxy = new RoundRobinRWRoutingDataSourceProxy(); proxy.setWriteDataSource(writeDataSource); proxy.setReadDataSoures(readDataSources); proxy.setReadKey( "READ" ); proxy.setWriteKey( "WRITE" ); return proxy; } @Bean @ConditionalOnMissingBean public DataSourceTransactionManager transactionManager() { return new DataSourceTransactionManager(writeDataSource); } } |
Application.java
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package com.modou.weixin; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import com.modou.weixin.service.HelloWorldService; /** * Created by chababa on 15/8/22. */ @Configuration @ComponentScan (basePackages={ "com.modou.conf" , "com.modou.weixin" }) @EnableAutoConfiguration public class Application implements CommandLineRunner{ @Autowired HelloWorldService helloWorldService; public static void main(String[] args) { SpringApplication.run(Application. class , args); } @Override public void run(String... args) throws Exception { System.out.println( this .helloWorldService.print()); } } |
3、maven pom.xml 相关依赖[我是基于我的多模块依赖,这里只是一个示意],其中配置了jrebel热部署插件,需要搭配jrebel6.2.1,具体配置和下载请转向 http://blog.csdn.net/xiaoyu411502/article/details/48047369
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<?xml version= "1.0" ?> <project xsi:schemaLocation= " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd " xmlns= " http://maven.apache.org/POM/4.0.0 " xmlns:xsi= " http://www.w3.org/2001/XMLSchema-instance " > <modelVersion> 4.0 . 0 </modelVersion> <parent> <groupId>com.modou.weixin</groupId> <artifactId>weixin-boot-parent</artifactId> <version> 0.0 . 1 -SNAPSHOT</version> <relativePath>../weixin-boot-parent</relativePath> </parent> <artifactId>weixin-boot-services</artifactId> <name>weixin-boot-services</name> <url>http: //maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF- 8 </project.build.sourceEncoding> <springloaded.version> 1.2 . 4 .RELEASE</springloaded.version> </properties> <dependencies> <dependency> <groupId>com.modou.weixin</groupId> <artifactId>weixin-boot-sdk</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.modou.weixin</groupId> <artifactId>mybatis-plugin-rw</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> </dependency> </dependencies> </project> |
以上所述是小编给大家介绍的Spring boot整合Mybatis的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.csdn.net/xiaoyu411502/article/details/48164311