2010-05-04
■[Java][Seaser]SAStruts+S2JDBCでwebアプリ(5) 
S2JDBC(ORマッピング)
S2JDBCはDBのアクセスとJavaオブジェクトの変換を行うO/Rマッピングのフレームワーク
DB接続設定
設定ファイルは、jdbc.diconとs2jdbc.diconです。
jdbc.dicon:DB接続詳細設定、コネクションプール設定etc
s2jdbc.dicon:JdbcManagerのコンポーネント設定
jdbc.dicon
<component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName">"com.mysql.jdbc.Driver"</property> <property name="URL"> "jdbc:mysql://192.168.0.10:3306/test" </property> <property name="user">"xxx"</property> <property name="password">"xxx"</property> </component>
s2jdbc.dicon
<component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl"> <property name="maxRows">0</property> <property name="fetchSize">0</property> <property name="queryTimeout">0</property> <property name="dialect">mysqlDialect</property>
select
//条件にidを指定して、単一レコード取得
public Dept getDept(){
Dept dept = jdbcManager.from(Dept.class).id(1).getSingleResult();
return dept;
}
//一覧取得
public List<Dept> getDeptList() {
List<Dept> list = jdbcManager.from(Dept.class).getResultList();
return list;
}
//where条件
public Dept getDeptWhere() {
Dept dept = jdbcManager.from(Dept.class).where("LOC = ? ","BOSTON").getSingleResult();
return dept;
}
//カウント取得
public int getDeptCount() {
return (int) jdbcManager.from(Dept.class).getCount();
}
ソート
// IDカラムの降順
public List<Dept> getSortList() {
List<Dept> list = jdbcManager.from(Dept.class).orderBy("ID DESC").getResultList();
return list;
}
insert
//挿入
public int exeDeptInsert() {
Dept entity = new Dept();
entity.deptName = "AAA";
entity.deptNo = 110;
entity.loc = "Fukuoka";
return jdbcManager.insert(entity).execute();
}
update
//更新処理
public int exeDeptUpdate() {
Dept entity = jdbcManager.from(Dept.class).id(6).getSingleResult();
entity.deptName = "BBB";
return jdbcManager.update(entity).execute();
}
//排他制御
public int exeDeptUpdate() {
Dept entity = jdbcManager.from(Dept.class).id(6).forUpdate().getSingleResult();
entity.deptName = "BBB";
return jdbcManager.update(entity).execute();
}
delete
// 削除処理
// versionNo条件も必要になるらしい。
public int exeDeptDelete() {
Dept entity = new Dept();
entity.id = (long)8;
entity.versionNo = 1;
return jdbcManager.delete(entity).execute();
}
GroupBY
残念ながら、GroupByは、サポートされてないらしい。
しなかいっぽい。
テーブル結合
1対多
DEPTが1、EMPが多。
//EMPエンティティでの宣言 @ManyToOne @JoinColumn(name="DEPT_ID",referencedColumnName="ID") public Dept dept; //サービスクラスでの宣言 public Emp getJoin() { Emp emp = jdbcManager.from(Emp.class).innerJoin("DEPT").id(3).getSingleResult(); return emp; }
多対1
EMPが多、DEPTが1。
//DEPTエンティティでの宣言 @OneToMany(mappedBy="dept") public List<Emp> empList; //サービスクラスでの宣言(条件も追加できる) public Dept getJoin() { Dept dept = jdbcManager.from(Dept.class).leftOuterJoin("empList",true,"EMP_NO > 7800").id(2).getSingleResult(); return dept; }
SQLべた書き
public Dept selectSql(){
String sql = "SELECT * FROM DEPT WHERE ID = ?";
String params = "3";
Dept dept = jdbcManager.selectBySql(Dept.class, sql, params).getSingleResult();
return dept;
}
public int updateSql(){
String sql = "UPDATE DEPT SET LOC = ? WHERE ID = ?";
int cnt = jdbcManager.updateBySql(sql,String.class,String.class).params("HHH",7).execute();
return cnt;
}
外部SQLファイル
外部SQL(src/main/resource配下にUTF-8で作成する)
SELECT * FROM DEPT WHERE ID > /*ee*/0 /*IF order != null*/ ORDER BY /*$order*/ID /*END*/
参照Java
public List<Dept> selectSqlFile(){
String path = "/sql/select.sql";
SelectParam param = new SelectParam();
param.ee = 3;
param.order = "DEPT_NAME";
List<Dept> list = jdbcManager.selectBySqlFile(Dept.class, path,param).getResultList();
return list;
}
トランザクション
トランザクションは、基本的にAOPによるトランザクション制御がなされている。
手動でトランザクション制御することもできます。
その場合は、
トランザクションの対象外を設定し、[@TransactionAttribute(TransactionAttributeType.NEVER)]
UserTransactionを使って、setRollbackOnly(),commit()する。
【参考URL】
コメントを書く
トラックバック - http://d.hatena.ne.jp/aki193/20100504/1272972731
リンク元
- 7 http://www.google.co.jp/reader/view/
- 4 http://reader.livedoor.com/reader/
- 4 http://www.google.co.jp/search?q=AS3+四捨五入&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&client=firefox
- 3 http://www.google.co.jp/search?q=fnModeSubmit&hl=ja&rlz=1T4ADFA_jaJP364JP365&start=30&sa=N
- 2 http://d.hatena.ne.jp/keyword/アプリ
- 2 http://d.hatena.ne.jp/keyword/セキュリティ
- 2 http://d.hatena.ne.jp/keyword/SAStruts
- 2 http://k.hatena.ne.jp/keywordblog/解凍?date=20100417
- 2 http://www.google.co.jp/search?client=safari&rls=en&q=四捨五入+as3&ie=UTF-8&oe=UTF-8&redir_esc=&ei=4oziS-7PMo3u7AOSuLHJDg
- 2 http://www.google.co.jp/search?hl=ja&client=firefox-a&hs=f5b&rls=org.mozilla:ja:official&q=S2AbstractService+versionNo+更新&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=

