Spring boot怎么整合Mybatis

网友投稿 226 2023-04-28


Spring boot怎么整合Mybatis

最近刚接触spring boot,正是因为他的及简配置方便开发,促使我下定决心要用它把之前写的项目重构,那么问题来了,spring boot怎么整合mybatis呢,下面几个配置类来搞定。

在我的代码当中是实现了数据库读写分离的,所以代码仅做参考,如有需要可以加我微信:benyzhous

【后续更新】

1、文件结构

DataBaseConfiguration.java用来获取数据库连接配置信息,配置从application.properties中读取

MybatisConfiguration.java也就是MyBatis配置核心入口,构建连接创建SqlSessionFactory

application.yml 相关配置

# 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

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.springfrhttp://amework.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 readDataSources(){

List dataSources = new ArrayList();

dataSources.add(readOneDataSource());

dataSources.add(readTowDataSource());

return dataSources;

}

}

MyBatisConfiguration.java

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

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

System.out.println(this.helloWorldService.print());

}

}

3、maven pom.xml 相关依赖[我是基于我的多模块依赖,这里只是一个示意],其中配置了jrebel热部署插件,需要搭配jrebel6.2.1,具体配置和下载请转向 http://blog.csdn.net/xiaoyu411502/article/details/48047369

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://w3.org/2001/XMLSchema-instance">

4.0.0

com.modou.weixin

weixin-boot-parent

0.0.1-SNAPSHOT

../weixin-boot-parent

weixin-boot-serhttp://vices

weixin-boot-services

http://maven.apache.org

UTF-8

1.2.4.RELEASE

com.modou.weixin

weixin-boot-sdk

${project.version}

com.modou.weixin

mybatis-plugin-rw

${project.version}

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework

spring-jdbc

javax.persistence

persistence-api

org.mybatis

mybatis

org.mybatis

mybatis-spring

com.alibaba

druid

mysql

mysql-connector-java

com.github.pagehelper

pagehelper

tk.mybatis

mapper

org.mybatis.generator

mybatis-generator-core

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://w3.org/2001/XMLSchema-instance">

4.0.0

com.modou.weixin

weixin-boot-parent

0.0.1-SNAPSHOT

../weixin-boot-parent

weixin-boot-serhttp://vices

weixin-boot-services

http://maven.apache.org

UTF-8

1.2.4.RELEASE

com.modou.weixin

weixin-boot-sdk

${project.version}

com.modou.weixin

mybatis-plugin-rw

${project.version}

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework

spring-jdbc

javax.persistence

persistence-api

org.mybatis

mybatis

org.mybatis

mybatis-spring

com.alibaba

druid

mysql

mysql-connector-java

com.github.pagehelper

pagehelper

tk.mybatis

mapper

org.mybatis.generator

mybatis-generator-core

以上所述是给大家介绍的Spring boot整合Mybatis的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Vue中父组件向子组件通信的方法
下一篇:ReactNative实现图片上传功能的示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~