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

** 環境
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>http://ibatis.apache.org/docs/java/pdf/iBATIS-SqlMaps-2_ja.pdf]]や、[[SQL Maps for Java, Tutorial>http://ibatis.apache.org/docs/java/pdf/iBATIS-SqlMaps-2-Tutorial_ja.pdf]]があるので、あわせてダウンロードしておきます。~
さらに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アクセスの実例>http://codezine.jp/a/article/aid/1289.aspx]]
** 参考書籍

** コメント
-#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS