【mybatis-generator】mybatis代码生成器generator,生成文件名自定义配置

mybatis代码生成器generator, 生成文件名自定义配置

  • MyBatis-Generator 使用
    • 一. 引入依赖和相关插件
    • 二.设置配置文件
    • 三.运行
    • 四. mybatis-generator 自定义生成的文件名
      • 一.domainObjectName和mapperName属性
      • 二.domainObjectRenamingRule标签
      • 三. RenameExampleClassPlugin插件
      • 四. columnRenamingRule标签

MyBatis-Generator 使用

一. 引入依赖和相关插件

        <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.0</version></dependency>
  <build><plugins><!--  引入 MyBatis-Generator 插件,在通过 Maven 的插件运行 MBG 时有效 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.6</version><configuration><!--  引入 MyBatis-Generator 的配置文件 --><configurationFile>./src/main/resources/mybatis-generator-config.xml</configurationFile><!--  允许 MBG 将构建消息写入日志中  --><verbose>true</verbose><!--  再次运行 MBG 时,允许覆盖已生成的文件,但是不会覆盖 xml 文件  --><overwrite>true</overwrite></configuration><dependencies><!--  引入 mysql 的 JDBC 驱动,否则会报错找不到驱动  --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.itfsw</groupId><artifactId>mybatis-generator-plugin</artifactId><version>1.3.10</version></dependency></dependencies></plugin></plugins></build>

二.设置配置文件


<!-- 所有的配置均在 generatorConfiguration 标签下 -->
<generatorConfiguration><!-- 引入外部配置文件   --><properties resource="mybatis-generator.properties"/><!--  加载需要的额外的依赖包 --><!--  <classPathEntry location="/Users/deecyn/Files/db2java.zip"/>--><!-- 配置 context 上下文  --><context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat"><!-- 自动识别数据库关键字,默认为 false,一般保留默认值,遇到数据库关键字(Java关键字)时,按照 table 元素中 columnOverride 属性的配置进行覆盖;如果设置为 true, 则需按照 SqlReservedWords 中定义的关键字列表,对关键字进行定界(分隔);定界符(分隔符)参见 beginningDelimiter 和 endingDelimiter 的设置--><property name="autoDelimitKeywords" value="false"/><!-- beginningDelimiter 和 endingDelimiter,定界符(分隔符),指明用于标记数据库关键字的符号,默认为为双引号 (");在 oracle 中是双引号 ("),在 MySQL 中需配置为反引号 (`)  --><property name="beginningDelimiter" value="`"/><property name="endingDelimiter" value="`"/><!-- 生成的 Java 文件的编码   --><property name="JavaFileEncoding" value="UTF-8"/><!-- 格式化 Java 代码 --><property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/><!-- 格式化 XML 代码 --><property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/><!-- 使生成的 Model 实现 Serializable 接口 --><plugin type="org.mybatis.generator.plugins.SerializablePlugin"/><!--  为生成的 Model 覆写 toString() 方法 --><plugin type="org.mybatis.generator.plugins.ToStringPlugin"/><!--  为生成的 Model 覆写 equals() 和 hashCode() 方法 --><plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/><!-- 数据Model属性对应Column获取插件 --><plugin type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin"/><!-- 批量插入插件 --><plugin type="com.itfsw.mybatis.generator.plugins.BatchInsertPlugin"/><!--  配置注释生成器 --><commentGenerator><!--  不生成所有注释,默认为 false  --><property name="suppressAllComments" value="true"/><!--  生成的注释中不包含时间信息,默认为 false --><property name="suppressDate" value="true"/><!--  生成的注释中,时间的显示格式 --><property name="dateFormat" value="yyyy/MM/dd"/><!-- 是否添加数据库表中字段的注释,默认为 false  --><property name="addRemarkComments" value="true"/></commentGenerator><!--    引用自定义的注释生成器 --><!--  <commentGenerator  type="deecyn.shop_02.mbg.MyCommentGenerator" ><property name="author" value="Deecyn"/></commentGenerator>--><!--  配置数据库连接  --><jdbcConnection driverClass="${jdbc.driverClass}"connectionURL="${jdbc.connectionURL}"userId="${jdbc.userId}"password="${jdbc.password}"><!--  若为 8.0 版本以上的 mysql-connector-java 驱动,需要设置 nullCatalogMeansCurrent = true --><!--  <property name="nullCatalogMeansCurrent" value="true"/> --></jdbcConnection><!--  配置类型转换规则  --><javaTypeResolver><!-- 是否强制使用 BigDecimal;默认为 false,把 JDBC 的 DECIMAL 和 NUMERIC 类型解析为 Integer;设置为 true 时,把 JDBC 的 DECIMAL 和 NUMERIC 类型解析为 java.math.BigDecimal --><property name="forceBigDecimals" value="true"/><!-- 设置时间类型的转换,默认 false,将所有 JDBC 的时间类型解析为 java.util.Date;设置为 true 时,将 JDBC 的时间类型按如下规则解析:DATE        -> java.time.LocalDateTIME        -> java.time.LocalTimeTIMESTAMP      -> java.time.LocalDateTimeTIME_WITH_TIMEZONE      -> java.time.OffsetTimeTIMESTAMP_WITH_TIMEZONE     -> java.time.OffsetDateTime--><property name="useJSR310Types" value="true"/></javaTypeResolver><!--  配置 Java 模型生成器 --><javaModelGenerator targetPackage="${package.model}" targetProject="src/main/java"><!-- 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的 field,而不是使用 setter;默认值为 false --><property name="constructorBased" value="false"/><!-- 在 targetPackage 的基础上,根据数据库的 schema 再生成一层 package,最终生成的类放在这个package下;默认为false --><property name="enableSubPackages" value="false"/><!-- 是否创建一个不可变的类:如果为true,那么 MBG 生成的类会没有 setter 方法,采用构造函数的方式来接收和设置每个字段的值,此时会忽略 constructorBased 属性的设置;默认值为 false  --><property name="immutable" value="false"/><!-- 设置在 getter 方法中,是否对 String 类型的字段调用 trim() 方法;默认为 false --><property name="trimStrings" value="true"/></javaModelGenerator><!-- SQL Map 的 xml 文件生成器 --><sqlMapGenerator targetPackage="${package.sqlMapper}" targetProject="src/main/resources"><!-- 同 javaModelGenerator 元素中的配置  --><property name="enableSubPackages" value="false"/></sqlMapGenerator><!--  关于 Mapper 接口的生成 --><javaClientGenerator type="XMLMAPPER" targetPackage="${package.mapper}"targetProject="src/main/java"><!-- 同 javaModelGenerator 元素中的配置  --><property name="enableSubPackages" value="false"/></javaClientGenerator><!-- 配置需要生成代码的数据库表 --><!--        <table tableName="role" domainObjectName="Role"--><!--               enableCountByExample="false" enableUpdateByExample="false"--><!--               enableDeleteByExample="false" enableSelectByExample="false"--><!--               selectByExampleQueryId="false">--><!--            &lt;!&ndash; 指定是否只生成 domain 类,默认为 false;--><!--            如果设置为 true,则只生成 domain 类,如果还配置了sqlMapGenerator,那么--><!--            在 mapper.xml 文件中,只生成 resultMap 元素 &ndash;&gt;--><!--            <property name="modelOnly" value="false"/>--><!--            &lt;!&ndash; 默认为 false;如果设置为 true,生成的 model 类会直接使用 column 本身的名字,而不会再使用驼峰命名方法,--><!--            比如 CREATE_DATE,生成的属性名字就是 CREATE_DATE,而不会是 createDate &ndash;&gt;--><!--            <property name="useActualColumnNames" value="false"/>--><!--            &lt;!&ndash;  生成主键的方法,如果设置了该元素,MBG 会在生成的 <insert> 元素中生成一条正确的 <selectKey> 元素 &ndash;&gt;--><!--            <generatedKey column="id" sqlStatement="MySql" identity="true"/>--><!--            &lt;!&ndash; 用来修改表中某个列的属性,MBG 会根据修改后的配置来生成 domain 的属性;--><!--                column:要重新设置的列名;一个 table 元素中可以定义多个 columnOverride 元素哈 &ndash;&gt;--><!--            <columnOverride column="show_status">--><!--                &lt;!&ndash; 使用 property 属性来指定列要生成的属性名称 &ndash;&gt;--><!--                <property name="property" value="showStatus"/>--><!--                &lt;!&ndash; javaType 用于指定生成的 domain 的属性类型,使用类型的全限定名&ndash;&gt;--><!--                <property name="javaType" value="java.lang.Integer"/>--><!--                &lt;!&ndash; jdbcType用于指定该列的JDBC类型--><!--                <property name="jdbcType" value=""/>--><!--                 &ndash;&gt;--><!--            </columnOverride>--><!--        </table>--><table tableName="user_account"  enableCountByExample="false"></table></context>
</generatorConfiguration>

每个标签的具体含义可以参考博客:
Mybatis代码生成器Mybatis-Generator使用详解

三.运行

mvn mybatis-generator:generate

四. mybatis-generator 自定义生成的文件名

在根据表名生成实体类时,其类名和字段名默认使用驼峰命名,比方说 CREATE_DATE,生成的属性名字就是createDate
相关属性设置: <property name="useActualColumnNames" value="false"/>

但是表名有时候比较长,我们就想要自己定义生成的文件名。

一.domainObjectName和mapperName属性

比较简单的做法就是对每一个表名定义你想要的实体类名domainObjectName

比方说,由于业务需要你定义了持久化类(Persistent Object),业务类(Business Object),在不同使用场景想在持久化类加上对应的后缀,那么就可以使用domainObjectName

        <table tableName="t_user_account"  enableCountByExample="false" domainObjectName="UserAccountPo">

注意: domainObjectName 定义的名称会导致生成的Mapper类名和Example类名也发生变化,上述例子中会变为UserAccountPoMapper和UserAccountPoExample

如果不想让Mapper类名发生变化, 可以指定下Mapper类名

        <table tableName="t_user_account"  enableCountByExample="false"  mapperName="UserAccountMapper" domainObjectName="UserAccountPo">

此时生成的Mapper和Example类名为 UserAccountMapper和UserAccountPoExample

上述方式的缺点就是每个table都需要单独指定类名,比较繁琐

二.domainObjectRenamingRule标签

如果表名有统一的规则,我们只是想将表名的固定前缀去除,然后加上固定后缀,就可以使用domainObjectRenamingRule标签

<!-- 去除首字母t(之所以要忽略大小写是因为searchString是在table名称驼峰化之后修改的), 然后在剩余部分加上后缀Po--><table tableName="t_user_account"  enableCountByExample="false" ><domainObjectRenamingRule searchString="(?i)^t(.*)" replaceString="$1Po"/></table>

那么如果该表没有需要去除的前缀呢? 可以这样写

 <table tableName="user_account"  enableCountByExample="false" ><domainObjectRenamingRule searchString="(?i)^user(.*)" replaceString="User$1Po"/></table>

三. RenameExampleClassPlugin插件

RenameExampleClassPlugin可以修改example文件名

<!--修改Example文件名-->
<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">  <property name="searchString" value="Example$"/> <property name="replaceString" value="Condition"/> 
</plugin>

四. columnRenamingRule标签

columnRenamingRule 可以修改实体属性名,其有两个属性: searchString,replaceString。用法跟domainObjectRenamingRule类似。注意 : 该标签的searchString 是在没有驼峰化之前生效的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JUC之Phaser的使用

Phaser是并发包juc.concurrent包下的一个关于线程同步和线程通信的一个工具类&#xff0c;类似于CountDownLanch 和 CyclicBarrier&#xff0c;不同的是 Phaser可以用来根据步骤&#xff0c;等待线程按步骤同时触发执行。 package com.example.test;import com.example.abstra…

ubuntu20.04网络问题以及解决方案

1.网络图标消失&#xff0c;wired消失&#xff0c;ens33消失 参考&#xff1a;https://blog.51cto.com/u_204222/2465609 https://blog.csdn.net/qq_42265170/article/details/123640669 原始是在虚拟机中切换网络连接方式&#xff08;桥接和NAT&#xff09;&#xff0c; 解决…

2024年1月6日~2024年1月12日周报

目录 一、前言 二、SeisInvNet-2020 三、RTM研究 四、遇到的问题及解决 4.1 KeyError: data 4.2 将mat文件转换为npy文件 五、小结 5.1 存在的问题及疑惑 5.2 下周安排 一、前言 本周的主要安排是阅读论文查看一些好的点子。 但是想法总是美好的&#xff0c;之前答应的…

图灵机:计算机科学的奠基之作

图灵机的概念由英国数学家阿兰图灵在1936年提出&#xff0c;这个时期正是计算机科学的黎明时分。那个时候&#xff0c;人们还在使用机械计算器进行计算&#xff0c;而且这些计算器的功能都非常有限。 图灵提出这个概念的初衷&#xff0c;是为了解决所谓的“判定问题”&#xf…

机器人持续学习基准LIBERO系列4——robosuite最基本demo

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新 1.robosuite的相关资料 是基于MuJoCo的机器人学习方针环境&#xff0c;提供一套基准环境…

蓝桥杯省赛无忧 竞赛常用库函数 课件5 排序

01 sort简介 02 sort的用法 sort(起始地址&#xff0c;结束地址的下一位,比较函数);默认用小于号#include<bits/stdc.h> using namespace std; int main(){int a[1000];int n;//读取数组大小cin>>n;//读取元素for(int i1;i<n;i)cin>>a[i];//对数组进行排…

vue3+vite+ts+pinia新建项目(略详细版)

1、新建项目 npm create vite@latest 2、安装依赖 yarn add vue-router yarn add -D @types/node vite-plugin-pages sass sass-loader 3、配置别名 //vite.config.ts import { defineConfig } from vite import path from node:path export default defineConfig({ plu…

如何有效提高矢量网络分析仪的动态范围

动态范围是网络分析仪&#xff08;VNA&#xff09;接收机的最大输入功率与最小可测量功率&#xff08;本底噪声&#xff09;之间的差值&#xff0c;如图所示&#xff0c;要使测量有效&#xff0c;输入信号必须在这些边界内。 如果需要测量信号幅度非常大的变化&#xff0c;例如…

openai自定义API操作 API (openai.custom):OpenAI API 实现电商平台的智能库存管理

在电商行业中&#xff0c;库存管理是至关重要的环节之一。一个高效的库存管理系统可以确保商品的正常供应&#xff0c;避免缺货或积压现象&#xff0c;从而提高销售效率和客户满意度。然而&#xff0c;传统的库存管理方式往往存在一些问题&#xff0c;如数据不准确、响应不及时…

版本控制系统教程

1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS&#xff0c;Subversion等不同&#xff…

JavaWEB学习笔记 2024-1-10 --JavaScript

上一篇 文章目录 3.JavaScript3.1第一个JS程序3.2JS的引入方式3.3JS中函数定义3.4函数的触发3.5查看浏览器控制台输出3.6数据类型3.7变量3.8运算符3.9流程控制语句3.10JS中的异常处理 3.JavaScript 是由网景公司发布,最开始的名字为LiveScript,之后和sun公司合作,改名为JavaSc…

[linux] git clone一个repo,包括它的子模块submodule

How do I "git clone" a repo, including its submodules? - Stack Overflow git clone git://github.com/foo/bar.git cd bar git submodule update --init --recursive

大模型关于Lora论文集合

《Chain of LoRA:Efficient Fine-tuning of Language Models via Residual Learning》 Chain of LoRA (COLA)&#xff0c;这是一种受 Frank-Wolfe 算法启发的迭代优化框架&#xff0c;旨在弥合 LoRA 和全参数微调之间的差距&#xff0c;而不会产生额外的计算成本或内存开销。CO…

状态机和相关算法应用分析

简介 状态机&#xff08;State Machine&#xff09;在软件编程中是一个数学模型&#xff0c;可以用状态转移图表示&#xff0c;指的是&#xff1a;现态在满足某个条件时&#xff0c;进行动作&#xff08;状态转移&#xff09;&#xff0c;从而转为另一个状态&#xff08;次态&…

【c++】类和对象1

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完 成 …

编程江湖:Python探秘之旅-----Python 实用工具和库(七)

在一个普通的工作日&#xff0c;团队聚集在一起讨论如何提升开发效率。这时&#xff0c;林克斯加入了讨论&#xff0c;他是团队的技术专家&#xff0c;对 Python 的生态系统了如指掌。 林克斯&#xff1a;&#xff08;满怀热情地&#xff09;你们知道吗&#xff0c;Python 有一…

JavaScript高级程序设计读书记录(十二):函数

函数是ECMAScript中最有意思的部分之一&#xff0c;这主要是因为函数实际上是对象。每个函数都是Function 类型的实例&#xff0c;而 Function 也有属性和方法&#xff0c;跟其他引用类型一样。因为函数是对象&#xff0c;所以函数名就是 指向函数对象的指针&#xff0c;而且不…

[linux]编译一个ko文件并运行

一、需求 有一段代码需要在运行时加载注入内核中&#xff0c;当用户层需要访问时可以提供内核态环境去运行。 二、c代码构建 // #include <errno.h> // #include <string.h> // #include <stdio.h> // #include <fcntl.h> // #include <stdlib.h…

Windows安装Rust环境(详细教程)

一、 安装mingw64(C语言环境) Rust默认使用的C语言依赖Visual Studio&#xff0c;但该工具占用空间大安装也较为麻烦&#xff0c;可以选用轻便的mingw64包。 1.1 安装地址 (1) 下载地址1-GitHub&#xff1a;Releases niXman/mingw-builds-binaries GitHub (2) 下载地址2-W…

Formnext2024法兰克福3D打印增材制造展览会现正接受报名

Formnext2024法兰克福3D打印增材制造展览会现正接受报名 Formnext法兰克福国际精密成型及 3D 打印制造展览会将于2024年11月19日至22日在法兰克福举办。 Formnext法兰克福国际精密成型及 3D 打印制造展览会在2023年迎来了32,851名专业人士和管理人员(50%来自国际)&#xff0c…