Ebeanとは
Ebean はシンプルなORMフレームワークです。マッピングにはJPAアノテーションが使えます。本家は以下
http://www.avaje.org/
簡単なサンプル
クラスパスに以下のライブラリを追加
- ebean-2.0.2.jar
- javax.persistence.jar
- h2.jar
設定ファイル
Ebeanの設定ファイルをソースフォルダのルートに用意。以下の設定でddlの自動作成と自動実行が行われます。
ebean.ddl.generate=true ebean.ddl.run=true ebean.datasource.factory=default datasource.default=ordh2 datasource.ordh2.username=sa datasource.ordh2.password= datasource.ordh2.databaseUrl=jdbc:h2:tcp://localhost:9092/test datasource.ordh2.databaseDriver=org.h2.Driver
Entity
Entityの親クラスとして、Domainクラスを作成。
import java.sql.Timestamp; import javax.persistence.Id; import javax.persistence.MappedSuperclass; import javax.persistence.Version; import com.avaje.ebean.annotation.CreatedTimestamp; @MappedSuperclass public class Domain { @Id private Integer id; @CreatedTimestamp private Timestamp cretime; @Version private Timestamp updtime; ・・以下アクセッサ }
CustomerクラスをEntityにする。
import javax.persistence.Entity; import javax.persistence.Table; import com.avaje.ebean.annotation.EnumMapping; import com.avaje.ebean.validation.Length; import com.avaje.ebean.validation.NotNull; @Entity @Table(name="o_customer") public class Customer extends Domain { private static final long serialVersionUID = 1L; @EnumMapping(nameValuePairs="NEW=N,ACTIVE=A,INACTIVE=I") public enum Status { NEW, ACTIVE, INACTIVE } Status status; @NotNull @Length(max=40) String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; } }
以上のように、JPAによるアノテーション付けます。
実行してみる
import static org.junit.Assert.*; import org.h2.tools.Server; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.avaje.ebean.Ebean; import com.avaje.ebean.annotation.Transactional; public class Example { private static final String BASE_DIR = "db\\h2"; private static Server tcpServer; private static Server webServer; @BeforeClass public static void setUpBeforeClass() throws Exception { tcpServer = org.h2.tools.Server.createTcpServer( new String[] { "-baseDir", BASE_DIR, "-tcpPort", "9092" }).start(); webServer = org.h2.tools.Server.createWebServer( new String[] { "-baseDir", BASE_DIR, "-tcpPort", "8082" }).start(); } @AfterClass public static void tearDownAfterClass() throws Exception { tcpServer.shutdown(); webServer.shutdown(); } @Test public void test() throws Exception { insertCustomer(); Customer c = Ebean.getReference(Customer.class, 1); assertEquals("Thome", c.getName()); } @Transactional public void insertCustomer() { Customer c = new Customer(); c.setId(1); c.setName("Thome"); c.setStatus(Customer.Status.NEW); Ebean.save(c); } }
以上で、以下のようなCustomerテーブルが作成され、レコードが1件追加されます。
SELECT * FROM O_CUSTOMER;
STATUS | NAME | ID | CRETIME | UPDTIME | |
---|---|---|---|---|---|
N | Thome | 1 | 2009-09-08 00:09:52.715 | 2009-09-08 00:09:52.715 |
SQLファイル
実行時に作成発行されるDDLはプロジェクトのルートに以下の2つのsqlファイルとして作成されます。
- ordh2-create.sql
- ordh2-drop.sql
中身はこない
ordh2-create.sql
create table o_customer ( status varchar(1), name varchar(40) not null, id integer not null auto_increment, cretime timestamp, updtime timestamp, constraint ck_o_customer_status check (status in ('N','I','A')), constraint pk_o_customer primary key (id)) ;
ordh2-drop.sql
SET REFERENTIAL_INTEGRITY FALSE; drop table o_customer; SET REFERENTIAL_INTEGRITY TRUE;