有別於JPA等ORM產品,iBATIS是直接把SQL Mapping作為一組input/output,而SQL字串則定義在XML檔。對全新專案開發時可能不是最佳選擇,但對中小型專案全新開發,或是接手舊系統的維護卻是比JPA較好的選擇。
iBATIS下載是自Apache網站,目前最新版本2.3.3.720,只需引進一個Jar檔(當然還要有應對的JDBC Driver)。
和JPA類似的,config檔似乎比程式還要吃重。
 
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>
  <transactionManager type="JDBC">  
    <dataSource type="SIMPLE">          <!-- 設定 DataSource,亦可取得DBCP或JNDI -->
      <property value="com.mysql.jdbc.Driver" name="JDBC.Driver"/>
      <property value="jdbc:mysql://localhost/test" name="JDBC.ConnectionURL"/>
      <property value="root" name="JDBC.Username"/>
      <property value="systex" name="JDBC.Password"/>
    </dataSource>
  </transactionManager>
  <sqlMap resource="sqlMap.xml"/>    <!-- Reference到SQL字串設定檔,也不一定是這個檔名 -->
</sqlMapConfig>
 
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>
        <select id="getAllUsers" parameterClass="string" resultClass="hashmap">
                SELECT * FROM USER_ACCOUNT WHERE GROUPNAME = #groupName#
        </select>
</sqlMap>
 
Main.java測試主程式
import com.ibatis.sqlmap.client.*;
import com.ibatis.common.resources.Resources;
import java.io.Reader;
import java.util.*;
public class Main {
    public static void main(String[] args) throws Exception {
           String resource = "./sql-map-config.xml";
           Reader reader = Resources.getResourceAsReader(resource);
           SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
           List list = sqlMap.queryForList("getAllUsers", "EMPLOYEE");  // 對映到SqlMap.xml的getAllUsers
           System.out.println("Selected " + list.size() + " records!");
           for (int i=0; i<list.size(); i++) {
               System.out.println(list.get(i));
           }
           Map accountMap = sqlMap.queryForMap("getAllUsers", "EMPLOYEE", "USERID");
           System.out.println(accountMap.toString());
           accountMap = sqlMap.queryForMap("getAllUsers", "EMPLOYEE", "USERID", "GROUPNAME");
           System.out.println(accountMap.toString());
    }
}
 
 
arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()