博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot MyBatis 通用Mapper插件集成
阅读量:6035 次
发布时间:2019-06-20

本文共 3560 字,大约阅读时间需要 11 分钟。

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.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

 

转载地址:http://awlhx.baihongyu.com/

你可能感兴趣的文章
挖掘你不知道的windowsxp中的带宽潜能
查看>>
Software Engineering 招聘要求
查看>>
【转载】InstallAnyWhere自动化制作安装包的知识
查看>>
69、iSCSI共享存储配置实战
查看>>
文本编程
查看>>
乔布斯走了。你还期待苹果吗?
查看>>
优先级
查看>>
Tomcat与Web服务器、应用服务器的关系
查看>>
用DFS实现全排列 & 八皇后问题
查看>>
深度学习博客
查看>>
Android总结篇系列:Android Service
查看>>
Android dumpsys命令的使用
查看>>
Linux Kernel系列一:开篇和Kernel启动概要
查看>>
BZOJ 2756: [SCOI2012]奇怪的游戏 网络流/二分
查看>>
master + worker模式的node多核解决框架——node-cluster
查看>>
Android如何实现超级棒的沉浸式体验
查看>>
使用node打造自己的命令行工具方法教程
查看>>
Express代理中间件问题与解决方案
查看>>
||和&&返回什么?
查看>>
linux在文件中查找指定字符串,然后根据查找结果来做进一步的处理
查看>>