Spring Boot MyBatis 通用Mapper插件集成 - 沧海一滴 - 博客园

Mybatis在使用过程中需要三个东西,每张表对应一个XXMapper.java接口文件,每张表对应一个XXMapper.xml文件,每张表对应一个Entity的Java文件。   其中XXMapper.xml把XXMapper.java接口文件、Entity的Java文件 结合起来
在配置过程中:

MyBatisConfig.java

复制代码; "复制代码")

@Bean(name = "sqlSessionFactory") public **SqlSessionFactory** sqlSessionFactoryBean() {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    bean.set**TypeAliasesPackage**("tk.mybatis.springboot.**model**");//每一张表对应的实体类 //添加XML目录
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try {
        bean.set**MapperLocations**(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://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/

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 包。

如果没有,那么请先移步 http://blog.csdn.net/catoop/article/details/50553714 做了解后,再按本文步骤操作。

使用MyBatis在我们通过xml集中配置SQL,并通过创建接口Mapper文件来完成持久化DAO层(mybatis内部使用的是动态代理,所以我们不需要自己编写实现类)。

然而在实际开发中,单表操作非常多,如果你也想像JPA、JDBC那样做一个所谓的BaseDao。那么可以实现一个通用Mapper来达到目的。
现在有现成的通用Mapper插件,我们无需重新创造轮子(代码是开源的,你也可以自己在其基础上修改)。

通用Mapper插件网址:http://git.oschina.net/free/Mapper

https://yq.aliyun.com/articles/5831


Original url: Access
Created at: 2019-03-01 20:12:27
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论