1つのカートを利用することはできません
馬と震える雌
A.S. プーシキン
みなさんこんにちは!
この記事では、Groovyを既存のJEE Mavenベースのアプリケーションに統合する方法について説明します。 プロジェクトのソースコードを出発点として使用する許可を与えてくれたAnton Schastny
schaanに感謝します。 したがって、このトピックは彼の記事「
調理の学習:Spring 3 MVC + Spring Security + Hibernate」の続きと考えることができます。
始めましょう。
プロジェクトの準備。
SpringSource Tool SuiteアセンブリでEclipseを使用しています。 ContactManager
プロジェクトをデフレートし
ます 。 しかし、IDEで急いで開かないでください。 すべてのプロジェクトファイル(.classpath .projectおよび.settingsディレクトリ)をすべて削除すると、さらに信頼性が高くなります。 Antonによる記事の発行以来、テクノロジーが進歩し、STSの新しいバージョンが(異なるプロジェクト構造とm2eプラグインの新しいバージョンで)出てきたため、まずpomファイルを修正し、次にSTSがそれに基づいて新しいプロジェクトを作成します。
簡単にするため、pom.xmlからアスペクトの依存関係とSpring Rooを削除しました。 また、MySQLをより使い慣れたPostgreSQLに置き換えました(jdbc.propertiesファイルを参照)。 しかし、これはすべて言い回しであり、おとぎ話です:依存関係を追加します
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.8.6</version> </dependency>
Groovyはすでにプロジェクトに統合されています。 JavaとGroovyの共同コンパイルを扱うことだけが残っています。
groovy-eclipse-compiler
約1年間、
gmavenプラグインを使用し
ました 。
groovy-eclipse-compilerに切り替えたため、彼との作業には「落とし穴」があり、それらを思い出しても意味がありません。 pom.xmlの編集
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> <compilerId>groovy-eclipse-compiler</compilerId> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-compiler</artifactId> <version>2.6.0-01</version> </dependency> </dependencies> </plugin>
pom.xmlのすべてが完了し、STSを実行して、プロジェクトをインポートします。 ファイル->インポート-> Maven->既存のMavenプロジェクト。 Groovy Infectedプロジェクトは非常に正常に見えます。
STSは誓いません、これは良いことですが、実験の純度のために、すべてをMavenで収集する必要があります。 実施します
mvn clean package
そして、ログに必要なものが表示されます。
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ contactmanager --- [INFO] Using Groovy-Eclipse compiler to compile both Java and Groovy files
Groovyに行く
したがって、Javaを使用して実際に別れを告げ、Groovyでの記述を続けます。 すでにかなりの数の連絡先があり、これらの同じ連絡先をタイプ別にグループ化します:「家族」、「仕事」など。
POJO、つまりPO
G Oから始めましょう。
src / main / groovyディレクトリを作成し、BuildPathに追加し、パッケージを作成します(この例ではcom.acme.contactmanager.domain)。
パッケージを右クリック->新規-> Groovyクラス
それを呼び出しましょう...言います...
ContactType half-actとそのソースコードを書きます:
@Entity @Table(name = "CONTACT_TYPES", uniqueConstraints = [ @UniqueConstraint(columnNames = ["code"]), @UniqueConstraint(columnNames = ["name"]) ]) class ContactType { @Id @GeneratedValue Integer id @Basic @Column(unique = true, nullable = true) String code @Basic @Column(unique = true, nullable = true) String name @Basic @Column(nullable = true) Boolean defaulttype = false @OneToMany(fetch = FetchType.LAZY, cascade = [CascadeType.REFRESH, CascadeType.MERGE], mappedBy = "contacttype") List<Contact> contacts = null }
超自然的な、通常の注釈はありません。ただし、配列の中では、中括弧の代わりに、正方形のものがあります。 修飾子、
セッターゲッター 、セミコロンはありません。すべてがきれいで整頓されています。
新しいエンティティがあることを休止状態に通知します
<hibernate-configuration> <session-factory> <mapping class="net.schastny.contactmanager.domain.Contact" /> <mapping class="com.acme.contactmanager.domain.ContactType" /> </session-factory> </hibernate-configuration>
Contact.javaに新しいフィールドを追加します。ここではgetter-setterなしではできません
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.REFRESH, optional = false) private ContactType contacttype; public ContactType getContacttype() { return contacttype; } public void setContacttype(ContactType contacttype) { this.contacttype = contacttype; }
ビルド、デプロイし、hibernate.hbm2ddl.auto = updateオプションがhibernateにある場合、データベースに新しいテーブルCONTACT_TYPESと新しいフィールドCONTACTS.contacttype_idが表示されます。
注:
データベースに既に連絡先がある場合、optinal = false注釈が存在するにもかかわらず、休止状態は非ヌル制限を設定できません。 リンクにデフォルト値を入力し、null以外の制限を設定すると、読者は宿題になります。グルーヴィー・ダオ
しかし、そこで止めるには早すぎます。 次のステップはgroovy-daoです。 javaの場合のように、「インターフェース実装」のペアで構成する必要があります。そうしないと、Springは不幸になります。 パッケージを作成して(今回はcom.acme.contactmanager.dao)、ContactTypeDAO.groovyクラスを作成してステップを繰り返します。
interface ContactTypeDAO { void addContactType(ContactType contactType) List<ContactType> listContactTypes() void removeContactType(Integer id) ContactType getDefault() }
Javaのようにすべてが99%なので、実装に移りましょう。 プログラミングスキルの頂点ではありませんが、例としては十分です。 listContactTypes()メソッドには、私たち全員が始めた主なチャームが既に含まれています(コード内のコメントを参照)。
@Repository class ContactTypeDAOImpl implements ContactTypeDAO { @Autowired private SessionFactory sessionFactory; private Session getCurrentSession() { sessionFactory.getCurrentSession() } @Override @Transactional void addContactType(ContactType contactType) { currentSession.save(contactType) } @Override @Transactional List<ContactType> listContactTypes() {
指定されたDAOをJavaサービスに統合することは残ります。
public interface ContactService {
@Service public class ContactServiceImpl implements ContactService {
コントローラーに呼び出しを追加します。
@RequestMapping("/index") public String listContacts(Map<String, Object> map) { map.put("contact", new Contact()); map.put("contactList", contactService.listContact());
ローカライズされたメッセージをmessages * .propertiesファイルに追加し、JSPのタイプのドロップダウンリスト(プロジェクトを参照)をデプロイします。 私たちはチェックします:
その後、テストにGroovyを使用したり、XMLを解析したりできます。 など
GitHubのプロジェクトのソースコード 。
Groovyにご連絡いただきありがとうございます!
参照資料
料理の学習:Spring 3 MVC + Spring Security + Hibernateグルーヴィーな家Groovy EclipseコンパイラーSpringSourceツールスイートプログラミングGroovy:Java開発者向けの動的生産性ロンボクプロジェクト、または定型的な戦争の宣言PSテストをプロジェクトに追加する方法
はここに書かれています 。 Webコントローラーのテストを含む。