Struts2, Spring, mybatis。
これでアプリを作りたくなったのです。
以前、Sturts1 + Spring + iBATIS という、わりとありがちなフレームワークでアプリを作ったことがあったのですが、
やっぱりXML地獄は嫌だ・・・。
XMLそのものが嫌いではなく、いや、むしろ、XML自体は好きで、Ajaxなど通信で取り交わされるテキストはXMLがいいなーと思うのですが、
これらのフレームワークのXMLはどうも好きになれません。
これらのXMLの利点は、ある設定(アクションと遷移先だとか、Springが管理するBeanだとか、SQL文だとか)を一元的に管理するという利点があるとは思うのですが、
でも、まとめたいことって人それぞれなわけで、
「アクションのクラスとコードとそのアクションが関連する設定をひとつにまとめたい!」
という要望には、XMLは答えてくれないのです。
そこで、今回のやつらを使ってみようというわけです。
mybatisも、アノテーションにより、インタフェースとSQLががっつり結びつくので好きです。
ただ、動的SQLになるとXMLしかないので、実際にそれなりのアプリを作るなら、SQLはXMLに統一すべきですが。
作ってみるアプリは、まあお遊び的ですが、付箋をペタペタ貼る日記というものをWebアプリで作りたいと思います。
jQuery UIとか使って。
まずは、環境準備。
DBはMySQL。とってきてインストール。
次は、eclipseだ。現時点で最新っぽい3.7.1を持ってくる。
今まで全然使ったことなくて、さっぱりわからないけど、いろいろダウンロードするのが面倒なので、
mavenを使ってみる。
最新は3らしいので、そいつをダウンロード(現時点の最新は3.0.3)。
http://maven.apache.org/download.html
次の、m2eclipse・・・なんか、m2eという名前になったらしい。
eclipseから
http://download.eclipse.org/technology/m2e/releases
を使ってインストール。
で、Window →Preferences → Maven → Installations で、さっき入れたmaven3.0.3を指定。
してみたら、Embeddedのバージョンが3.0.2だった。あんま意味ないかなぁ。
しかし、これだけでは足りない。
Mavenプロジェクトを作成したときに、Webプロジェクトっぽくするために、WTP連携を入れる必要があるらしい。ここが、日本語のページをぐぐってもなかなか分からず、詰まったところ。
英語のページ読んでやっと分かった。
eclipseのWindow →Preferences → Maven → Discovery → Open Catalog
で、「m2e-wtp」をインストール。
そしてやっと、Mavenプロジェクトを作成。
Archetypeはmaven-archetype-webapp、Artifact Idは、今回のアプリ 「付箋をペタペタ貼る日記」ということで、「TagDiary」、Group Idは、ルートパッケージにしようと思っている、「com.motchi.tagdiary」で決定。
できたら、とりあえずライブラリを入れてしまいたいので、pom.xmlを編集。
こうなった。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.motchi.tagdiary</groupId>
<artifactId>TagDiary</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>TagDiary Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.2.3.1</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.2.3.1</version>
</dependency>
</dependencies>
<build>
<finalName>TagDiary</finalName>
</build>
</project>
中身としては、
strus2, spring, mybatisを持ってきているのは当然として、
mybatis-spring | 名前の通り、mybatisとspringを連携させるため |
struts2-convention-plugin | struts2のアクションの設定をアノテーションでできるようにするため |
jstl | jspでJSTLを使うため。<c:forEach>とかよく使いそうだから |
mysql-connector-java | DBにMySQLを使うため |
aspectjweaver, cglib | AspectJを利用してAOPしまくるため |
struts2-spring-plugin | struts2とspringを連携させるため |
後のものは・・・記憶にございません。思い出したら書いてみます。
長くなったので、続きはエントリを改めて。