2010-12-02 6 views
1

私はオブジェクト指向の設計を行い、デザインに合わせてデータベーススキーマをまとめ、Webフレームワークを使用して自分の人生を「楽に」することを決断したことは間に合わないほど短くすることを約束しました。Apache Wicketアプリケーションではどのようなデータベースを入手できますか?

春は基本的なCRUDアプリを超えて何もしていない以上、フォーラムでは理解できない、そして/または助けを得ることが不可能であり、見栄えが悪いようです。

私はWicketを使って自分の仕事を達成しています。私はWicketがデータベースをどのように作成し、使用するかを理解しようと多くの時間を費やしています。正しく理解すれば、これは私が作成するPOJOから自動的に行います。しかし、私は中程度に複雑な方法でオブジェクトを使用するオブジェクトを作成しています。最終結果がmySQLのように見えるようにするために、私はより良いアイデアを持っていきたいと思います。

Wicketアプリケーションから得られたスキーマの外観を説明する情報やリンクはありますか? Wicketのは非常に良いフレームワークIMHOですが...

答えて

3

あなたはPHPや.Netの世界から来ているようで、Javaでの作業に慣れていないようです(仕事に重点を置いて)。要するに、無料のランチはありません。あなたが春やRooを一目見て、これらが複雑すぎると結論づけていると、あなたはいくらか荒い時を過すかもしれません。 Javaは多くのフレームワークと柔軟性を提供しますが、あなたはその作業を行う必要があります。

私はWicketを愛していますが、多少の学習曲線はありますが、 Wicketは、実際のJavaコードですべてのビジネスおよび制御ロジックをテンプレート化して解決する優れたアプローチを持っています。また、Wicketには、非常に豊富なドキュメント、wiki、および例があるアクティブなコミュニティがあります。 Joril氏が指摘しているように、Wicketは、オブジェクトリレーショナルマッピング(ORM)や一般的なAFAIKの永続性に関連することはしません。このために何かを提供する拡張機能やWicket関連のプロジェクトがあるかもしれません。 JPAを使用してモデルクラスに注釈を付ける

<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> 

: 使用Maven2をし、春(はい、春)とあなたのpom.xmlに以下の依存関係をインポートします。ここでは

はこれを取り組む方法についてのあなたのために私からのアドバイスですそのような/ 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-プラグインを使用してください。これは非常に時間を節約します。データベースはmaven2のテスト段階で生成されます。テスト・データなどをデータベースに埋め込むのに役立つ他のプラグイン(DBUnit)もあります(古い学校の.sqlスクリプトも使用できます)。モデル内で何かを変更すると、変更は自動的にデータベースに反映されます(コースの作成後)。これは開発中に大きくなります。

(私はフロントエンド、バックエンドと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)ORMワイズ

歓声を高速化するために、あなたのWicketのプロジェクトを取得するのに役立ちます願っています!

+0

PHPまたは.netから来ていない、私はJava開発者です。私は、Springにはかなり大きな学習曲線があり、奇妙なXML構成などがたくさんあると言うのは不合理だとは思わない。明らかに、Rooは複雑であると特徴づけるのは難しいでしょうが、多くの関係を追加するとすぐに足場に問題が発生しました。このプロジェクトが完了すると、文書や援助を安心させることはできませんでした。とにかくまだ成長していません。あなたの答えをありがとう:私は、これらの注釈とそれらがHibernateでどのように使われているかを詳しく見ていきます。 – IcedDante

+1

これは固い答えですが、私は通常hibernate3-maven-pluginをスキップし、開発時には 'hibernate.hbm2ddl.auto = update'プロパティを使用します。そうすれば、私はすべてのビルドでMavenを実行する必要はなく、Hibernateは私のために更新します。プロダクションでは、代わりに 'hibernate.hbm2ddl.auto = validate'が必要です。 Hibernateを本番データセットでワイルドにすることは決して望ましくありません(たとえば、テーブルの名前変更は古いテーブルのドロップと新しいテーブルの作成として解釈され、プロセスでデータを失う)。その代わりにLiquiBaseを使用してください。 –

+0

ブライアンありがとう!これは確かなコメントです( - : –

5

それは2+、私は最後のウィケットを使用するので年ぶりだが、私の知る限り、それはすべての永続化を処理していない、あなたは、データベースが休止状態または一部を自分でレイヤ処理する必要があります他のORM(もちろんORMもありません)

0

MySQLにロックされていない場合は、so-called noSQL databasesのいくつかを考慮する必要があります。 Wicketはオブジェクト指向の方法では大変な作業です.MySQLのような特定の技術ですでに訓練されている人々の欲求を必要とするエンタープライズアプリケーションを作成していない場合、総所有コストを大幅に削減できます。 SQLパス。

+0

)これはどのように見えるのでしょうか?オンラインで、または自分で例を表示できますか? –

+1

Wicketはビューテクノロジーであり、モデルを永続させることとは全く別のものです。どの代替データベースサイトの例もあなたのために働くでしょう。 –

関連する問題