现在在网上找到的SpringBoot整合mybatis的帖子基本上都是注解式的,在实际开发中还是存在很多局限性:
下面开始整合:
首先使用generator工具生成domain,dao,mapping,具体操作请参考grenerator
在src/main/resources地下新建文件命名为mapping,将上面工具生成的文件复制到对应位置,修改dao底下的*Mapper.java文件 在方法名上一行添加@Mapper并引入对应包:
import org.apache.ibatis.annotations.Mapper;
仿照以前的mybatis整合spring方式,注入相关Bean,下面代码还加入了mybatis插件配置,并且注入事务管理器
@Configuration
@EnableTransactionManagement
public class MybatisConfig implements TransactionManagementConfigurer{
@Resource(name = "dataSource")
DataSource dataSource;
/**
* 可以通过这个类,详细配置mybatis
* @return
*/
// @Bean
// public org.apache.ibatis.session.Configuration mybatisSetting(){
// org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
//
// return null;
// }
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.xzr.domain");
// //分页插件,插件无非是设置mybatis的拦截器
// PageHelper pageHelper = new PageHelper();
// Properties properties = new Properties();
// properties.setProperty("reasonable", "true");
// properties.setProperty("supportMethodsArguments", "true");
// properties.setProperty("returnPageInfo", "check");
// properties.setProperty("params", "count=countSql");
// pageHelper.setProperties(properties);
//
// //添加插件
// bean.setPlugins(new Interceptor[]{pageHelper});
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
//设置xml扫描路径
bean.setMapperLocations(resolver.getResources("classpath:mapping/*.xml"));
return bean.getObject();
} catch (Exception e) {
throw new RuntimeException("sqlSessionFactory init fail",e);
}
}
/**
* 用于实际查询的sql工具,传统dao开发形式可以使用这个,基于mapper代理则不需要注入
* @param sqlSessionFactory
* @return
*/
@Bean(name = "sqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
/**
* 事务管理,具体使用在service层加入@Transactional注解
*/
@Bean(name = "transactionManager")
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
测试:
打印sql语句
使用mapper接口代理的话,打印很简单,在application.properties中设置
logging.level.com.xzr=trace
至于使用DAO方式,就需要覆盖掉spring-boot默认设置的logger,自定义log.xml文件,然后配置mybatis的log实现器.