楔子:通向幸福的路很多,没有一条叫欲望。- 宫部美雪《火车》

1.今日书签

SpringBoot 集成 MyBatis 的项目中,怎么使用 sqlSessionFactoryBean.setMapperLocations 通配符来配置多个包路径呢?
或者说,通过 MyBatis JavaBean 的形式,怎么使用 setMapperLocations 加载多个路径下的 xml 文件?
亦或者说,使用 sqlSessionFactoryBean.setMapperLocationsmybatis.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路径的两种方法详解相关推荐

  1. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  2. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  3. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  4. java构建json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  5. eclipse java 逆向工程_Mybatis 逆向工程的三种方法详解

    Mybatis 逆向工程 逆向工程通常包括由数据库的表生成 Java 代码 和 通过 Java 代码生成数据库表.而Mybatis 逆向工程是指由数据库表生成 Java 代码. Mybaits 需要程 ...

  6. java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解

    本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...

  7. 使用MyBatis Generator自动生成持久层CRUD代码的两种方法

    最近在使用MyBatis,得知可以利用MyBatis Generator自动生成实体类.DAO接口和Mapping映射文件.当数据库中的表多的时候,让你不用再手写Mapping映射文件,和实体类,就可 ...

  8. java校验码的设计_Java动态验证码单线设计的两种方法

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...

  9. java数组循环扩容_Java中实现数组动态扩容的两种方法

    Java中实现数组动态扩容的两种方法 java中初始化一个数组需要定义数组的容量,而在我们使用数组时往往会遇到数组容量不够的情况,此时我们就需要通过动态扩容的方式来来根据需求扩大数组的容量. 我们可以 ...

最新文章

  1. 通讯线路物理层编码类型总结(NRZ,MLT-3,4B/5B,8B/10B,64B/66B...)
  2. 光流法 Optical Flow
  3. Class类文件的结构
  4. MySQL now()函数
  5. 未来计算机将具有图像识别 定理证明,[单选] 低温计与高温计所测温度的分界线为()。...
  6. Express Cookie 的基本使用
  7. redis php高级使用_项目中应用Redis+Php的场景
  8. 计算机二级c语言编程题库100题下载,计算机二级C语言编程题库100题.doc
  9. 达梦数据库处理用户过期密码方式
  10. 在线考试系统软件测试总结,基于智慧校园平台的在线考试系统应用研究
  11. 怎么查看自己宽带是公网ip还是内网ip?
  12. 大连IT产业解析(2人才篇)
  13. desc查询表字段信息
  14. Simon的新中文“百万格子”重磅推出
  15. 2013-07-22 码市-武汉 返程票
  16. jadx工具windows下载
  17. Unity透明度不叠加
  18. Photo Album: 2008年5月-三亚爱琴海岸康年度假村-day1
  19. 从Linux内核角度看中间人攻击(ARP欺骗)并利用Python scapy实现
  20. ios html js调用陀螺仪,Js 获取手机陀螺仪

热门文章

  1. May 17th Thursday (五月 十七日 木曜日)
  2. 链游成公链新宠,风口之下究竟哪家称王? 1
  3. 【R语言】多模型综合——CLS(GRS)加权平均法的实现
  4. 解决无法从公司 Maven 私服下载依赖的问题
  5. ITSM | 权威指南发布,高速IT服务管理团队是什么样子的?
  6. 青少儿编程- App Inventor简介
  7. 编程之美 1.8 小飞的电梯调度算法
  8. 阿里巴巴图标库的字体图标使用方法
  9. 使用易语言实现远程CALL调用
  10. [学位]燕山大学中文学术期刊目录(2020修订版)