最初の例
import java.sql.*;
import com.jenkov.db.*;
import com.jenkov.db.impl.init.*;
import com.jenkov.db.itf.*;
import com.jenkov.db.itf.mapping.*;
/**
* 以下はHSQLDBを使った例。データベースを作成し、レコードを挿入し、
* そのレコードを検索する。
*
* Connectionの管理はORMに任せるのではなく、こちらで行う。したがって、特に
* setAutoCommit、commit、rollbackはこちら側で呼び出さなければならない。
* ORM側は与えられたConnectionを使って、データベースへの操作を行う。
*
* Connectionの管理をORM側に任せてしまうと以下のようなデメリットがある。
* 1.コネクションプーリングができない。
* 2.Connection and Transaction Scopingの動作がよくわからない。
*/
public class TestZero {
/** これはアプリ内にただ一つあればよい */
public static PersistenceManager persistenceManager = new PersistenceManager();
public static void main(String[]args) throws Exception {
// DBドライバをロード
Class.forName("org.hsqldb.jdbcDriver");
// データベースを作成
{
DatabaseInitializer databaseInitializer =
persistenceManager.getConfiguration().getDatabaseInitializer();
databaseInitializer.add(1, "create table user(id identity, name char(80), primary key(id))");
Connection conn = getConnection(); // setAutoCommit(true)の状態
persistenceManager.initializeDatabase(conn);
conn.close();
}
// レコードを挿入
{
Connection conn = getConnection();
conn.setAutoCommit(false);
IDaos daos = persistenceManager.createDaos(conn);
User user = new User();
user.name = "鈴木";
daos.getObjectDao().insert(user);
user = new User();
user.name = "佐藤";
daos.getObjectDao().insert(user);
conn.commit();
conn.close();
}
// レコードを検索
{
Connection conn = getConnection();
IDaos daos = persistenceManager.createDaos(conn);
User user = (User)daos.getObjectDao().read(User.class,
"select * from user where id=0");
conn.close();
System.out.println(user.toString());
}
}
/** Userの定義 */
@AClassMapping(tableName="user")
public static class User {
int id;
String name;
/** idは自動挿入される */
@AGetterMapping(databaseGenerated = true)
public int getId() { return id; }
public void setId(int value) { id = value; }
public String getName() { return name; }
public void setName(String value) { name = value; }
@Override public String toString() {
return "id:" + id + ", name:" + name;
}
}
/** コネクションの取得 */
private static Connection getConnection() throws SQLException {
return DriverManager.getConnection(
"jdbc:hsqldb:file:testdb", "sa", ""
);
}
}