MyBatisConfig.java
@Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactoryBean() { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setTypeAliasesPackage("tk.mybatis.springboot.model");//每一张表对应的实体类 //添加XML目录 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));//每张表对应的xml文件 return bean.getObject(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } }
import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import tk.mybatis.spring.mapper.MapperScannerConfigurer;import java.util.Properties;/** * MyBatis扫描接口,使用的tk.mybatis.spring.mapper.MapperScannerConfigurer,如果你不使用通用Mapper,可以改为org.xxx... * * @author liuzh * @since 2015-12-19 14:46 */@Configuration//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解@AutoConfigureAfter(MyBatisConfig.class)public class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); mapperScannerConfigurer.setBasePackage("tk.mybatis.springboot.mapper");//每张表对应的XXMapper.java interface类型的Java文件 Properties properties = new Properties(); properties.setProperty("mappers", "tk.mybatis.springboot.util.MyMapper"); properties.setProperty("notEmpty", "false"); properties.setProperty("IDENTITY", "MYSQL"); mapperScannerConfigurer.setProperties(properties); return mapperScannerConfigurer; }}
sqlSessionFactoryBeanName
属性
这个属性一般都用不到,只有当你配置多数据源的时候,这是会有多个sqlSessionFactory
,你就需要通过该属性来指定哪一个sqlSessionFactory
(值为SqlSessionFactoryBean
<bean>
配置中的id
属性)。
由于通用Mapper依赖JPA,所以还需要下载persistence-api-1.0.jar:
http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/2.Integration.md
MyBatis通用Mapper3 通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。 极其方便的使用MyBatis单表的增删改查。 支持单表操作,不支持通用的多表联合查询。 通用 Mapper 支持 Mybatis-3.2.4 及以上版本 特别强调 不是表中字段的属性必须加 @Transient 注解 通用 Mapper 不支持 devtools 热加载,devtools 排除实体类包即可,配置方式参考:using-boot-devtools-customizing-classload(http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-customizing-classload)看本文之前,请确保你已经在SpringBoot中集成MyBatis,并能正常使用。Spring DevTools 配置
感谢emf1002提供的解决方案。在使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A。
同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让通用Mapper和实体类使用相同的类加载器即可。
DevTools 默认会对 IDE 中引入的所有项目使用 restart 类加载器,对于引入的 jar 包使用 base 类加载器,因此只要保证通用Mapper的jar包使用 restart 类加载器即可。
在 src/main/resources 中创建 META-INF 目录,在此目录下添加 spring-devtools.properties 配置,内容如下:
restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar使用这个配置后,就会使用 restart 类加载加载 include 进去的 jar 包。如果没有,那么请先移步 做了解后,再按本文步骤操作。
使用MyBatis在我们通过xml集中配置SQL,并通过创建接口Mapper文件来完成持久化DAO层(mybatis内部使用的是动态代理,所以我们不需要自己编写实现类)。
然而在实际开发中,单表操作非常多,如果你也想像JPA、JDBC那样做一个所谓的BaseDao。那么可以实现一个通用Mapper来达到目的。
现在有现成的通用Mapper插件,我们无需重新创造轮子(代码是开源的,你也可以自己在其基础上修改)。通用Mapper插件网址:
https://yq.aliyun.com/articles/5831