Мне кажется, что вы пришли из мира PHP или .Net и не привыкли к тому, как все работает в Java (с упором на работу).Короче говоря, бесплатного обеда не существует, и если вы просто посмотрите на Spring или Roo и заключите, что они слишком сложные, у вас могут быть трудные времена.Java предлагает множество структур и гибкость, но вы должны делать всю работу.
Тем не менее, я люблю Wicket, хотя у него есть некоторая кривая обучения.У Wicket есть отличный подход к шаблонированию и разрешению всей бизнес-логики и управляющей логики в реальном Java-коде.Кроме того, у Wicket есть активное сообщество с очень обширной документацией, вики и примерами.Как указал Джорил, 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 (я предпочитаю создавать многомодульный проект maven).с модулями для внешнего интерфейса, бэкэнда и API; это войдет в ваш бэкэнд):
<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 and users_picture)являются ли вторичные таблицы ссылкой на эту сущность)
Все мои примеры основаны на использовании базы данных MySQL;Вы можете заменить на любую старую СУБД.
Надеюсь, это поможет вам: а) проснуться и почувствовать запах пепла, б) довести свой проект Wicket до скорости ORM-wise
ура!