2

私は現在、EclipseLinkSpring3.0MVCを学んでいます。

  • EclipseLinkを使用して単純なスタンドアロンアプリケーションを作成しました。META-INF/persistence.xmlファイルを使用し、mysqlデータベースからデータを読み書きします。

  • また、apachetomcatでSpring3MVCを使用して単純な「HelloWorld」アプリケーションを作成しまし。これは、次のチュートリアルに基づいています:http ://www.mkyong.com/spring-mvc/spring-3-rest-hello-world-example

では、両方のテクノロジーをどのようにリンクすればよいでしょうか。http://static.springsource.org/spring/docs/3.0.0.M3/spring-framework-reference/html/ch14s06.htmlから理解できる限り、LocalContainerEntityManagerFactoryBeanを作成する必要があります。

 <bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="someDataSource"/>
  <property name="loadTimeWeaver">
    <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
  </property>
 </bean>

しかし、「someDataSource」とは何ですか?http://commons.apache.org/dbcp/のような別のライブラリを使用する必要がありますか?では、eclipselinkをどうすればよいですか?

また、JPAを構成したら、SpringControllerからJPAにアクセスするにはどうすればよいですか。

ありがとうございました

4

1 に答える 1

1

someDataSource は単なる別の Bean になります。たとえば、次のようになります。

<bean id="someDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

ここでは、プロパティのプロパティ置換も使用しています。これは、次の Bean によって指定されます。

<context:property-placeholder location="classpath:properties/runtime.properties" />

コンテキストは別の xml 名前空間にあるため、以下を追加します。

xmlns:context="http://www.springframework.org/schema/context"

XML 名前空間に

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd

Bean xml ドキュメント内の schemaLocation 文字列に追加します。

classpath:properties/runtime.properties

このプロパティ ファイルは、標準の Maven セットアップでは次の場所にあります。

src/main/resources/properties/runtime.properties

この runtime.properties ファイル内で、プレースホルダー (jdbc.driverClassName、jdbc.url など) を持つ各プロパティの値を定義する必要があります。この例は次のようになります。

jdbc.driverClassName=com.mysql.jdbc.Driver

データベースに MySQL を使用している場合。

一般的に言えば、コントローラーとリポジトリー (DAO) の間にサービス層が必要になる場合があります。その理由は、コントローラーがリクエストの処理と応答にのみ集中する必要があるためです。ビジネスロジックは、ビジネスオブジェクトなどを介して別のレイヤーで実行する必要があります。サービスレイヤーは、Webレイヤーとリポジトリレイヤーの間の仲介役として機能します。これは懸念事項を分離するだけでなく、物事を無限に単体テスト可能にし、Spring アプリケーションの大きな部分を占めます (少なくともそうあるべきです!)。

接続方法については、この Bean を Context にも挿入してみてください。

<context:component-scan base-package="xx.yy..." />

xx と yy はパッケージ名です。これにより、Spring はパッケージをスキャンして「コンポーネント」または @Controller オブジェクト、@Service、および @Repository (他にもいくつかありますが、知っておくべき主なものです) を検出します。この情報が Spring に提供されると、他の Bean に @Autowire Bean (依存性注入) を行うことができます。

例えば:

@Service
public class SomeServiceImpl implements SomeService
{
  private SomeRepository someRepository;

  @Autowired
  public void setSomeRepository(SomeRepository someRepository)
  {
    this.someRepository = someRepository;
  }
  ...
}

これにより、リポジトリがサービスに挿入され、そのリポジトリ メソッドにアクセスできるようになります。

もう 1 つの設計上のヒントとして、Spring では常にインターフェース用にプログラムします。開発の初期段階では、Hibernate リポジトリを実装したいと思うかもしれませんが、最終的には DBA がそれを嘲笑し、ストレート SQL を使用する JDBC リポジトリを必要とする可能性があるため、リポジトリに関しては特にそうです。このように、Hibernate ではなく JDBC アプローチを使用してリポジトリを実装し、Hibernate の代わりに JDBC リポジトリを注入するだけで済みます。

これで始められることを願っています!

于 2012-05-24T19:54:19.267 に答える