Skip to content

Commit 4e1dc61

Browse files
author
hewei
committed
LombokPlugin 重构支持更多注解
1 parent a3dff20 commit 4e1dc61

File tree

5 files changed

+274
-271
lines changed

5 files changed

+274
-271
lines changed

README.md

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@
2828
* [~~Table增加前缀插件(TablePrefixPlugin)~~](#11-table增加前缀插件)
2929
* [~~Table重命名插件(TableRenamePlugin)~~](#12-table重命名插件)
3030
* [自定义注释插件(CommentPlugin)](#13-自定义注释插件)
31-
* [增量插件(IncrementsPlugin)](#14-增量插件)
31+
* [~~增量插件(IncrementsPlugin)~~](#14-增量插件)
3232
* [查询结果选择性返回插件(SelectSelectivePlugin)](#15-查询结果选择性返回插件)
3333
* [~~官方ConstructorBased配置BUG临时修正插件(ConstructorBasedBugFixPlugin)~~](#16-官方constructorbased配置bug临时修正插件)
3434
* [乐观锁插件(OptimisticLockerPlugin)](#17-乐观锁插件)
3535
* [表重命名配置插件(TableRenameConfigurationPlugin)](#18-表重命名配置插件)
3636
* [Lombok插件(LombokPlugin)](#19-Lombok插件)
3737
* [数据ModelCloneable插件(ModelCloneablePlugin)](#20-数据ModelCloneable插件)
3838
* [状态枚举生成插件(EnumTypeStatusPlugin)](#21-状态枚举生成插件)
39+
* [增量插件(IncrementPlugin)](#22-增量插件)
3940

4041
---------------------------------------
4142
Maven引用:
@@ -1251,6 +1252,8 @@ Mybatis Generator是原生支持自定义注释的(commentGenerator配置type
12511252
### 14. 增量插件
12521253
为更新操作生成set filedxxx = filedxxx +/- inc 操作,方便某些统计字段的更新操作,常用于某些需要计数的场景;
12531254

1255+
>warning:该插件在整合LombokPlugin使用时会生成大量附加代码影响代码美观,强力建议切换到新版插件[IncrementPlugin](#22-增量插件);
1256+
12541257
插件:
12551258
```xml
12561259
<xml>
@@ -1400,7 +1403,7 @@ public class Test {
14001403
```
14011404
### 18. 表重命名配置插件
14021405
官方提供了domainObjectRenamingRule(官方最新版本已提供)、columnRenamingRule分别进行生成的表名称和对应表字段的重命名支持,但是它需要每个表单独进行配置,对于常用的如表附带前缀“t_”、字段前缀“f_”这种全局性替换会比较麻烦。
1403-
该插件提供了一种全局替换机制,当表没有单独指定domainObjectRenamingRule、columnRenamingRule时采用全局性配置。同时该插件会修复官方domainObjectRenamingRule的bug(没有进行正确的首字母大写)。
1406+
该插件提供了一种全局替换机制,当表没有单独指定domainObjectRenamingRule、columnRenamingRule时采用全局性配置。
14041407
同时插件提供clientSuffix、exampleSuffix、modelSuffix来修改对应生成的类和文件的结尾(之前issue中有用户希望能把Mapper替换成Dao)。
14051408
- 全局domainObjectRenamingRule
14061409
```xml
@@ -1460,11 +1463,10 @@ public class Test {
14601463
### 19. Lombok插件
14611464
使用Lombok的使用可以减少很多重复代码的书写,目前项目中已大量使用。
14621465
但Lombok的@Builder对于类的继承支持很不好,最近发现新版(>=1.18.2)已经提供了对@SuperBuilder的支持,所以新增该插件方便简写代码。
1463-
>warning: 目前很多IDE工具对@SuperBuilder支持不是很好,虽不影响正常使用,但是开发时很不友好,暂时可以使用ModelBuilderPlugin代替该功能。
14641466

14651467
>warning1: @Builder注解在Lombok 版本 >= 1.18.2 的情况下才能开启,对于存在继承关系的model会自动替换成@SuperBuilder注解。
14661468
1467-
>warning2: 配合插件IncrementsPlugin 并且 @Builder开启的情况下,因为@SuperBuilder的一些限制,
1469+
>warning2: 配合插件IncrementsPlugin(已不推荐使用,请使用新版[IncrementPlugin](#22-增量插件)解决该问题) 并且 @Builder开启的情况下,因为@SuperBuilder的一些限制,
14681470
插件模拟Lombok插件生成了一些附加代码可能在某些编译器上会提示错误,请忽略(Lombok = 1.18.2 已测试)。
14691471

14701472
```xml
@@ -1596,3 +1598,35 @@ public class Tb {
15961598
}
15971599
}
15981600
```
1601+
### 22. 增量插件
1602+
为更新操作生成set filedxxx = filedxxx +/- inc 操作,方便某些统计字段的更新操作,常用于某些需要计数的场景,需配合([ModelColumnPlugin](#8-数据model属性对应column获取插件))插件使用;
1603+
1604+
插件:
1605+
```xml
1606+
<xml>
1607+
<!-- 增量插件 -->
1608+
<plugin type="com.itfsw.mybatis.generator.plugins.IncrementPlugin" />
1609+
1610+
<table tableName="tb">
1611+
<!-- 配置需要进行增量操作的列名称(英文半角逗号分隔) -->
1612+
<property name="incrementColumns" value="field1,field2"/>
1613+
</table>
1614+
</xml>
1615+
```
1616+
使用:
1617+
```java
1618+
public class Test {
1619+
public static void main(String[] args) {
1620+
// 在构建更新对象时,配置了增量支持的字段会增加传入增量枚举的方法
1621+
Tb tb = Tb.builder()
1622+
.id(102)
1623+
.field4(new Date())
1624+
.build()
1625+
.increment(Tb.Column.field1.inc(1)) // 字段1 统计增加1
1626+
.increment(Tb.Column.field2.dec(2)); // 字段2 统计减去2
1627+
// 更新操作,可以是 updateByExample, updateByExampleSelective, updateByPrimaryKey
1628+
// , updateByPrimaryKeySelective, upsert, upsertSelective等所有涉及更新的操作
1629+
this.tbMapper.updateByPrimaryKey(tb);
1630+
}
1631+
}
1632+
```

src/main/java/com/itfsw/mybatis/generator/plugins/IncrementsPlugin.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -260,16 +260,16 @@ private boolean lombokBuilderClassGenerated(TopLevelClass topLevelClass, List<In
260260
}
261261

262262
// 类注解
263-
topLevelClass.addImportedType(LombokPlugin.EnumLombokAnnotations.SETTER.getClazz());
264-
builderCls.addAnnotation(LombokPlugin.EnumLombokAnnotations.SETTER.getAnnotation());
265-
topLevelClass.addImportedType(LombokPlugin.EnumLombokAnnotations.ACCESSORS_FLUENT_TRUE.getClazz());
266-
builderCls.addAnnotation(LombokPlugin.EnumLombokAnnotations.ACCESSORS_FLUENT_TRUE.getAnnotation());
263+
topLevelClass.addImportedType("lombok.Setter");
264+
builderCls.addAnnotation("@Setter");
265+
topLevelClass.addImportedType("lombok.experimental.Accessors");
266+
builderCls.addAnnotation("@Accessors(fluent = true)");
267267
if (topLevelClass.getSuperClass() != null) {
268-
topLevelClass.addImportedType(LombokPlugin.EnumLombokAnnotations.TO_STRING_CALL_SUPER.getClazz());
269-
builderCls.addAnnotation(LombokPlugin.EnumLombokAnnotations.TO_STRING_CALL_SUPER.getAnnotation());
268+
topLevelClass.addImportedType("lombok.ToString");
269+
builderCls.addAnnotation("@ToString(callSuper = true)");
270270
} else {
271-
topLevelClass.addImportedType(LombokPlugin.EnumLombokAnnotations.TO_STRING.getClazz());
272-
builderCls.addAnnotation(LombokPlugin.EnumLombokAnnotations.TO_STRING.getAnnotation());
271+
topLevelClass.addImportedType("lombok.ToString");
272+
builderCls.addAnnotation("@ToString");
273273
}
274274

275275

@@ -576,8 +576,8 @@ private void addIncMethodToTopLevelClass(TopLevelClass topLevelClass, InnerClass
576576
topLevelClass.addImportedType("java.util.HashMap");
577577
// inc map 获取方法
578578
if (withLombok) {
579-
topLevelClass.addImportedType(LombokPlugin.EnumLombokAnnotations.ACCESSORS_FLUENT_TRUE.getClazz());
580-
fIncrements.addAnnotation(LombokPlugin.EnumLombokAnnotations.ACCESSORS_FLUENT_TRUE.getAnnotation());
579+
topLevelClass.addImportedType("lombok.experimental.Accessors");
580+
fIncrements.addAnnotation("@Accessors(fluent = true)");
581581
} else {
582582
Method getIncMapMethod = JavaElementGeneratorTools.generateMethod(
583583
METHOD_GET_INC_MAP,

0 commit comments

Comments
 (0)