import java.io.IOException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import com.github.pagehelper.PageHelper;
@Configuration
@EnableTransactionManagement
public class MybatisConfiguration implements TransactionManagementConfigurer{
private static Log logger = LogFactory.getLog(MybatisConfiguration.class);
@Autowired
private DataSource dataSource;
// 提供SqlSeesion
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() {
try {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
// 手写配置
// 配置类型别名
sessionFactoryBean.setTypeAliasesPackage("com.zsx.entity");
// 配置mapper的扫描,找到所有的mapper.xml映射文件
Resource[] resources = new PathMatchingResourcePatternResolver()
.getResources("classpath:mybatis/mapper/*.xml");
sessionFactoryBean.setMapperLocations(resources);
// 加载全局的配置文件
sessionFactoryBean.setConfigLocation(
new DefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml"));
//添加插件
sessionFactoryBean.setPlugins(new Interceptor[]{pageHelper()});
return sessionFactoryBean.getObject();
} catch (IOException e) {
logger.warn("mybatis resolver mapper*xml is error");
return null;
} catch (Exception e) {
logger.warn("mybatis sqlSessionFactoryBean create error");
return null;
}
}
@Bean
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public PageHelper pageHelper(){
logger.info("MyBatis分页插件PageHelper");
//分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("params", "count=countSql");
pageHelper.setProperties(properties);
return pageHelper;
}
}
先在配置文件application.yml
中添加
# MyBatis
mybatis:
# 配置类型别名
typeAliasesPackage: com.zsx.entity
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mybatis/mapper/*.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
然后配置文件为:
import java.io.IOException;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
@Configuration
@EnableTransactionManagement
public class MybatisConfiguration implements TransactionManagementConfigurer{
private static Log logger = LogFactory.getLog(MybatisConfiguration.class);
// 配置类型别名
@Value("${mybatis.typeAliasesPackage}")
private String typeAliasesPackage;
// 配置mapper的扫描,找到所有的mapper.xml映射文件
@Value("${mybatis.mapperLocations}")
private String mapperLocations;
// 加载全局的配置文件
@Value("${mybatis.configLocation}")
private String configLocation;
@Autowired
private DataSource dataSource;
// DataSource配置
// @Bean
// @ConfigurationProperties(prefix = "spring.datasource")
// public DruidDataSource dataSource() {
// return new com.alibaba.druid.pool.DruidDataSource();
// }
// 提供SqlSeesion
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() {
try {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
// 读取配置
sessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);
//
Resource[] resources = new PathMatchingResourcePatternResolver()
.getResources(mapperLocations);
sessionFactoryBean.setMapperLocations(resources);
// //
sessionFactoryBean.setConfigLocation(
new DefaultResourceLoader().getResource(configLocation));
//添加插件 (改为使用配置文件加载了)
// sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper()});
return sessionFactoryBean.getObject();
} catch (IOException e) {
logger.warn("mybatis resolver mapper*xml is error");
return null;
} catch (Exception e) {
logger.warn("mybatis sqlSessionFactoryBean create error");
return null;
}
}
// @Bean
// public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
// return new SqlSessionTemplate(sqlSessionFactory);
// }
// @Bean
// public PlatformTransactionManager transactionManager(){
// return new DataSourceTransactionManager(dataSource);
// }
@Bean
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
最后还有配置一个扫描mapper的类:
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
@AutoConfigureAfter({MybatisConfiguration.class})
public class MyBatisMapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
mapperScannerConfigurer.setBasePackage("com.zsx.dao");
return mapperScannerConfigurer;
}
}
还有一个 mybatis-config.xml