java代码自动生成的插件_如何使用插件生成自定义Java 8代码
java代碼自動生成的插件
大多數程序員討厭的一件事就是編寫樣板代碼。 無休止的時間花費在設置實體類和配置數據庫連接上。 為了避免這種情況,您可以讓Speedment Open Source之類的程序為您生成所有這些代碼。 這樣可以很容易地以最少的人工就可以啟動和運行數據庫項目,但是當將大部分代碼移交給機器時,如何保持對編寫代碼的控制?
假設您有一個數據庫,該數據庫的表“ user”具有“ gender”列,并且您希望將其實現為java中的枚舉。 如果運行Speedment并將其用于生成代碼,則“性別”字段將表示為字符串。 這樣做的原因是,沒有任何內置映射器可在數據庫ENUM和自定義Java類之間進行轉換。 這是您可能會覺得發電機正在為您控制的情況之一。 好吧,不用擔心,因為從2.3 Hamilton版本開始 ,您可以通過為Speedment創建自己的插件來獲得相同的控件!
本文的目標
在此示例中,我們有一個數據庫架構,其中包含一個名為“ Person”的表。 一個人有一個ID,一個名字和一個性別。 性別被聲明為帶有三個可能值的ENUM:“男性”,“女性”和“其他”。 如果我們使用Speedment中的默認設置來生成此類,Speedment將把ENUM視為字符串。 但是有一些問題。 例如,如果要將新人員保留在數據庫中,則沒有什么可以阻止您在插入時將性別拼寫錯誤并獲得異常。 取而代之的是,我們想使用指定的替代方法將java枚舉定義為常量。 是什么使生成的代碼更安全且更易于使用。
我們可以使用Speedment插件來實現這一目標!
創建插件項目
要對Speedment平臺進行任何自定義修改,我們將需要定義一個插件。 插件是一款軟件,可以從pom.xml文件插入Speedment運行時。 該插件位于其自己的Maven項目中,并且可以在項目之間共享。
首先創建一個新的Maven項目,然后將Speedment聲明為依賴項。 在此項目中,您不需要speedment-maven-plugin。
<dependency><groupId>com.speedment</groupId><artifactId>speedment</artifactId><version>${speedment.version}</version> </dependency>插件系統圍繞兩個界面旋轉。 Component和ComponentConstructor。 組件是可插入的軟件,可以在Speedment生命周期中執行。 每個組件都具有允許執行的多個階段。 這些是“初始化”,“加載”,“解析”和“開始”。
ComponentConstructor是一種輕型類型,具有默認構造函數和用于初始化自定義組件新實例的方法。 maven插件使用它來設置新代碼。
這是我們的兩種實現的外觀:
CustomMappingComponent.java
public final class CustomMappingComponent extends AbstractComponent {CustomMappingComponent(Speedment speedment) {super(speedment);}@Overridepublic void onResolve() {// Resolve logic here...}@Overridepublic Class<CustomMappingComponent> getComponentClass() {return CustomMappingComponent.class;}@Overridepublic Software asSoftware() {return AbstractSoftware.with("Custom Mapping Component", "1.0", APACHE_2);}@Overridepublic Component defaultCopy(Speedment speedment) {return new CustomMappingComponent(speedment);} }CustomMappingComponentInstaller.java
public final class CustomMappingComponentInstaller implements ComponentConstructor<CustomMappingComponent> {@Overridepublic Component create(Speedment speedment) {return new CustomMappingComponent(speedment);} }現在,我們有了一個準插件,可以將其添加到Speedment項目中。 下一步是定義在字符串和性別之間映射的邏輯。 為此,首先我們需要性別枚舉。
Gender.java
public enum Gender {MALE ("Male"), FEMALE ("Female"),OTHER ("Other");private final String databaseName;Gender(String databaseName) {this.databaseName = databaseName;}public String getDatabaseName() {return databaseName;} }如果將枚舉值以大寫形式存儲在數據庫中,則該類可能會短得多,因為您可以簡單地使用Enum.name()方法來獲取數據庫名稱,但是如果您希望靈活地命名,則此方法更好常數。
現在到最后一塊。 我們需要在Speedment中聲明一個實現TypeMapper接口的類型。 類型映射器確實很簡單。 它包含兩種用于映射到數據庫類型或從數據庫類型映射的方法,以及用于檢索兩種類型的Java類的方法。
StringToGenderMapper.java
public final class StringToGenderMapper implements TypeMapper<String, Gender> {@Overridepublic Class<Gender> getJavaType() {return Gender.class;}@Overridepublic Class<String> getDatabaseType() {return String.class;}@Overridepublic Gender toJavaType(String value) {if (value == null) {return null;} else {return Stream.of(Gender.values()).filter(g -> g.getDatabaseName().equals(value)).findAny().orElseThrow(() -> new UnsupportedOperationException("Unknown gender '" + value + "'."));}}@Overridepublic String toDatabaseType(Gender value) {if (value == null) return null;else return value.getDatabaseName();}@Overridepublic boolean isIdentityMapper() {return false;} }此新的映射器也需要安裝在Speedment平臺中。 我們可以通過修改onResolve()方法從前面創建的組件中執行此操作:
CustomMappingComponent.java
@Override public void onResolve() {// Resolve logic here...getSpeedment().getTypeMapperComponent().install(StringToGenderMapper::new); }我們的新插件現已完成! 構建項目,您就可以開始了!
使用插件
要在項目中使用插件,只需修改該項目的pom.xml文件。 打開一個現有的Speedment項目并找到pom.xml文件。 在其中,您應該能夠找到speedment-maven-plugin。 為了使您自己的插件可供Maven插件訪問,您需要將其作為依賴項添加到<plugin> -tag內,并將ComponentInstaller添加到配置中。 這是它的外觀示例:
pom.xml
<plugin><groupId>com.speedment</groupId><artifactId>speedment-maven-plugin</artifactId><version>${speedment.version}</version><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- Our plugin project --><dependency><groupId>com.github.pyknic</groupId><artifactId>custom-mapping-component</artifactId><version>1.0.0-SNAPSHOT</version></dependency></dependencies><configuration><components><!-- Path to the component installer --><component implementation=" com.github.pyknic.salesinfo.plugin.CustomMappingComponentInstaller" /></components></configuration> </plugin>您還需要將項目添加為運行時依賴項,因為必須可以從生成的代碼訪問新的Gender枚舉。
<dependencies>...<dependency><groupId>com.github.pyknic</groupId><artifactId>custom-mapping-component</artifactId><version>1.0.0-SNAPSHOT</version></dependency>... </dependencies>嘗試一下
而已! 插件已安裝! 如果要將特定的列映射到性別而不是字符串,則可以進入用戶界面,導航到“項目樹”中的特定列,然后在下拉列表中選擇新的類型映射器。
如果要查看加載到平臺中的所有組件和/或類型映射器的列表,還可以在UI中轉到“關于”→“組件...”。 在那里您應該看到新的組件。
摘要
在本文中,您學習了如何為Speedment創建自定義插件,該插件將新的Type Mapper從String集成到Gender枚舉。 您還了解了如何查看將哪些組件加載到平臺中以及如何選擇要用于每一列的類型映射器。
PS:如果您為Speedment項目創建了一些很棒的新映射器,請考慮在我們的Gitter聊天中與社區共享它們!
翻譯自: https://www.javacodegeeks.com/2016/04/generate-customized-java-8-code-plugins.html
java代碼自動生成的插件
總結
以上是生活随笔為你收集整理的java代码自动生成的插件_如何使用插件生成自定义Java 8代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的for语句(linux中fo
- 下一篇: 查询linux用户列表(查询linux