SpringBoot整合MyBatis

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

注:

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

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

  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/


方法一:多数据源的mytis

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

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

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


如上是定义了两个数据源

然后在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依赖

<dependency>
     <groupId>org.mybatis.spring.bootgroupId>
     <artifactId>mybatis-spring-boot-starterartifactId>
     <version>1.1.1version>
dependency>




配置数据源,这里使用的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 Mapfind();
   
   @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(推荐)












































评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值