mybatis xml文件放到jar包之外

mybatis 使用generator jar包自动生成 mybatis 是属于半自动化的 ORM ,我们在编写mapper自动映射的时候,难免会写错、忽略了一些细节性的 问题,这时候,我们就借助 mybatis 自带的自动生成 的工具啦~ 1.所需jar包(以mysql数据库为例): mysql-connector-java-5.1.47.jar mybatis-generator-core-1.3.7.jar 需要的可以自行去Maven Reposi... 阅读详情

前言

最近项目组接到了一个新的需求,因为部署限制,需要把mybatis的xml文件放到jar包之外。项目的技术栈用的springboot,之前就是打一个jar包就完事,没有做过类似的需求。因此,我想着是从源码入手,解决这个问题。

动手

因为项目是基于springboot,就从springboot整合mybatis看。按照springboot的套路,找到了MybatisAutoConfiguration。

if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
      factory.setMapperLocations(this.properties.resolveMapperLocations());
    }

properties 为MybatisProperties,继续看properties.resolveMapperLocations()

public Resource[] resolveMapperLocations() {
    return Stream.of(Optional.ofNullable(this.mapperLocations).orElse(new String[0]))
        .flatMap(location -> Stream.of(getResources(location))).toArray(Resource[]::new);
  }

  private Resource[] getResources(String location) {
    try {
      return resourceResolver.getResources(location);
    } catch (IOException e) {
      return new Resource[0];
    }
  }

通过以上代码分析,就是把xml文件转换成Resource,那么我们可以修改这个方法,把我们的xml文件加到这个数据里面。那么springaop的环绕通知就适合这种场景。我们定义一个切面,对properties.resolveMapperLocations()进行增强即可。

@Aspect
@Component
public class MybatisPropertiesAop {

    @Value("${outer.mapper}")
    public String outerLocation;

    @Around("execution(* org.mybatis.spring.boot.autoconfigure.MybatisProperties.resolveMapperLocations(..))")
    public Object addXml(ProceedingJoinPoint joinPoint) throws Throwable {

        Resource[] proceed =(Resource[]) joinPoint.proceed();
        Resource[] resourceFromOuter = getResourceFromOuter(outerLocation);

        Resource[] merge=new Resource[proceed.length+resourceFromOuter.length];

        System.arraycopy(proceed, 0, merge, 0, proceed.length);
        System.arraycopy(resourceFromOuter, 0, merge, proceed.length, resourceFromOuter.length);

        return merge;

    }

    private Resource[] getResourceFromOuter(String outerLocation) {
        File file=new File(outerLocation);
        File[] files = file.listFiles();
        List<Resource> resourceList=new ArrayList<>();
        for (File f:files){
            if(f.getName().endsWith("xml")){
                resourceList.add(new FileSystemResource(f));
            }
        }

        return resourceList.toArray(new Resource[resourceList.size()]);
    }
}

以上代码就是一个例子,经过测试可行。
让我们保持一颗虔诚的心,在伟人的肩膀上继续攀登。

MyBatis持久层框架核心jar包使用指南 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。Mapper接口是MyBatis中非常重要的概念,它是与数据库表映射的Java接口。 阅读详情

相关推荐

MyBatis核心框架:jar包使用与配置指南

MyBatis 是一个优秀的持久层框架,它对JDBC进行了轻量级的封装,提供了几乎所有的JDBC功能,并支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis允许开发者定义复杂的映射关系以满足多变的业务需求。

weixin_31185473的博客 842

Spring Boot配置文件放在jar外部的几种方案

springboot读取外部配置文件的方法,如下优先级: 第一种是在执行命令的目录下建config文件夹。(在jar包的同一目录下建config文件夹,执行命令需要在jar包目录下才行),然后把配置文件放到这个文件夹下。 第二种是直接把配置文件放到jar包的同级目录。 第三种在classpath下建一个config文件夹,然后把配置文件放进去。 第四种是在classpath下直接放配置文件。 springboot默认是优先读取它本身同级目录下的一个config/application.properties

Alex的博客 9539

mybatis生成映射文件和xml文件所需jar包

jar包,maven项目中,使用mybatis和mysql,自动根据数据库表生成xml文件和映射类...

Mybatis mapper配置文件放jar包外

springboot使用mybatis的时候有注解和xml两种方式,如果使用xml还可以将配置文件放到jar包外面,不用重新编译直接修改xml中的内容。 mybatis: mapper-locations: classpath:mapper/*.xml 一般的配置信息如上,这里给出了自己制定xml的路径的方法,所以只要在jar包外面设定application的配置文件就可以动态指定配置文件...

坤哥的博客 6335

二维紧束缚模型求解程序

假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵H(kx,ky)的解析形式,那么在整个布里渊区对角化矩阵就可以得到能带。从技术上说这里面有以下几个问题。 1. 缺少实空间和倒空间的坐标,使得能带难以和布里渊区高对称点对应。 2. 最容易处理的布里渊区是矩形,对于其他多边形,如果全布里渊区mesh画费米面有一定技术困难。 因此一个好的处理框架是首先给出实空间原子坐标,给出实空间哈密顿量,...

wwxy1995的博客 4083

深度学习模型设计的方法和技巧

设计神经网络模型是一个迭代的过程,需要不断试验和调整各个组成部分,以达到最佳性能。同时,遵循良好的工程实践,如模块化设计、版本控制、文档记录等,也是成功的关键。

xw555666的博客 4027

个人使用: 18版本替换问题处理以及方案

需求 : 目前修改中的项目中涉及mybatis,需要升级对应mybatis版本至3.5.9 起因是 对应log4j2的史诗级bug造成系列头部的开源项目均受到一定影响,进行版本紧急升级。 因为项目中大部分是用的jpa,但是不排除部分项目混搭了mybatis架包。 首先直接进行jar包查询,是否存在mybatis 架包? 这里是替换之后,那么替换之前的 对应版本号是 3.4.6. 对应如何替换? 替换思想是 mybatis:3.5.9 (小于3.5.6则更新) 1、 如果存在 org.mybatis.s

qq_32871365的博客 1415

Android 13 录音APK在后台无数据的处理

未获取到录音数据

chenchen4310的博客 1182

【mybatis】mybatis-config.xml加载外部配置文件

通过propertis标签提取变量,为变量指定变量名,并通过 ${} 表达式引用变量</</</</

javaer的博客 584

LobeHub开源AI应用平台:从部署到定制的全栈实践指南

在现代AI应用开发领域,大语言模型(LLM)的集成与部署是核心技术挑战之一。其原理在于通过API或本地化部署,将预训练模型的强大能力封装为可调用的服务。这项技术的核心价值在于极大地降低了AI应用的开发门槛,使开发者能够快速构建智能对话、内容生成等场景的应用。随着模型即服务(MaaS)模式的普及,一个关键痛点是如何高效地管理多模型、设计友好的用户界面并实现功能扩展。这正是开源项目LobeHub所聚焦的领域,它通过提供可插拔的架构和配置驱动的低代码理念,解决了AI能力落地的“最后一公里”问题。本文将结合Dock

weixin_27210125的博客 753

Linux显卡管理避坑指南:为什么Xorg总是占用你的NVIDIA GPU?

本文深入解析了在Linux系统上,尤其是双显卡笔记本中,Xorg显示服务器进程占用NVIDIA GPU的根本原因。文章从Xorg的驱动加载机制和NVIDIA驱动的独占性入手,详细对比了禁用配置文件、手动配置xorg.conf、使用官方PRIME方案以及切换到Wayland等主流解决方案的优缺点与适用场景,旨在帮助用户有效释放GPU资源,确保深度学习、游戏等计算任务能独占显卡性能。

xgboost6farmer的博客 268

Mybatis 的配置xml和properties放在jar包以外的一种方法

1.问题 开发时候,将xml和properties放resources,直接可以访问到,然而打包后这两个文件也一同被打包到jar包里面,如果发布后想修改就会比较麻烦,所以希望将xml配置文件和properties放在jar包以外来做,这样就可以动态来指定环境。 2.分析 我们查看session...

china4418的博客 778

FID指标实战:如何用Python快速计算生成图像的质量分数(附完整代码)

本文详细介绍了如何使用Python计算Fréchet Inception Distance(FID)指标,以评估生成图像的质量。通过完整的代码示例和优化技巧,帮助开发者快速实现FID计算,并解读分数背后的实际意义,适用于GAN和扩散模型的性能评估。

weixin_28718487的博客 376

mybatis 生成的base xml文件 打入jar包中引用使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34268169的博客 1631

Claude Skills 深度讲解

阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」

u013134676的博客 1464

【Davinci开发】:MPU(内存保护)

【Davinci开发】:MPU(内存保护)

2208

配置MyBatis环境以及jar包

配置MyBatis环境以及jar包 本机环境 开发工具:IDEA 数据库:Oracle MyBatis版本:3.4.6 Oracle jar包:ojdbc7

qq_43721701的博客 2112

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SpringMVC + mybatis 无法读取JAR包中的XML配置文件问题

SpringMVC + mybatis 无法读取JAR包中的XML配置文件问题 在进行SpringMVC+Mybatis进行整合时,如果Mybatis的XML配置文件存在于JAR包中,当工程运行时会报出找不到方法异常。 如:                                                    classpath:com/sdzn/*/d

f_470107520的博客 1649

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

将Mybatis 移到 jar包要注意的事项(在jar包中使用 mybatis)

本来模块在SpringBoot中使用自定义的DataSourceConfig, 运行,DataSourceConfig和mybatis-config.xml和Mapper等资料都在这个模块里,后来决定将这个模块作为一个通用的jar包给其他模块使用,修改如下: 例如我新建一个NewModule,原来的模块叫做MybatisModule 1. basePackages:必须在NewModule的A...

howard789的博客 2442

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[Mybatis]pom.xml 文件详解

pom.xml 文件 声明:本文为笔者观看黑马EE57期视频内容记录而成,中间加入了自己的理解。本笔记目的是强化自己学习所用。若有疏漏或不当之处,请在评论区指出。谢谢。 pom.xml主要描述了项目的maven坐标,依赖关系,此处只讲解在Mybatis中的使用 我们都知道在项目开发过程中,导jar包是一件很痛苦的事情。而pom.xml文件的作用便是自动导jar包。我们通过在pom.xml文件中配置...

RoueOB的博客 2761

mybatis jar包_纯干货:搭建MyBatis开发环境

一、引入MyBatis及其相关jar包 1、mybatis-3.2.2.jar:mybatis的jar包 2、mysql-connector-java-5.1.0-bin.jar:MySQL数据库jar包 3、log4j-1.2.16.jar:日志、用于开发显示提示信息如执行的SQL语句及参数二、新建mybatis-config.xml配置文件1、在项目下新建一个源码文件夹resources,在里...

weixin_39983912的博客 970

Myeclipse 配置 Mybatis 框架 jar 包操作(1)

Myeclipse 配置 Mybatis 框架 非 Maven。使用 jar 包操作。 此遍文章可以分为五大模块【下载 jar 包、配置文件.properties 文件、配置 ***Mapper.xml 文件、配置 MyBtais xml配置文件、测试】

debj 的博客 1162

springboot基于mybatis扫描jar包中的controller、service、dao、xml

springboot基于mybatis扫描jar包中的controller、service、dao、xml   最近有这样的需求,是将某个业务模块接口,比如新闻的接口模块 作为一个公共模块,通过jar 包的形式引入到其他项目中。   如果能够实现,这样避免了复制粘贴的繁琐,只需要几步配置,以及引入我们提前打包好的新闻模块 jar,将表结构拷到新项目的数据库里,即可调用里边的接口。 1、要...

凌大大的博客 1万+
上一篇: spring 整合mybatis 简单说明
zlystudy
博客等级 码龄10年 5粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值