Locked History Actions

Butterfly_Persistence/First

最初の例

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", ""
    );
  }
}