iBATIS

O/Rマッピングのよさがよくわからず、HibernateやJPAを調べていたのですが、結局よさがよくわかりません。JPAにいたってはなんとも中途半端な感がぬぐえないのです。教育コストもバカにならんし、そもそもJAVA自体教育コストが高いですが... いくらさわっても楽になったと思えないのです。でiBATISです。シンプルにいきましょう。DbUtilsでもいいような気がしますが。DTO作るのがめんどくさい.... ありえんな。よーあんな単純作業するわ。って思っていたら、さすが、いがさん!Apache iBatis の sqlMap.xml ファイルを入力して、Javaソースコードを自動生成する blancoIBatis というプロダクトを新規作成
でもJAVAでActiveRecord?がつかえればなー やるならここまでいってほしい。

環境

http://ibatis.apache.org/のGet softwareから[[for Java>http://ibatis.apache.org/javadownloads.cgi]を選択してiBATIS 2.3.0をダウンロードしました。(2007/09/11)。iBATIS.NETもありますが、また時間があるときにでも。 またダウンロードページには日本語マニュアルSQL Maps for Java, Developer Guideや、SQL Maps for Java, Tutorialがあるので、あわせてダウンロードしておきます。
さらにEclipseで使う場合にhttp://ibatis.apache.org/tools.htmlからAbatorプラグインもインストールしておきます。Eclipseの新規リモートサイトに

http://ibatis.apache.org/tools/abator

を設定してインストールです。ん?2.3.0に対応してないのか?DAO Frameworkの代わりにSpring Frameworkとどこかでみかけたので、abatorがおいつていなさそう...

サンプル

Test1.java

package main;
import dto.Xy003;
public class Test1 {
	public static void main(String args[]) throws Exception {
		SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
		/*
		 * UNAMEを指定して1件のxy003を取得
		 */
		Xy003 xy003 = (xy003) sqlMap.queryForObject("getXy003",
				"admin001");
		System.out.println("値=" + xy003.getNokokyaku());

		/*
		 * すべて
		 */
		List<Xy003> xy003List = (List<Xy003>) sqlMap
				.queryForList("allXy003");
		for (Xy003 d : xy003List) {
			System.out.println("List値=" + d.getNokokyaku());
		}

		/*
		 * java.util.HashMapで
		 */
		List<Map> list = (List<Map>) sqlMap.queryForList("allXy003Map");
		for (Map d : list) {
			System.out.println("Map値=" + d.get("NOKOKYAKU"));
		}

		/*
		 * whereを動的に xmlを書くのが大変な場合の逃げ道
		 */
		List<Map> list1 = (List<Map>) sqlMap.queryForList("getXy003Where",
				" AND UNAME='admin001'");
		for (Map d : list1) {
			System.out.println("Map値=" + d.get("NOKOKYAKU"));
		}
	}
}

MyAppSqlConfig?.java

package main;

/**
 * SqlMapClientを返すためのクラス
 */
public class MyAppSqlConfig {
	private static SqlMapClient sqlMap;
	static {
		try {
			String resource = "SqlMapConfig.xml";
			Reader reader = Resources.getResourceAsReader(resource);
			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static SqlMapClient getSqlMapInstance(){
		//Singletoneとして利用
		return sqlMap;
	}
}

Xy003.java

package dto;

public class Xy003 {
   private String uname;
   private String nokokyaku;

   public String getUname() {
       return uname;
   }
   public void setUname(String uname) {
       this.uname = uname;
   }

   public String getNokokyaku() {
       return nokokyaku;
   }
   public void setNokokyaku(String nokokyaku) {
       this.nokokyaku = nokokyaku;
   }
}

SqlMapConfig?.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig      
   PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
   "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
	<!-- DB接続設定 -->
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver" value="org.gjt.mm.mysql.Driver"/>
			<property name="JDBC.ConnectionURL" value="jdbc:mysql://192.168.1.1:3306/hoge"/>
			<property name="JDBC.Username" value="hogeuser"/>
			<property name="JDBC.Password" value="hogepass"/>
		</dataSource>
	</transactionManager>
	
	<sqlMap resource="dao/xy003_SqlMap.xml"/>
</sqlMapConfig>

xy003_SqlMap?.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap      
   PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>
	<!-- 1件検索 -->
	<select id="getXy003" resultClass="dto.Xy003">
		SELECT UNAME, NOKOKYAKU FROM xy003
		WHERE UNAME = #value#
	</select>
	<!-- 逃げSQL -->
	<select id="getXy003Where" resultClass="java.util.HashMap">
		SELECT UNAME, NOKOKYAKU FROM xy003
		WHERE 1 = 1 $value$
	</select>	
	<!-- すべて -->
	<select id="allXy003" resultClass="dto.Xy003">
		SELECT UNAME, NOKOKYAKU FROM xy003
		ORDER BY UNAME
	</select>
	<!-- HashMapで-->
	<select id="allXy003Map" resultClass="java.util.HashMap">
		SELECT UNAME, NOKOKYAKU FROM xy003
		ORDER BY UNAME
	</select>	
		
</sqlMap>

PaginatedList?

2.3.0をみているとなくなっています... さてページングをどうしようと思うと

public java.util.List queryForList(java.lang.String id,
                                  java.lang.Object parameterObject,
                                  int skip,
                                  int max)
skip - The number of results to ignore.
max - The maximum number of results to return.

このあたりで代用かな。

リンク

iBATISを使ったO/RマッピングによるDBアクセスの実例

参考書籍

コメント

  • #comment

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-17 (水) 16:48:00 (5624d)