在我看来,您似乎来自 PHP 或 .Net 世界,不习惯 Java 中的工作方式(强调工作)。简而言之:没有免费的午餐,如果您只看一下 Spring 或 Roo 并得出结论,这些都太复杂了,那么您可能会遇到一些艰难的时期。 Java 提供了很多框架和灵活性,但您必须自己动手。
也就是说,我喜欢 Wicket,尽管它确实有一些学习曲线。 Wicket 有一种很好的方法来模板化和解析实际 Java 代码中的所有业务和控制逻辑。此外,Wicket 拥有一个活跃的社区,拥有非常广泛的文档、wiki 和示例。正如 Joril 指出的那样,Wicket 没有做任何与对象关系映射 (ORM) 或一般 AFAIK 中的持久性相关的事情。可能有扩展或与 Wicket 相关的项目为此提供了一些东西。
以下是我对如何解决此问题的建议:
使用 Maven2 和 Spring(是的,Spring)并在您的 pom.xml 中导入以下依赖项:
<properties>
<spring.version>3.0.0.RELEASE</spring.version>
<wicket.version>1.4.10</wicket.version>
</properties>
<dependencyManagement>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
<version>1.2.2.osgi</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>com.springsource.org.apache.commons.pool</artifactId>
<version>1.5.3</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.mysql.jdbc</groupId>
<artifactId>com.springsource.com.mysql.jdbc</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>com.springsource.org.hibernate</artifactId>
<version>3.3.2.GA</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>com.springsource.javax.persistence</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>com.springsource.org.hibernate.annotations</artifactId>
<version>3.4.0.GA</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>com.springsource.org.apache.commons.logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket</artifactId>
<version>${wicket.version}</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-spring</artifactId>
<version>${wicket.version}</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-extensions</artifactId>
<version>${wicket.version}</version>
</dependency>
像这样使用 JPA/Hibernate 注释来注释您的模型类(只是一个显示几个常见结构的示例):
@Entity(name = "User")
@Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = { "email" }) })
@SecondaryTable(name = "user_picture")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String email;
private String name;
private String password;
@Lob
@Column(table = "users_picture", length = 524288)
private byte[] picture;
private Date birthDate;
private String phonenumber;
@ManyToOne(fetch = FetchType.EAGER)
private Address homeAddress;
@Enumerated(EnumType.STRING)
private Gender gender;
@CollectionOfElements(fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
private Set<Weekday> workdays = new HashSet<Weekday>();
使用 hibernate3-maven-plugin 从带注释的模型类生成数据库。这是一个巨大的节省时间。数据库是在 maven2 的测试阶段生成的。还有其他插件 (DBUnit) 可以帮助您使用测试数据等填充数据库(您也可以使用老式的 .sql 脚本)。如果您更改模型中的某些内容,更改会自动传播到您的数据库(当然是在 maven 构建之后),这在开发过程中非常有用。
将此添加到您的 pom 中(我更喜欢制作一个包含前端、后端和 api 模块的多模块 maven 项目;这将进入您的后端 pom):
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.0-alpha-1</version>
<configuration>
<components>
<component>
<name>hbm2ddl</name>
<implementation>
annotationconfiguration
</implementation>
</component>
</components>
<componentProperties>
<drop>true</drop>
<jdk5>true</jdk5>
<propertyfile>
target/classes/jdbc.properties
</propertyfile>
<skip>${maven.test.skip}</skip>
</componentProperties>
</configuration>
<executions>
<execution>
<phase>process-test-resources</phase>
<goals>
<goal>hbm2ddl</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
生成的表格如下所示:
+--------------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| email | varchar(255) | YES | UNI | NULL | |
| name | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
| birthDate | datetime | YES | | NULL | |
| phonenumber | varchar(255) | YES | | NULL | |
| gender | varchar(255) | YES | | NULL | |
| address | bigint(20) | YES | MUL | NULL | |
+--------------------------------+--------------+------+-----+---------+----------------+
(users_workdays 和 users_picture 是引用此实体的辅助表)
我所有的例子都是基于使用 MySQL 数据库;您可以用任何旧的 RDBMS 替换。
我希望这可以帮助你 a) 醒来并闻到灰烬,b) 让你的 Wicket 项目加快 ORM 的速度
干杯!