一个网站为什么做的不好看,软件源码成品资源下载网站,北京网站建设石榴汇,wordpress如何注册地址java代码自动生成的插件大多数程序员讨厌的一件事就是编写样板代码。 无休止的时间花费在设置实体类和配置数据库连接上。 为了避免这种情况#xff0c;您可以让Speedment Open Source之类的程序为您生成所有这些代码。 这样可以很容易地以最少的人工就可以启动和运行数据库项… 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。 dependencygroupIdcom.speedment/groupIdartifactIdspeedment/artifactIdversion${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 ClassCustomMappingComponent 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 ComponentConstructorCustomMappingComponent {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 TypeMapperString, Gender {Overridepublic ClassGender getJavaType() {return Gender.class;}Overridepublic ClassString 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 plugingroupIdcom.speedment/groupIdartifactIdspeedment-maven-plugin/artifactIdversion${speedment.version}/versiondependenciesdependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependency!-- Our plugin project --dependencygroupIdcom.github.pyknic/groupIdartifactIdcustom-mapping-component/artifactIdversion1.0.0-SNAPSHOT/version/dependency/dependenciesconfigurationcomponents!-- Path to the component installer --component implementation
com.github.pyknic.salesinfo.plugin.CustomMappingComponentInstaller //components/configuration
/plugin 您还需要将项目添加为运行时依赖项因为必须可以从生成的代码访问新的Gender枚举。 dependencies...dependencygroupIdcom.github.pyknic/groupIdartifactIdcustom-mapping-component/artifactIdversion1.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.htmljava代码自动生成的插件