Hatena::Groupseasarproject

きむきむのSeasar日記 このページをアンテナに追加 RSSフィード

seasar.org
<< 2004/06 >>
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
 | 

2004年06月28日

[][]S2Dao入門 S2Dao入門 - きむきむのSeasar日記 を含むブックマーク はてなブックマーク - S2Dao入門 - きむきむのSeasar日記 S2Dao入門 - きむきむのSeasar日記 のブックマークコメント

とりあえず、SELECT, INSERT, UPATE, DELETEを使ったサンプル。

ぶっちゃけ、やっつけ仕事です。。。(^^;


CREATE TABLE文

CREATE TABLE test_table ( pk INTEGER, testChar VARCHAR(20), PRIMARY KEY (pk));


TestTableDao.java

package jp.gr.java_conf.kimura.seasar2.example.dao;

import java.util.List;

public interface TestTableDao {

 public Class BEAN = TestData.class;

 public List getAllData();

 public int insert(TestData testData);

 public int update(TestData testData);

 public int delete(TestData testData);

}


TestData.java

package jp.gr.java_conf.kimura.seasar2.example.dao;

import java.io.Serializable;

public class TestData implements Serializable {

 public static final String TABLE = "TEST_TABLE";

 private int pk;

 private String testChar;

 public int getPk() {

  return pk;

 }

 public void setPk(int pk) {

  this.pk = pk;

 }

 public String getTestChar() {

  return testChar;

 }

 public void setTestChar(String testChar) {

  this.testChar = testChar;

 }

 public String toString() {

  return "pk = " + pk + " : testChar = " + testChar;

 }

}


Main.java

package jp.gr.java_conf.kimura.seasar2.example.dao;

import java.util.List;

import org.seasar.framework.container.S2Container;

import org.seasar.framework.container.factory.S2ContainerFactory;

public class Main {

 private static final String PATH = "jp/gr/java_conf/kimura/seasar2/example/dao/TestDao.dicon";

 public static void main(String[] args) {

  S2Container container = S2ContainerFactory.create(PATH);

  container.init();

  try {

   TestTableDao dao = (TestTableDao) container.getComponent(TestTableDao.class);

   showAllData(dao);

   insertData(dao, 0, "oreju");

   showAllData(dao);

   insertData(dao, 1, "ayaya");

   showAllData(dao);

   insertData(dao, 2, "Aya Ueto");

   showAllData(dao);

   updateData(dao, 2, "Yuri Ebihara");

   showAllData(dao);

   deleteData(dao, 2);

   showAllData(dao);

  } finally {

   container.destroy();

  }

 }

 private static void showAllData(TestTableDao dao) {

  List datas = dao.getAllData();

  if (datas.size() == 0) {

   System.out.println("Data was not found...");

   return;

  }

  for (int i = 0; i < datas.size(); ++i) {

   System.out.println(datas.get(i));

  }

 }

 private static void insertData(TestTableDao dao, int pk, String testChar) {

  TestData testData = new TestData();

  testData.setPk(pk);

  testData.setTestChar(testChar);

  dao.insert(testData);

 }

 private static void updateData(TestTableDao dao, int pk, String testChar) {

  TestData testData = new TestData();

  testData.setPk(pk);

  testData.setTestChar(testChar);

  dao.update(testData);

 }

 private static void deleteData(TestTableDao dao, int pk) {

  TestData testData = new TestData();

  testData.setPk(pk);

  dao.delete(testData);

 }

}


TestDao.dicon

<??xml version="1.0" encoding="Shift_JIS"?>

<?!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"

"http://www.seasar.org/dtd/components.dtd">

<components>

<include path="jp/gr/java_conf/kimura/seasar2/example/dao/j2ee.dicon"/>

<component class="jp.gr.java_conf.kimura.seasar2.example.dao.TestTableDao">

<aspect>

<component class="org.seasar.dao.interceptors.S2DaoInterceptor"/>

</aspect>

</component>

</components>

(j2ee.diconは、サンプルそのままのパクリ。これもパクリだけど。。。)


TestTableDao_getAllData.sql

SELECT * FROM test_table


TestTableDao_insert.sql

INSERT INTO test_table (pk, testChar) VALUES(/*testdata.pk*/10 , /*testdata.testChar*/'TEST')

(「10,」ってして、,もトークンの対象にされてたのに、10秒くらいハマッタ。スペースが必要!)


TestTableDao_update.sql

UPDATE test_table SET testChar = /*testdata.testChar*/'TEST2' WHERE pk = /*testdata.pk*/10


TestTableDao_delete.sql

DELETE FROM test_table WHERE pk = /*testdata.pk*/10


実行結果

DEBUG 2004-06-28 16:09:23,423 [main] SELECT * FROM test_table

DEBUG 2004-06-28 16:09:23,653 [main] 物理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:23,653 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,064 [main] 論理的なコネクションを閉じました

Data was not found...

DEBUG 2004-06-28 16:09:24,104 [main] INSERT INTO test_table (pk, testChar) VALUES(0 , 'oreju')

DEBUG 2004-06-28 16:09:24,104 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,334 [main] 論理的なコネクションを閉じました

DEBUG 2004-06-28 16:09:24,344 [main] SELECT * FROM test_table

DEBUG 2004-06-28 16:09:24,344 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,364 [main] 論理的なコネクションを閉じました

pk = 0 : testChar = oreju

DEBUG 2004-06-28 16:09:24,364 [main] INSERT INTO test_table (pk, testChar) VALUES(1 , 'ayaya')

DEBUG 2004-06-28 16:09:24,364 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,374 [main] 論理的なコネクションを閉じました

DEBUG 2004-06-28 16:09:24,374 [main] SELECT * FROM test_table

DEBUG 2004-06-28 16:09:24,374 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,374 [main] 論理的なコネクションを閉じました

pk = 0 : testChar = oreju

pk = 1 : testChar = ayaya

DEBUG 2004-06-28 16:09:24,384 [main] INSERT INTO test_table (pk, testChar) VALUES(2 , 'Aya Ueto')

DEBUG 2004-06-28 16:09:24,384 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,384 [main] 論理的なコネクションを閉じました

DEBUG 2004-06-28 16:09:24,384 [main] SELECT * FROM test_table

DEBUG 2004-06-28 16:09:24,404 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,414 [main] 論理的なコネクションを閉じました

pk = 0 : testChar = oreju

pk = 1 : testChar = ayaya

pk = 2 : testChar = Aya Ueto

DEBUG 2004-06-28 16:09:24,425 [main] UPDATE test_table SET testChar = 'Yuri Ebihara'

WHERE pk = 2

DEBUG 2004-06-28 16:09:24,425 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,425 [main] 論理的なコネクションを閉じました

DEBUG 2004-06-28 16:09:24,435 [main] SELECT * FROM test_table

DEBUG 2004-06-28 16:09:24,435 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,435 [main] 論理的なコネクションを閉じました

pk = 0 : testChar = oreju

pk = 1 : testChar = ayaya

pk = 2 : testChar = Yuri Ebihara

DEBUG 2004-06-28 16:09:24,445 [main] DELETE FROM test_table WHERE pk = 2

DEBUG 2004-06-28 16:09:24,445 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,445 [main] 論理的なコネクションを閉じました

DEBUG 2004-06-28 16:09:24,445 [main] SELECT * FROM test_table

DEBUG 2004-06-28 16:09:24,445 [main] 論理的なコネクションを取得しました

DEBUG 2004-06-28 16:09:24,465 [main] 論理的なコネクションを閉じました

pk = 0 : testChar = oreju

pk = 1 : testChar = ayaya

DEBUG 2004-06-28 16:09:24,465 [main] 物理的なコネクションを閉じました

orejuと、ayayaだけの世界になりました。(w

(testCharとかは、気にしていけない!)


[][]初めてのDBテスト 初めてのDBテスト - きむきむのSeasar日記 を含むブックマーク はてなブックマーク - 初めてのDBテスト - きむきむのSeasar日記 初めてのDBテスト - きむきむのSeasar日記 のブックマークコメント

TestTableDaoTest.java

package jp.gr.java_conf.kimura.seasar2.example.dao;

import org.seasar.extension.dataset.DataSet;

import org.seasar.extension.unit.S2TestCase;

public class TestTableDaoTest extends S2TestCase {

 private TestTableDao dao;

 public TestTableDaoTest(String name) {

  super(name);

 }

 protected void setUp() throws Exception {

  include("TestDao.dicon");

  readXlsReplaceDb("Prepare.xls");

 }

 public void testGetAllData() {

  DataSet dataSet = readXls("Prepare.xls");

  int expect = dataSet.getTable("test_table").getRowSize();

  int result = dao.getAllData().size();

  assertEquals(expect, result);

 }

 public void testInsert() {

 }

 public void testUpdate() {

 }

 public void testDelete() {

 }

}

ってしたら、うごかない・・・(;_;)


org.seasar.framework.exception.EmptyRuntimeException: [ESSR0007]dataSourceはnullあるいは空であってはいけません

 at org.seasar.extension.unit.S2TestCase.getDataSource(S2TestCase.java:109)

 at org.seasar.extension.unit.S2TestCase.deleteDb(S2TestCase.java:170)

 at org.seasar.extension.unit.S2TestCase.readXlsReplaceDb(S2TestCase.java:157)

 at jp.gr.java_conf.kimura.seasar2.example.dao.TestTableDaoTest.setUp(TestTableDaoTest.java:15)


TestDao.diconの中で、j2ee.diconをインクルードしてるのが悪いのかな?と思って、別に分けて、setUpで2回includeをしてみたけど、同じ結果だった・・・


なんでだ?


>とりあえず、解決しました。(30分くらいはまった)

readXlsReplaceDb("Prepare.xls");

をsetUpからはずして、テストメソッドの中に入れたら動いた。

なんか、変なの・・・


追記:マニュアル読んでみました。

テストメソッド名の最後にTxをつけるとテストメソッドを開始する直前にトランザクションを開始し、テストメソッドが終了した直後にトランザクションがロールバックされます。

10へぇ

自動で、ロールバックされると思ってたら、コミットされてたよ・・・

テストなんだから、Txつけなくても必ず、ロールバックする方がいいと思う。何か意図があるのかな~。


readXlsWriteDb()、readXlsAllReplaceDb()はテスト後にロールバックしてデータが元に戻るようにtestXxxTx()の最初に実行してください。

おー!書いてあった!

マニュアル読んでなかったのがバレバレ・・・(^^;


あとは、明日までに、DataRowと、Beanの比較を簡単に出来る仕組みを考えておこう。

>コメント欄参照

トラックバック - http://seasarproject.g.hatena.ne.jp/skimura/20040628
 | 
日記内検索(ヘッダまで戻らなくていいから、便利?)

このコンテンツは、投げ銭を受けつています。
@payの後払い