Java书签 #MyBatis之setMapperLocations配置多个mapper路径的两种方法详解
楔子:通向幸福的路很多,没有一条叫欲望。- 宫部美雪《火车》
1.今日书签
SpringBoot 集成 MyBatis 的项目中,怎么使用 sqlSessionFactoryBean.setMapperLocations
通配符来配置多个包路径呢?
或者说,通过 MyBatis JavaBean
的形式,怎么使用 setMapperLocations 加载多个路径下的 xml 文件?
亦或者说,使用 sqlSessionFactoryBean.setMapperLocations
或 mybatis.mapper-locations
通配符配置多个 mapper 路径有哪两种设置方式?
项目技术栈升级 SpringBoot 2 + MyBatis 3,说一说踩过的坑,梦里挑灯看剑。
2.水中望月
1)使用JavaBean配置
主要是使用 org.mybatis.spring.SqlSessionFactoryBean 的 setMapperLocations(Resource... mapperLocations) 方法
,入参为一组 Resource
,即我们需要加载的 xml 文件路径数组
。
@Slf4j
@Configuration
@MapperScan(basePackages = {"com.meiwei.tan.dao.mall", "com.meiwei.ping.dao.crm"})
public class MyBatisConfiguration {@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setMapperLocations(resolveMapperLocations());return sqlSessionFactoryBean.getObject();}public Resource[] resolveMapperLocations() {ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();List<String> mapperLocations = new ArrayList<>();mapperLocations.add("classpath*:com/meiwei/tan/dao/**/*Dao.xml");mapperLocations.add("classpath*:com/meiwei/ping/dao/**/*Mapper.xml");List<Resource> resources = new ArrayList();if (!CollectionUtils.isEmpty(mapperLocations)) {for (String mapperLocation : mapperLocations) {try {Resource[] mappers = resourceResolver.getResources(mapperLocation);resources.addAll(Arrays.asList(mappers));} catch (IOException e) {log.error("Get myBatis resources happened exception", e);}}}return resources.toArray(new Resource[resources.size()]);}
2)使用application.yml配置
在 application.yml 配置中集成 mybatis
,可能要写多份。
spring:application:name: meiweiprofiles:active: dev
apollo:bootstrap:enabled: truenamespaces: application,db,dubbo,redis,datasource,zk,mqgatewayapi:client:autoRegistry:enabled: trueconnectStr: ${zk.address} #${zk.address} 来自于 apollo 里面的 zkroot: /gateway/api/servicesmybatis:mapper-locations: classpath*:com/meiwei/tan/dao/**/*Dao.xml,classpath*:com/meiwei/ping/dao/**/*Mapper.xmltype-aliases-package: com.meiwei.tan.dao.mall,com.meiwei.ping.dao.crmIDENTITY: MYSQL #取回主键的方式notEmpty: false #insert和update中,是否判断字符串类型!=''configuration: #进行自动映射时,数据以下划线命名,如数据库返回的"order_total"命名字段是否映射为class的"orderTotal"字段。默认为falsemap-underscore-to-camel-case: true
对于 MyBatis,这里可以写一个空的自定义 MyBatisConfiguration 类不做实现,仅加 @MapperScan 和 @Configuration 注解,以便使用 MyBatisConfiguration 类做为 mybatis 配置文件被加载,并去扫描指定包路径下的 dao interface。然后 启动 主启动类。
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan(value = {"com.meiwei.tan.dao.mall", "com.meiwei.ping.dao.crm"})
public class MyBatisConfiguration {}
也可以不写这个自定义的 MyBatisConfiguration 类,直接把 @MapperScan 配置注解到 主启动类上。
但是,不难看出,业务层 module 的单元测试不好读到 web 或 remote module 的 yml 配置,所以第二种方法用 application.yml 配置集成 mybatis 启动主程序方法后,是跑主程序所在的 module 中的测试用例(通过RPC服务消费),而不是跑业务层 module 中的测试用例。
Java书签 #MyBatis之setMapperLocations配置多个mapper路径的两种方法详解相关推荐
- java构造和解析json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java json解析 代码_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java构建json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- eclipse java 逆向工程_Mybatis 逆向工程的三种方法详解
Mybatis 逆向工程 逆向工程通常包括由数据库的表生成 Java 代码 和 通过 Java 代码生成数据库表.而Mybatis 逆向工程是指由数据库表生成 Java 代码. Mybaits 需要程 ...
- java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解
本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...
- 使用MyBatis Generator自动生成持久层CRUD代码的两种方法
最近在使用MyBatis,得知可以利用MyBatis Generator自动生成实体类.DAO接口和Mapping映射文件.当数据库中的表多的时候,让你不用再手写Mapping映射文件,和实体类,就可 ...
- java校验码的设计_Java动态验证码单线设计的两种方法
1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...
- java数组循环扩容_Java中实现数组动态扩容的两种方法
Java中实现数组动态扩容的两种方法 java中初始化一个数组需要定义数组的容量,而在我们使用数组时往往会遇到数组容量不够的情况,此时我们就需要通过动态扩容的方式来来根据需求扩大数组的容量. 我们可以 ...
最新文章
- 通讯线路物理层编码类型总结(NRZ,MLT-3,4B/5B,8B/10B,64B/66B...)
- 光流法 Optical Flow
- Class类文件的结构
- MySQL now()函数
- 未来计算机将具有图像识别 定理证明,[单选] 低温计与高温计所测温度的分界线为()。...
- Express Cookie 的基本使用
- redis php高级使用_项目中应用Redis+Php的场景
- 计算机二级c语言编程题库100题下载,计算机二级C语言编程题库100题.doc
- 达梦数据库处理用户过期密码方式
- 在线考试系统软件测试总结,基于智慧校园平台的在线考试系统应用研究
- 怎么查看自己宽带是公网ip还是内网ip?
- 大连IT产业解析(2人才篇)
- desc查询表字段信息
- Simon的新中文“百万格子”重磅推出
- 2013-07-22 码市-武汉 返程票
- jadx工具windows下载
- Unity透明度不叠加
- Photo Album: 2008年5月-三亚爱琴海岸康年度假村-day1
- 从Linux内核角度看中间人攻击(ARP欺骗)并利用Python scapy实现
- ios html js调用陀螺仪,Js 获取手机陀螺仪