(六)Spring Boot整合mybtis

Spring Boot目前整合Mybatis的方式有两种,一种是Mybatis官方发布的mybatis-spring-boot-starter 一种是将传统的xml 改为java配置的方式. 
数据源使用阿里的druid,并配置druid的监控,开启事务管理,原项目下载:点此下载

引入依赖


	org.mybatis.spring.boot
	mybatis-spring-boot-starter
	1.3.0

  
	com.github.pagehelper  
	pagehelper  
	4.0.0  

 

	mysql
	mysql-connector-java



	com.alibaba
	druid
	1.0.28

之前的基于xml的配置 applicationContext-dao.xml


	
	
	
	
	
		
		
		
		
		
		
	
	
	
		
		
	
	
	
		
	

将上面的xml配置 改为基于java的配置
初始化一个Bean,使用@Configuration注解和@Bean之前也有讲过这两个注解的作用,类的名称我们和xml的名称相同
package com.test.springboot.config;


import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;


@Configuration
public class ApplicationContextDao {
	
	@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("${druid.username}")
	private String druidUsername;
	
	@Value("${druid.password}")
	private String druidPassword;
	
	/**
	 * 配置Druid数据源
	 * @return
	 * @throws SQLException
	 */
	@Bean(name="dataSource",destroyMethod="close")
	public DruidDataSource dataSource() throws SQLException{
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setDriverClassName(driver);
		dataSource.setUrl(url);
		dataSource.setUsername(username);
        dataSource.setPassword(password);
        //配置最大连接
        dataSource.setMaxActive(300);
        //配置初始连接
        dataSource.setInitialSize(20);
        //配置最小连接
        dataSource.setMinIdle(10);
        //连接等待超时时间
        dataSource.setMaxWait(60000);
        //间隔多久进行检测,关闭空闲连接
        dataSource.setTimeBetweenEvictionRunsMillis(60000);
        //一个连接最小生存时间
        dataSource.setMinEvictableIdleTimeMillis(300000);
        //连接等待超时时间 单位为毫秒 缺省启用公平锁,
        //并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁
        dataSource.setUseUnfairLock(true);
        //用来检测是否有效的sql
        dataSource.setValidationQuery("select 'x'");
        dataSource.setTestWhileIdle(true);
        //申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能
        dataSource.setTestOnBorrow(false);
        //归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能
        dataSource.setTestOnReturn(false);
        //打开PSCache,并指定每个连接的PSCache大小启用poolPreparedStatements后,
        //PreparedStatements 和CallableStatements 都会被缓存起来复用,
        //即相同逻辑的SQL可以复用一个游标,这样可以减少创建游标的数量。
        dataSource.setPoolPreparedStatements(true);
        dataSource.setMaxOpenPreparedStatements(20);
        //配置sql监控的filter
        dataSource.setFilters("stat,wall,log4j");
        try {
            dataSource.init();
        } catch (SQLException e) {
            throw new RuntimeException("druid datasource init fail");
        }
        return dataSource;
	}
	
	/**
     * druid监控
     * @return
     */
    @Bean
    public ServletRegistrationBean druidServlet() {
        ServletRegistrationBean reg = new ServletRegistrationBean();
        reg.setServlet(new StatViewServlet());
        reg.addUrlMappings("/druid/*");
        reg.addInitParameter("loginUsername", druidUsername);
        reg.addInitParameter("loginPassword", druidPassword);
        return reg;
    }


    /**
     * druid监控过滤
     * @return
     */
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
    
}
直接启动项目,然后访问http://localhost:9999/druid 输入用户名密码,显示以下界面
(六)Spring Boot整合mybtis_第1张图片


扫描包以及事务解释

扫描的包就不用管了,加入了mybatis-spring-boot-starter的依赖,只要遵守Spring Boot的约定,在标注了@SpringBootApplication的类所在的目录或者子目录下的原Mapper的接口上添加一个@Mapper注解就可以了

事务的话,在引入mybatis-spring-boot-starter的依赖之后,会默认添加spring-boot-starter-jdbc的依赖,然后在需要添加事务的类上,或者方法上添加@Transactional注解就可以了(亲测有效)
注意:
@Transactional注解添加到类上,它下面的所有public的方法事务才会生效,如果添加到方法上,只能添加到public的方法上。


你可能感兴趣的:(SpringBoot)