insert
下記のテーブルを使用します。DBはhsqldbです。
CREATE TABLE ACCOUNT (
ACCOUNTID INTEGER NOT NULL IDENTITY PRIMARY KEY
, USERID LONGVARCHAR NOT NULL
, PASSWORD LONGVARCHAR NOT NULL
, EMAIL LONGVARCHAR NOT NULL
, NAME LONGVARCHAR NOT NULL
, RDATE DATE DEFAULT 'CURRENT_TIMESTAMP' NOT NULL
, UDATE DATE
);
- Account.java
package org.seasar.application.gusuku.model;import java.io.Serializable;
import java.util.Date;/**
* @author duran
*/
public class Account implements Serializable {public static final String accountid_ID = "identity";
private long accountid;
private String userid;
private String password;
private String email;
private String name;
private Date rdate;
private Date udate;
public long getAccountid() {
return accountid;
}public void setAccountid(long accountid) {
this.accountid = accountid;
}public String getEmail() {
return email;
}public void setEmail(String email) {
this.email = email;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getPassword() {
return password;
}public void setPassword(String password) {
this.password = password;
}public Date getRdate() {
return rdate;
}public void setRdate(Date rdate) {
this.rdate = rdate;
}public Date getUdate() {
return udate;
}public void setUdate(Date udate) {
this.udate = udate;
}public String getUserid() {
return userid;
}public void setUserid(String userid) {
this.userid = userid;
}public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("accountid=").append(this.accountid);
sb.append(",userid=").append(this.userid);
sb.append(",password=").append(this.password);
sb.append(",name=").append(this.name);
sb.append(",email=").append(this.email);
sb.append(",rdate=").append(this.rdate);
sb.append(",udate=").append(this.udate);
return sb.toString();
}
}
- AccountDao.java
package org.seasar.application.gusuku.dao;import java.util.List;
import org.seasar.application.gusuku.model.Account;
/**
* @author duran
*/
public interface AccountDao {
public final static Class BEAN = Account.class;
public final static String insert_NO_PERSISTENT_PROPS = "rdate";
public final static String findAll_QUERY = "select * from Account";
public int insert(Account account);
public int update(Account account);
public int delete(Account account);
public int deleteBatch(List accounts);
public List findAll();}
- DaoTest.java
package org.seasar.application.gusuku.test;import java.util.Iterator;
import java.util.List;import org.seasar.application.gusuku.dao.AccountDao;
import org.seasar.application.gusuku.model.Account;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;/**
* @author duran
*
*/
public class DaoTest {private final static String PATH = "org/seasar/application/gusuku/dao/AccountDao.dicon";
public static void main(String[] args) {
S2Container container = S2ContainerFactory.create(PATH);
container.init();
try {
AccountDao dao = (AccountDao) container
.getComponent(AccountDao.class);Account account = new Account();
account.setUserid("userid");
account.setPassword("password");
account.setName("duran");
account.setEmail("duran@hoge.org");dao.insert(account);
List result = dao.findAll();
for(Iterator ite = result.iterator();ite.hasNext();){
System.out.println(ite.next());
}
//全件削除
dao.deleteBatch(result);
} finally {
container.destroy();
}
}
}
- dao.dicon
< ?xml version="1.0" encoding="UTF-8"?>
- j2ee.dicon
< ?xml version="1.0" encoding="Shift_JIS"?>
"org.hsqldb.jdbcDriver"
"jdbc:hsqldb:hsql://localhost:9001"
"sa"
""
600
10
- AccountDao.dicon
< ?xml version="1.0" encoding="UTF-8"?>
dao.interceptor
やっとここから解説です。
- Account.java
これで、DBから連番を取得します。
public static final String accountid_ID = "identity";
あとはDBのカラムに合わせたsetter/getterを定義しています。
- AccountDao.java
DaoがどのJavaBeanと関連付けるのかを指定しています。ここではAccountと関連付けています。
public final static Class BEAN = Account.class;
カラム「rdate」にはDB側でデフォルト値を設定しているので、insert時にはrdateを永続化の対象から外しています。
public final static String insert_NO_PERSISTENT_PROPS = "rdate";
全件取得を行うfindAllメソッドのSQLを定義しています。
public final static String findAll_QUERY = "select * from Account";
- dao.dicon
S2Daoで必要なS2DaoInterceptorを定義しています。
- j2ee.dicon
DB接続に必要な情報を定義しています。
- AccountDao.dicon
AccountDaoにS2Daoを適用するためにAOPの定義を行っています。
- 実行結果
思った通りの結果を得ることができました。
DEBUG 2005-02-07 23:37:21,265 [main] 物理的なコネクションを取得しました
DEBUG 2005-02-07 23:37:21,265 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-07 23:37:21,375 [main] 論理的なコネクションを閉じました
DEBUG 2005-02-07 23:37:21,406 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-07 23:37:21,406 [main] INSERT INTO Account (name, userid, password, email, udate)
VALUES('duran', 'userid', 'password', 'duran@hoge.org', null)
DEBUG 2005-02-07 23:37:21,421 [main] CALL IDENTITY()
DEBUG 2005-02-07 23:37:21,421 [main] 物理的なコネクションを取得しました
DEBUG 2005-02-07 23:37:21,421 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-07 23:37:21,421 [main] 論理的なコネクションを閉じました
DEBUG 2005-02-07 23:37:21,421 [main] 論理的なコネクションを閉じました
DEBUG 2005-02-07 23:37:21,437 [main] select * from Account
DEBUG 2005-02-07 23:37:21,437 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-07 23:37:21,468 [main] 論理的なコネクションを閉じました
accountid=133,userid=userid,password=password,name=duran,
email=duran@hoge.org,rdate=2005-02-07 00:00:00.0,udate=null
DEBUG 2005-02-07 23:37:21,468 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-07 23:37:21,468 [main] DELETE FROM Account WHERE accountid = 133
DEBUG 2005-02-07 23:37:21,468 [main] 論理的なコネクションを閉じました
DEBUG 2005-02-07 23:37:21,468 [main] 物理的なコネクションを閉じました
DEBUG 2005-02-07 23:37:21,484 [main] 物理的なコネクションを閉じました
次はS2DaoTestCaseとトランザクションに挑戦します。