SpringBoot整合MyBatis

  1. 云栖社区>
  2. 博客>
  3. 正文

SpringBoot整合MyBatis

java填坑路 2018-07-02 13:48:29 浏览473
展开阅读全文

前言:这段时间用springboot感觉确实挺好用的,很大程度上的简化了开发,由其是它的自动化配置,让大大的提高了开发效率,现在我们要让SpringBoot与MyBatis一起工作。

注:

本人亲测可用,包括事务。

使用注解形式,全程无MyBatis与Spring的配置文件

文章时间为2016-9-3日,使用的是MyBatis官方提供的mybatis-spring-boot-starter,当前最新版本为1.1.1。

mybatis-spring-boot-starter的github源码地址为:https://github.com/mybatis/spring-boot-starter

mybatis-spring-boot-stater的官方文档地址为:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

方法一:多数据源的mytis

强烈推荐:只要一行注解,使用mybatis的多数据源,无需要任何配置。

github地址:https://gitee.com/xiaojiezhu/mybadis-starter.git

使用方法如下,先加入如下配置文件,在yaml中

mysql:

server:

saas:

url: "jdbc:mysql://localhost:3306/saas?useUnicode=true&characterEncoding=utf8"

username: root

password: 123

driverClassName: com.mysql.jdbc.Driver

initialSize: 1 #初始化大小

minIdle: 1 #空闲连接池的大小

maxActive: 50 #最大激活数量

saas2:

url: "jdbc:mysql://localhost:3306/saas2?useUnicode=true&characterEncoding=utf8"

username: root

password: 123

driverClassName: com.mysql.jdbc.Driver

initialSize: 1 #初始化大小

minIdle: 1 #空闲连接池的大小

maxActive: 50 #最大激活数量

如上是定义了两个数据源

然后在main方法所在类加上此注解

@MyBadisLoader({"saas = com.llc.admin.web.dao.saas = classpath:mapper/*xml" , 

"saas2 = com.llc.admin.web.dao.saas2 = classpath:mapper/*.xml,classpath:mapper/user/*.xml"})

@SpringBootApplication

public class WebApplication {

public static void main(String[] args) {

SpringApplication.run(WebApplication.class,args);

}

}

上面的注解中 saas是上方配置文件,数据源的名称,后面是扫描的接口包名,可以用逗号分隔传入多个,再后面是扫描xml的配置文件路径,也支持多个 注解中接收的是一个数组,所以支持多个数据源,除此不需要任何代码就可以使用,就可以直接支持多数据源。

下面方法二是使用mybatis官方的starter,需要经过一些配置才行。

方法二:使用mybatis官方starter

首先加入mybatis-spring-boot-stater的Maven依赖

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.1.1

配置数据源,这里使用的dbcp的数据源,具体大家可以看自己的情况来使用

在src/main/resource中,添加一个prop.properties配置文件,这里面添加了一些数据库连接的信息

#jdbc

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://192.168.137.2:3306/weichat?useUnicode=true&characterEncoding=utf8

jdbc.username=root

jdbc.password=123456

jdbc.maxActive=2335

jdbc.maxIdel=120

jdbc.maxWait=100

然后加上下面的代码注入数据源

@Configuration

//这个注解导入刚才增加的jdbc配置文件

@PropertySource("classpath:prop.properties")

public class DataSourceConfiguration {

@Value("${jdbc.driver}")

private String driver;

@Value("${jdbc.url}")

private String url;

@Value("${jdbc.username}")

private String username;

@Value("${jdbc.password}")

private String password;

@Value("${jdbc.maxActive}")

private int maxActive;

@Value("${jdbc.maxIdel}")

private int maxIdel;

@Value("${jdbc.maxWait}")

private long maxWait;

@Bean

public BasicDataSource dataSource(){

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName(driver);

dataSource.setUrl(url);

dataSource.setUsername(username);

dataSource.setPassword(password);

dataSource.setMaxActive(maxActive);

dataSource.setMaxIdle(maxIdel);

dataSource.setMaxWait(maxWait);

dataSource.setValidationQuery("SELECT 1");

dataSource.setTestOnBorrow(true);

return dataSource;

}

}

增加MyBatis的配置

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.SqlSessionFactoryBean;

import org.mybatis.spring.SqlSessionTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import org.springframework.transaction.PlatformTransactionManager;

import org.springframework.transaction.annotation.EnableTransactionManagement;

import org.springframework.transaction.annotation.TransactionManagementConfigurer;

/**

* @author zxj

*

*/

@Configuration

//加上这个注解,使得支持事务

@EnableTransactionManagement

public class MyBatisConfig implements TransactionManagementConfigurer {

@Autowired

private DataSource dataSource;

@Override

public PlatformTransactionManager annotationDrivenTransactionManager() {

 return new DataSourceTransactionManager(dataSource);

}

@Bean(name = "sqlSessionFactory")

public SqlSessionFactory sqlSessionFactoryBean() {

SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

bean.setDataSource(dataSource);

try {

return bean.getObject();

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

@Bean

public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

然后需要配置MyBatis配置文件的路径,这个配置需要与上面的配置分开来写,因为它们有着一个先后顺序

import org.mybatis.spring.mapper.MapperScannerConfigurer;

import org.springframework.boot.autoconfigure.AutoConfigureAfter;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

* 扫描mybatis的接口

* @author zxj

*

*/

@Configuration

// 因为这个对象的扫描,需要在MyBatisConfig的后面注入,所以加上下面的注解

@AutoConfigureAfter(MyBatisConfig.class)

public class MyBatisMapperScannerConfig {

@Bean

public MapperScannerConfigurer mapperScannerConfigurer() {

MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

//获取之前注入的beanName为sqlSessionFactory的对象

mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");

//指定xml配置文件的路径

mapperScannerConfigurer.setBasePackage("com.framework.msg.mapper");

return mapperScannerConfigurer;

}

}

然后这就是配置完了,真的很简单,但是细心的朋友可能会问,代码里面怎么没有配置MyBatis接口的地址呢?

在这里,使用@Mapper注解来标识一个接口为MyBatis的接口,MyBatis会自动寻找这个接口,如下

import java.util.Map;

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Param;

import org.apache.ibatis.annotations.Select;

@Mapper

public interface TestDao {

@Select("select * from wx_userinfo;")

public Map find();

@Insert("insert into wx_userinfo(openid,status,nickname,sex,city,province,country,headimgurl,subscribe_time) "+

 "values(#{id},1,'nick',1,'city','provi','contr','img',now())")

public int insert(@Param("id")int id);

}

这样就可以使用了,当然,在这之前,你得开启@ComponentScan注解,或者直接使用@SpringBootApplication(推荐)

欢迎工作一到五年的Java程序员朋友们加入Java架构开发:744677563

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

网友评论

登录后评论
0/500
评论
java填坑路
+ 关注