我们有一个 Java 应用程序,数据库 (Oracle) 上有很多配置表。我们希望有基于 Web 的 GUI 来设置这些表,目前我们通过 SQL 查询更新这些表。为数据库子集开发 CRUD 的最简单方法是什么?有没有基于Java的框架可以做到这一点?
恕我直言,有一个非常好的管理应用程序数据的解决方案无需编写任何额外的代码。
LightAdmin 是一个用于 Spring/JPA 支持的应用程序的可插入 Java 库,它通过干净简单的 UI 提供标准 CRUD 功能、过滤、JSR-303 验证。 它提供用于界面定制的 DSL,您可以随时将其从应用程序中插入/拔出。
这里是DSL配置定制的一个小例子:
@Administration( Booking.class )
public class BookingAdministration {
public static ScopesConfigurationUnit scopes( final ScopesConfigurationUnitBuilder scopeBuilder ) {
return scopeBuilder
.scope( "All", all() )
.scope( "Smoking Apartments", specification( smokingApartmentsSpec( true ) ) )
.scope( "Non Smoking Apartments", specification( smokingApartmentsSpec( false ) ) )
.scope( "Long-term bookings", filter( longTermBookingPredicate() ) ).defaultScope().build();
}
public static FiltersConfigurationUnit filters( final FiltersConfigurationUnitBuilder filterBuilder ) {
return filterBuilder
.filter( "Customer", "user" )
.filter( "Booked Hotel", "hotel" )
.filter( "Check-In Date", "checkinDate" ).build();
}
public static FieldSetConfigurationUnit listView( final FieldSetConfigurationUnitBuilder fragmentBuilder ) {
return fragmentBuilder
.field( "user" ).caption( "Customer" )
.field( "hotel" ).caption( "Hotel" )
.field( "checkinDate" ).caption( "Check-In Date" )
.field( "smoking" ).caption( "Smoking" )
.field( "beds" ).caption( "Beds" )
.build();
}
public static DomainTypePredicate longTermBookingPredicate() {
return new DomainTypePredicate() {
@Override
public boolean apply( final Booking booking ) {
return booking.getNights() > 20;
}
};
}
public static DomainTypeSpecification smokingApartmentsSpec( final boolean isSmokingApartment ) {
return new DomainTypeSpecification() {
@Override
public Predicate toPredicate( final Root root, final CriteriaQuery<?> query, final CriteriaBuilder cb ) {
return cb.equal( root.get( "smoking" ), isSmokingApartment );
}
};
}
}
Telosys Tools ( http://www.telosys.org/ ) 专为此类工作而设计。
它使用现有数据库生成源代码(通常是 CRUD 屏幕) 如果需要的话还可以自定义模板
尝试的最佳方法是按照教程进行操作:https://sites.google.com/site/telosystutorial/
(有一个 Spring MVC / Spring Data / JPA 的堆栈)
Grails 基本上是“Java on Rails”,并且脚手架的行为完全符合您的预期。
我认为使用 ORM 工具可以更轻松地生成 CRUD。 最近有一个关于 Java ORMs 的问题 - 其中 Hibernate 获得了最多的选票(尽管没有使用排名相当高的 ORM!)。
reinCRUD 是一个 vaadin 插件,它使用带注释的休眠实体来工作。您可以在几分钟内创建一个 CRUD 应用程序,并且可以重用列表、表单和搜索表单等组件。在我们的例子中,您可以使用数据库建模工具(例如hibernate工具)来生成Hibernate实体,然后在它们上放置reinCRUD的注释。
根据您现有的数据库设计,您可以考虑Apache Isis。
Apache Isis 最适合运行整个应用程序,因此仅管理部分数据集可能有点过分了。
但对于任何其他寻求整体解决方案的人来说 - 具有基于 Web 的 GUI(Wicket 和 2 个自定义 HTML 版本)、完整的数据库后端支持(现在支持 JDO)以及 POJO 的运行时自省(Isis 不是代码生成器) ),也许这对你有用。
Apache Isis SQL 对象存储(使用 JDBC)可以配置为将现有表映射到您的类,将表列映射到您的类属性(您可以覆盖属性文件中自动分配的名称)。
对于较大的项目,也许JDO数据存储更合适,并且配置有注释。
我是 Apache Isis PMC 的贡献者和成员 - 特别关注 SQL 对象存储。
OpenXava (https://openxava.org) 生成一个仅编写 JPA 实体的完整应用程序。