首页 > 代码库 > SpringBoot整合MyBatis

SpringBoot整合MyBatis

转载请在文章最上方加上此句话:原文地址:http://www.cnblogs.com/zhuxiaojie/p/5836159.html

 

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

 

 

注:1.本人亲测可用,包括事务。

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

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

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

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

 

 

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

        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.1.1</version>        </dependency>

 

 

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

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

#jdbcjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://192.168.137.2:3306/weichat?useUnicode=true&characterEncoding=utf8jdbc.username=rootjdbc.password=123456jdbc.maxActive=2335jdbc.maxIdel=120jdbc.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//加上这个注解,使得支持事务@EnableTransactionManagementpublic 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;@Mapperpublic interface TestDao {    @Select("select * from wx_userinfo;")    public Map<String,Object> 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(推荐)

SpringBoot整合MyBatis