<p>3. 映射文件 <br />與Hibernate 不一樣。由於須要人工編寫SQL 代碼,ibatis 的映射文件通常採 <br />用手動編寫(經過Copy/Paste,手工編寫映射文件也並沒想象中的麻煩)。 <br />針對上面POJO 的映射代碼以下: <br /><?xml version="1.0" encoding="UTF-8"?> <br /><!DOCTYPE sqlMap <br />PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" <br />"<a href="http://www.ibatis.com/dtd/sql-map-2.dtd">http://www.ibatis.com/dtd/sql-map-2.dtd</a>"> <br /><sqlMap namespace="User"> <br /><typeAlias alias="user" type="com.ibatis.sample.User"/> <br /><select id="getUser" <br />parameterClass="java.lang.String"</p> <p>resultClass="user"> <br /><![CDATA[ <br />select <br />name, <br />sex <br />from t_user</p> <p>where name = #name# <br />]]> <br /></select> <br /><update id="updateUser" <br />parameterClass="user"> <br /><![CDATA[ <br />UPDATE t_user <br />SET <br />name=#name#, <br />sex=#sex# <br />WHERE id = #id# <br />]]> <br /></update> <br /><insert id="insertUser" <br />parameterClass="user" <br />> <br />INSERT INTO t_user ( <br />name, <br />sex) <br />VALUES ( <br />#name#, <br />#sex# <br />) <br /></insert> <br /><delete id="deleteUser" <br />parameterClass="java.lang.String"> <br />delete from t_user <br />where id = #value# <br /></delete> <br /></sqlMap> <br />從上面的映射文件能夠看出,經過<insert>、<delete>、<update>、 <br /><select>四個節點,咱們分別定義了針對TUser 對象的增刪改查操做。在這 <br />四個節點中,咱們指定了對應的SQL 語句,以update 節點爲例: <br />…… <br /><update id="updateUser" ⑴ <br />parameterClass="user"> ⑵ <br /><![CDATA[ ⑶</p> <p>UPDATE t_user ⑷ <br />SET (</p> <p>IBATIS Developer’s Guide Version 1.0 <br />name=#name#, ⑸ <br />sex=#sex# ⑹ <br />) <br />WHERE id = #id# ⑺ <br />]]> <br /></update> <br />…… <br />⑴ ID <br />指定了操做ID,以後咱們能夠在代碼中經過指定操做id 來執行此節點所定 <br />義的操做,如: <br />sqlMap.update("updateUser",user); <br />ID 設定使得在一個配置文件中定義兩個同名節點成爲可能(兩個update 節 <br />點,以不一樣id 區分) <br />⑵ parameterClass <br />指定了操做所需的參數類型,此例中update 操做以 <br />com.ibatis.sample.User 類型的對象做爲參數,目標是將提供的User <br />實例更新到數據庫。 <br />parameterClass="user"中,user 爲「com.ibatis.sample.User」 <br />類的別名,別名可經過typeAlias 節點指定,如示例配置文件中的: <br /><typeAlias alias="user" type="com.ibatis.sample.User"/> <br />⑶ <![CDATA[……]]> <br />經過<![CDATA[……]]>節點,能夠避免SQL 中與XML 規範相沖突的字符對 <br />XML 映射文件的合法性形成影響。 <br />⑷ 執行更新操做的SQL,這裏的SQL 即實際數據庫支持的SQL 語句, 將由</p> <p>ibatis 填入參數後交給數據庫執行。 <br />⑸ SQL 中所需的用戶名參數, <br />「#name#」在運行期會由傳入的user 對象的name <br />屬性填充。 <br />⑹ SQL 中所需的用戶性別參數「#sex#」, 將在運行期由傳入的user 對象的 <br />sex 屬性填充。 <br />⑺ SQL 中所需的條件參數「#id#」, 將在運行期由傳入的user 對象的id 屬性 <br />填充。 <br />對於這個示例,ibatis 在運行期會讀取id 爲「updateUser」的update 節點 <br />的SQL 定義,並調用指定的user 對象的對應getter 方法獲取屬性值,並用此 <br />屬性值,對SQL 中的參數進行填充後提交數據庫執行。 <br />此例對應的應用級代碼以下,其中演示了的基本使用方法: <br />String resource ="com/ibatis/sample/SqlMapConfig.xml"; <br />Reader reader; <br />ibatis SQLMap</p> <p>reader = Resources.getResourceAsReader(resource); <br />XmlSqlMapClientBuilder xmlBuilder = <br />new XmlSqlMapClientBuilder(); <br />SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader); <br />//sqlMap系統初始化完畢,開始執行update操做 <br />try{ <br />sqlMap.startTransaction(); <br />User user = new User(); <br />user.setId(new Integer(1)); <br />user.setName("Erica"); <br />user.setSex(new Integer(1)); <br />sqlMap.update("updateUser",user); <br />sqlMap.commitTransaction(); <br />finally{ <br />sqlMap.endTransaction(); <br />} <br />其中,SqlMapClient 是ibatis 運做的核心,全部操做均經過SqlMapClient <br />實例完成。 <br />能夠看出,對於應用層而言,程序員面對的是傳統意義上的數據對象,而非JDBC <br />中煩雜的ResultSet,這使得上層邏輯開發人員的工做量大大減輕,同時代碼更 <br />加清晰簡潔。 <br />數據庫操做在映射文件中加以定義,從而將數據存儲邏輯從上層邏輯代碼中獨立 <br />出來。 <br />而底層數據操做的SQL 可配置化,使得咱們能夠控制最終的數據操做方式,經過 <br />SQL 的優化得到最佳的數據庫執行效能,這在依賴SQL 自動生成的「全自動」ORM</p> <p>機制中是所難以實現的。</p>java