我们有一个Java应用程序,在数据库(Oracle)上有许多配置表。我们希望有基于Web的GUI来设置这些表,我们目前通过SQL查询更新这些表。为数据库的子集开发CRUD的最简单方法是什么?这样做有没有基于Java的框架?
答案 0 :(得分:8)
恕我直言,有一个很好的解决方案来管理应用程序数据,而无需编写任何额外的代码。
LightAdmin是一个可插拔的Java库,用于Spring / JPA支持的应用程序,它通过干净简单的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 );
}
};
}
}
答案 1 :(得分:6)
Telosys工具(http://www.telosys.org/)专为此类工作而设计。
它使用现有数据库生成源代码(通常是CRUD屏幕) 如有必要,可以自定义模板
尝试它的最佳方法是遵循教程:https://sites.google.com/site/telosystutorial/
(有一个Spring MVC / Spring Data / JPA的堆栈)
答案 2 :(得分:3)
Grails 基本“Java on Rails”,脚手架的行为完全符合您的预期。
答案 3 :(得分:0)
我认为使用ORM工具可以更轻松地生成CRUD。关于Java ORMs的SO最近有一个问题 - Hibernate得到的票数最多(尽管不使用ORM排名相当高!)。
答案 4 :(得分:0)
reinCRUD是一个vaadin加载项,使用带注释的hibernate实体。您可以在几分钟内创建CRUD应用程序,并且可以重复使用列表,表单和搜索表单等组件。在我们的例子中,您可以使用数据库建模工具(例如hibernate tools)生成Hibernate实体,然后在其上放置reinCRUD注释。
答案 5 :(得分:0)
根据您现有的数据库设计,您可以考虑Apache Isis。
Apache Isis最适合运行整个应用程序,因此仅管理数据集的某些部分可能有点过分。
但对于其他寻求整体解决方案的人来说 - 使用基于Web的GUI(Wicket和2个自定义HTML版本),完整的数据库后端支持(现在支持JDO)和POJO的运行时内省(Isis不是代码生成器),也许这对你有用。
Apache Isis SQL对象存储(使用JDBC)可以配置为将现有表映射到类和表列到类属性(可以覆盖属性文件中自动分配的名称)。
对于较大的项目,也许JDO数据存储更合适,并配置了注释。
我是Apache Isis PMC的贡献者和成员 - 特别关注SQL对象库。