mybatis spring注解配置类

package com.bj58.zpsender.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.bj58.zpsender.init.ScfInit;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.io.IOException;

@Configuration
@MapperScan(basePackages = “com.demo.mapper”)
@EnableTransactionManagement
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
public class MybatisConfig {

@Bean
public DataSource dataSource() throws PropertyVetoException, IOException {
    //MySqlPropertyConfig.init(ScfInit.basePath);
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl(MySqlPropertyConfig.getInstance().getJdbcUrl());
    dataSource.setDriverClassName(MySqlPropertyConfig.getInstance().getDriver());
    dataSource.setUsername(MySqlPropertyConfig.getInstance().getUsername());
    dataSource.setPassword(MySqlPropertyConfig.getInstance().getPassword());
    // 配合preferredTestQuery或 automaticTestTable使用,必须要保证有合理配置才能把testConnectionOnCheckout设置成true
    // 每次把链接取出时都会检查链接是否有效,无效则取新的链接

// dataSource.setAutomaticTestTable(“t_test”);//c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null
dataSource.setValidationQuery(MySqlPropertyConfig.getInstance().getJdbcValidationQuery());

    //连接池中保留的最小连接数,默认为:3
    dataSource.setMinIdle(40);
    //连接池中保留的最大连接数。默认值: 15
    dataSource.setMaxActive(100);
    //初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3
    dataSource.setInitialSize(3);

    // 60s后未被使用,则丢弃
    dataSource.setMinEvictableIdleTimeMillis(60*1000);
    //当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0
    dataSource.setMaxWait(4000);

    //关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务
    dataSource.setDefaultAutoCommit(false);
    //如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源
    //  仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。
    //如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false
    dataSource.setBreakAfterAcquireFailure(false);
    //每60秒检查所有连接池中的空闲连接。默认值: 0,不检查
    dataSource.setTimeBetweenEvictionRunsMillis(60*1000);
    dataSource.setMaxPoolPreparedStatementPerConnectionSize(0);
    dataSource.setPoolPreparedStatements(false);
    return dataSource;
}


@Bean(name = "sqlSessionFactory")
public MybatisSqlSessionFactoryBean sqlSessionFactory(DataSource dataSource, MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception {

    MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resolver.getResources(MySqlPropertyConfig.getInstance().getMapperLocations());
    sqlSessionFactoryBean.setDataSource(dataSource);
    MybatisConfiguration configuration = new MybatisConfiguration();
    configuration.setLogImpl(StdOutImpl.class);
    sqlSessionFactoryBean.setConfiguration(configuration);
    //映射文件的路径
    sqlSessionFactoryBean.setMapperLocations(resources);
    sqlSessionFactoryBean.setPlugins(mybatisPlusInterceptor);
    return sqlSessionFactoryBean;
}

@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

/**
 * mybatis-plus 分页插件
 * 配置上找个后,selectPage方法才能实现物理上的分页,否则不是物理分页
 * @return
 */
// 最新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
    paginationInnerInterceptor.setOptimizeJoin(false);
    paginationInnerInterceptor.setMaxLimit(100000L);
    interceptor.addInnerInterceptor(paginationInnerInterceptor);

    return interceptor;
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值