mybatis.generator 1.3.6中添加的domainObjectRenamingRule说明

domainObjectRenamingRule该功能项是在MBG 1.3.6中新增加的功能,用于定义实体的重命名规则,常见的用途是取消表前缀。类似于columnRenamingRule,前者是重命名生成的模型对象的名称,后者是重命名表字段的名称。

以下是最当前最新的版本

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.6</version>
</dependency>

如果在低于该版本的MBG中使用该功能,会出现如下错误XML Parser Error on line 59: 必须声明元素类型 "domainObjectRenamingRule"。

首先我们说说“columnRenamingRule”

该功能出现较早,字面上就是在表字段生成属性名称,对字段进行重命名,然后生成属性,searchString使用正则,replaceString为替换的字符串。

比如以下,flower表中有一个字段是flower_name,我希望生成的实体中属性不是flowerName,而是flower_name -> name。此场景会发生在我们想省略表字段中一些通配的前缀,只保留真正有意义的那部分。

<table tableName="flower">
	<generatedKey column="id" sqlStatement="Mysql" identity="true" />
	<columnRenamingRule searchString="^flower_" replaceString="" />
</table>

按照上述配置,Flower将使用name属性对应表中字段flower_name。因为使用了通用Mapper这里生成了注解

public class Flower {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "flower_name")
    private String name;

    private String color;
    setter/getter....
}

FlowerMapper.xml

<resultMap id="BaseResultMap" type="com.xx.Flower">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="flower_name" jdbcType="VARCHAR" property="name" />
    <result column="color" jdbcType="VARCHAR" property="color" />
</resultMap>flower_name" jdbcType="VARCHAR" property="name" />
    <result column="color" jdbcType="VARCHAR" property="color" />
</resultMap>

然后是domainObjectRenamingRule

该功能和columnRenamingRule的配置基本是一致的。在它的基础上,我便直接上手。数据库中有两张表分别是cyber_Link、cyber_movie。我希望生成的模型是Link和Movie,略去前缀Cyber,配置如下。

<table tableName="cyber%">
	<generatedKey column="id" sqlStatement="MySql" identity="true" />
	<domainObjectRenamingRule searchString="^cyber_" replaceString="" />
</table>^cyber_" replaceString="" />
</table>

很意外,生成的模型依旧是按默认的方式分别为CyberLink和CyberMovie。表象是好像配置没有生效一样。

于是我找到了源码中org.mybatis.generator.api.FullyQualifiedTable的这一段进行了调试。

if (domainObjectRenamingRule != null) {
    Pattern pattern = Pattern.compile(domainObjectRenamingRule.getSearchString());
    String replaceString = domainObjectRenamingRule.getReplaceString();
    replaceString = replaceString == null ? "" : replaceString; //$NON-NLS-1$
    Matcher matcher = pattern.matcher(finalDomainObjectName);
    finalDomainObjectName = matcher.replaceAll(replaceString);
}

发现了domainObjectRenamingRule和columnRenamingRule重命名时机的不同,domainObjectRenamingRule的重名发生在生成了默认实体名之后,如本例中,正常流程应该是cyber_movie -> CyberMovie -> Movie(我配置的正则是按照表前缀开头的,所以我没能到这一步)。而columnRenamingRule是发生在生成属性名之前。

多年以后回头看,补充说明一下吧,直观上看上下两段配置几乎没有差别,很难给到大家帮助。

columnRenamingRule和domainObjectRenamingRule因替换时机不同,他们生成的过程对比

flow_name -> name -> name        先将表名前缀替换,然后生成属性。所以替换的前缀包含下划线

cyber_link -> cyberLink -> link      先生成驼峰实体名,让后对实体名替换,所以不需包含下划线

所以上面的配置调整为即可

<table tableName="cyber%">
	<generatedKey column="id" sqlStatement="MySql" identity="true" />
	<domainObjectRenamingRule searchString="^Cyber" replaceString="" />
</table>^Cyber" replaceString="" />
</table>

参考

https://github.com/mybatis/generator/pull/176

根据引用内容,报错信息显示无法找到插件'org.mybatis.generator:mybatis-generator-maven-plugin:1.3.6'。这个问题可能有几个解决办法。首先,可以检查插件的版本号是否正确,因为报错信息提到了不同版本的插件。另外,可以尝试以下几种解决方法: 1. 引用提到的报红问题,可能是因为插件没有正确安装或配置导致的。可以尝试重新安装或更新插件。 2. 引用提到的解决方法是检查网络连接问题,因为连接仓库失败导致插件无法下载。可以检查网络设置,并且尝试切换到其他可用的仓库地址。 3. 引用的建议是将mybatis-generator-maven-plugin插件放在和pluginManagement同级别或在plugins上添加它。这样可以确保插件正确加载。 总的来说,要解决插件未找到的问题,需要检查插件的版本号、网络连接和插件配置情况,并按照需要进行相应的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Plugin ‘org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2‘ not found](https://blog.csdn.net/m0_52896752/article/details/126556045)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [解决[ERROR] Plugin org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7 or one of its ...](https://blog.csdn.net/fly19920602/article/details/125079647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值