Какую базу данных я получу с помощью приложения Apache Wicket? - PullRequest
1 голос
/ 02 декабря 2010

Итак, я разработал свой объектно-ориентированный дизайн, собрал схему базы данных в соответствии с моим дизайном и пообещал невероятно короткий срок доставки, который я решил сделать своей жизнью «проще» с помощью веб-фреймворка.

Spring кажется безумно сложным (и довольно поверхностным на первый взгляд), и Ру не может понять и / или получить помощь на форумах, кроме как делать что-то помимо базового приложения CRUD.

IЯ использую (и учусь!) калитку, чтобы выполнить мою задачу.Я трачу много времени, пытаясь выяснить, как Wicket создает и использует базу данных, и если я правильно понимаю, она делает это автоматически из POJ, которые я буду создавать.Однако я создаю объекты, которые используют объекты умеренно сложными способами, и мне хотелось бы иметь лучшее представление о том, как будет выглядеть конечный результат в mySQL.

Есть ли у кого-нибудь какая-либо информация или ссылки, которые объясняюткак выглядит полученная схема из приложения Wicket?

Ответы [ 3 ]

5 голосов
/ 02 декабря 2010

Прошло более 2 лет с тех пор, как я в последний раз использовал Wicket, но AFAIK он вообще не поддерживает постоянство .. Хотя Wicket - это очень хорошая структура ИМХО, вам придется самостоятельно обрабатывать слой базы данных с помощью Hibernate или какой-либо другой ORM (или вообще без ORM)

3 голосов
/ 02 декабря 2010

Мне кажется, что вы пришли из мира 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

ура!

0 голосов
/ 06 декабря 2010

Если вы не привязаны к MySQL, вы также можете рассмотреть некоторые из так называемых баз данных noSQL .Wicket отлично справляется с задачами объектно-ориентированным образом, и если вы не создаете корпоративное приложение, для которого требуется множество людей, уже обученных конкретным технологиям, таким как MySQL, вы можете значительно снизить общую стоимость владения, не принимаяПуть SQL.

...