iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Mybatisgenerator修改Mapper.java文件实现详解
  • 530
分享到

Mybatisgenerator修改Mapper.java文件实现详解

2024-04-02 19:04:59 530人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录源码分析:源码入口:Context.generateFiles()然后进入introspectedTable.getGeneratedJavaFiles()方法重点方法:java

源码分析:

我写的代码生成插件gitee地址 同样是在扩展 mybatis generator插件的时候,有这样一个需求是需要在生成的,那么 如何修改Mapper.java文件? 跟着Mybatis generator 源码去找一找 哪里可以扩展

源码入口:Context.generateFiles()

   public void generateFiles(ProgressCallback callback,
            List<GeneratedJavaFile> generatedJavaFiles,
            List<GeneratedXmlFile> generatedXmlFiles, List<String> warnings)
            throws InterruptedException {
        if (introspectedTables != null) {
            for (IntrospectedTable introspectedTable : introspectedTables) {
                callback.checkCancel();
                introspectedTable.initialize();
                introspectedTable.calculateGenerators(warnings, callback);
                //这里是 javaFiles的组装地方,主要去看一下introspectedTable
                        .getGeneratedJavaFiles()方法
                generatedJavaFiles.addAll(introspectedTable
                        .getGeneratedJavaFiles());
                        //
                generatedXmlFiles.addAll(introspectedTable
                        .getGeneratedXmlFiles());
				//这里预留了插件来生成JavaFile文件;
                generatedJavaFiles.addAll(pluginAggregator
                        .contextGenerateAdditionalJavaFiles(introspectedTable));
                //这里预留了插件来生成Xml文件;
                generatedXmlFiles.addAll(pluginAggregator
                        .contextGenerateAdditionalXmlFiles(introspectedTable));
            }
        }
        generatedJavaFiles.addAll(pluginAggregator
                .contextGenerateAdditionalJavaFiles());
        generatedXmlFiles.addAll(pluginAggregator
                .contextGenerateAdditionalXmlFiles());
    }

然后进入introspectedTable.getGeneratedJavaFiles()方法

@Override
    public List<GeneratedJavaFile> getGeneratedJavaFiles() {
        List<GeneratedJavaFile> answer = new ArrayList<GeneratedJavaFile>();
		//javaModelGenerators 存的是 JavaModel 和 JavaModelExample 类
        for (AbstractJavaGenerator javaGenerator : javaModelGenerators) {
        //这一行才是重点,因为所有的准备数据都是在这个方法里面
            List<CompilationUnit> compilationUnits = javaGenerator
                    .getCompilationUnits();
            for (CompilationUnit compilationUnit : compilationUnits) {
                GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
                        context.getJavaModelGeneratorConfiguration()
                                .getTargetProject(),
                                context.getProperty(PropertyReGIStry.CONTEXT_JAVA_FILE_ENcoding),
                                context.getJavaFORMatter());
                answer.add(gjf);
            }
        }
		//	clientGenerators 然后javaModelGenerators 存的是 JavaMapper.java文件 
        for (AbstractJavaGenerator javaGenerator : clientGenerators) {
         //这一行才是重点,因为所有的准备数据都是在这个方法里面
            List<CompilationUnit> compilationUnits = javaGenerator
                    .getCompilationUnits();
            for (CompilationUnit compilationUnit : compilationUnits) {
                GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
                        context.getJavaClientGeneratorConfiguration()
                                .getTargetProject(),
                                context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
                                context.getJavaFormatter());
                answer.add(gjf);
            }
        }
        return answer;
    }

重点方法:javaGenerator.getCompilationUnits();

这个方法是真正填充数据的地方 AbstractJavaGenerator 这个是抽象类,主要是用来生成Java文件的 下面有很多实现类; 比如生成 JavaModel 文件的BaseRecordGenerator JavaModelExample文件的ExampleGenerator Mapper.java文件的JavaMapperGenerator 这个实现类都实现了getCompilationUnits方法;这些方法都在为即将生成的文件组装数据 我们看一下JavaMapperGenerator 中的实现

 @Override
    public List<CompilationUnit> getCompilationUnits() {
        progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$
                introspectedTable.getFullyQualifiedTable().toString()));
        CommentGenerator commentGenerator = context.getCommentGenerator();
        FullyQualifiedJavaType type = new FullyQualifiedJavaType(
                introspectedTable.getMyBatis3JavaMapperType());
        Interface interfaze = new Interface(type);
        interfaze.setVisibility(JavaVisibility.PUBLIC);
        //看到这里喜出望外,这里就是扩展点了;因为它把inerfaze给传进去了,那我们可以在这里做一些我们想做的事情
        commentGenerator.addJavaFileComment(interfaze);
	    //省略无关......

修改Mapper.java文件

在前几篇文章中我们已经创建了CommentGenerator对象了,那我们可以在这里面来做扩展

	@Override
	public void addJavaFileComment(CompilationUnit compilationUnit) {
			//生成的是 JavaModel 和 JavaModelExample 文件
			if(compilationUnit instanceof TopLevelClass){
				//这里可以修改  JavaModel 和 JavaModelExample 文件
				
			}
			//生成的是Mapper.java 文件
			if(compilationUnit instanceof Interface){
				Interface anInterface = (Interface)compilationUnit;
				//下面的可以给JavaFile 添加注释
				//topLevelClass.addFileCommentLine("");
				String shortName = compilationUnit.getType().getShortName();
				if(shortName!=null||shortName.endsWith("Mapper"))return;
				//只给JavaModel添加注解就行了,Example不需要
				anInterface.addAnnotation("@Resource");
				anInterface.addImportedType(new FullyQualifiedJavaType("javax.annotation.Resource"));
			}
	}

上面的代码中 给Mapper.java 文件添加了注解,如果想改更多,可以按照它的格式来做;

以上就是Mybatis generator修改Mapper.java文件实现详解的详细内容,更多关于Mybatis generator修改Mapper.java的资料请关注编程网其它相关文章!

--结束END--

本文标题: Mybatisgenerator修改Mapper.java文件实现详解

本文链接: https://www.lsjlt.com/news/168749.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mybatisgenerator修改Mapper.java文件实现详解
    目录源码分析:源码入口:Context.generateFiles()然后进入introspectedTable.getGeneratedJavaFiles()方法重点方法:java...
    99+
    2024-04-02
  • Python修改CSV文件实例详解
    目录前言Python 修改CSV文件前言 由于 CSV 文件仅仅是简单的文本文件,因此更新 CSV 文件中内容的最佳方式是首先读取文件中的数据,并将它们处理为 P...
    99+
    2024-04-02
  • python实现修改xml文件内容
    XML 被设计用来传输和存储数据。 HTML 被设计用来显示数据。 XML 指可扩展标记语言(eXtensible Markup Language)。 可扩展标记语言(英语:Exte...
    99+
    2024-04-02
  • python3-文件的修改——实现类似s
    # Auther: Aaron Fan'''打开文件的模式有三种:r,只读模式(默认)。w,只写模式。【不可读;不存在则创建;存在则删除内容;因为会清空原有文件的内容,一定要慎用】a,追加模式。【可读;   不存在则创建;存在则只追加内容;...
    99+
    2023-01-31
    类似 文件
  • vbs怎么实现批量修改文件
    这篇文章主要介绍“vbs怎么实现批量修改文件”,在日常操作中,相信很多人在vbs怎么实现批量修改文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vbs怎么实现批量修改文件”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-08
  • Python批量修改文件名的方式详解
    目录批量修改文件名(保留后缀) 批量修改文件名(全改) 读取文件下的所有文件名 总结批量修改文件名(保留后缀) 这种方法,保留了文件原本的后缀。这里主要演示的是对图片名的修改。 ...
    99+
    2024-04-02
  • Linux chmod命令详解,Linux修改文件权限
    「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 chmod 命令 一、常用操作1. 字母形式2. 数字形式3. ...
    99+
    2023-09-09
    linux 运维 服务器 网络安全
  • Python实现修改Excel文件的元数据
    目录应用场景效果如下所示测试数据源代码源代码说明应用场景 这段代码可以用于修改Excel文件的元数据,例如作者、主题、描述等,通过使用Python和Openpyxl模块,以及wxPy...
    99+
    2023-05-18
    Python修改Excel元数据 Python修改Excel数据 Python修改Excel Python Excel
  • 使用Golang修改文件编码的方法详解
    修改文件编码至关重要,go语言使用io.copy和charset包实现此操作。步骤如下:1. 打开要转换的文件;2. 以新编码创建新文件;3. 从旧文件读取数据并以新编码写入新文件;4....
    99+
    2024-04-04
    golang 文件编码 go语言
  • PHP.ini文件中修改编码设置方法详解
    PHP.ini文件中修改编码设置方法详解 在进行网站开发或者维护的过程中,我们经常会遇到需要修改PHP.ini文件中编码设置的情况。PHP.ini文件是PHP的配置文件,其中包含了PH...
    99+
    2024-04-02
  • Go语言实现修改hosts文件的方法
    对不起,我无法提供与修改操作系统文件相关的代码示例。如果您有任何其他问题或需要帮助,请随时告诉我。以上就是Go语言实现修改hosts文件的方法的详细内容,更多请关注编程网其它相关文章!...
    99+
    2024-03-08
    go语言 修改 hosts文件
  • 如何实现修改文件名的批处理
    这篇文章主要介绍了如何实现修改文件名的批处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实例1@echo off & setlocal...
    99+
    2023-06-08
  • Python实现批量修改xml文件的脚本
    今天分享一个我自己写的实用脚本,主要是将.xml文件进行批量的修改 首先,声明我并不是很了解.xml的相关知识,所以今天主要是以我遇到的问题来做个记录。 想要更多的了解xml,请看最...
    99+
    2024-04-02
  • css如何实现修改对应文件代码
    这篇文章主要为大家展示了“css如何实现修改对应文件代码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css如何实现修改对应文件代码”这篇文章吧。 1、更改i...
    99+
    2024-04-02
  • cmd命令实现修改文件创建时间
    在文件夹的右键菜单添加“dos在这里” 要在文件夹的右键菜单中添加“命令提示符”选项。在注册表HKEY_CLASSES_ROOT\Directory\shell分支下新建一项“Com...
    99+
    2022-11-21
    cmd 文件创建时间
  • Python实现自动批量修改文件名称
    本文介绍基于Python语言,按照一定命名规则批量修改多个文件的文件名的方法。 已知现有一个文件夹,其中包括班级所有同学上交的作业文件,每人一份;所有作业文件命名格式统一,都是地信1...
    99+
    2023-01-30
    Python批量修改文件名 Python修改文件名
  • docker挂载文件修改生效怎么实现
    要使Docker容器中挂载的文件修改生效,可以通过以下几种方式实现: 使用docker cp命令将修改后的文件复制回宿主机,并重...
    99+
    2023-10-24
    docker
  • 修改Nginx源码实现worker进程隔离实现详解
    目录背景APISIX 不同种类请求的互相影响修改 Nginx 源码实现进程隔离效果验证后记背景 最近我们线上网关替换为了 APISIX,也遇到了一些问题,有一个比较难解决的问题是 A...
    99+
    2022-11-13
    Nginx worker 进程隔离 Nginx worker
  • SpringBoot动态修改yml配置文件的方法详解
    目录前言具体实现实现代码测试 源码总结前言 记录下SpringBoot修改yml配置文件后无需重启服务的方式(打包后生效),效果如下: 具体实现 实现代码 pom.xml...
    99+
    2024-04-02
  • Go语言fsnotify接口实现监测文件修改
    目录引言安装工具关键类型Event结构体Op类型Watcher结构体Channel函数Watcher工厂函数完整例子引言 在开发过程中,经常需要观察本地文件系统的更改。经过谷歌了几个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作