* [[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