Ibatis2.0使用說明——配置篇(2)

 
sqlMap所包含的標籤
 
<sqlMap id="Product">
         <cacheModel id="productCache" type="LRU">
                   <flushInterval hours="24"/>
                   <property name="size" value="1000" />
         </cacheModel>
         <typeAlias alias="product" type="com.ibatis.example.Product" />
         <parameterMap id="productParam" class="product">
                   <parameter property="id"/>
         </parameterMap>
         <resultMap id="productResult" class="product">
                   <result property="id" column="PRD_ID"/>
                   <result property="description" column="PRD_DESCRIPTION"/>
         </resultMap>
         <select id="getProduct" parameterMap="productParam" resultMap="productResult" cacheModel="product-cache">
                   select * from PRODUCT where PRD_ID = ?
         </select>
</sqlMap>
 
The SQL Map XML File
( http://www.ibatis.com/dtd/sql-map-config-2.dtd)
 
一、Mapped Statements
Mapped statements可以是任何一個SQL statement,並且可以指定輸入參數的map和輸出結果的map。
簡單的情況下,mapped statement可以直接指定一個類來做爲輸入參數和輸出結果參數。mapped statement也可以使用cache model在內存中緩衝經常使用的數據。
 
<statement                  id="statementName"
                                     [parameterClass="some.class.Name"]
                                     [resultClass="some.class.Name"]
                                     [parameterMap="nameOfParameterMap"]
                                     [resultMap="nameOfResultMap"]
                                     [cacheModel="nameOfCache"]
>
         select * from PRODUCT where PRD_ID = [?|#propertyName#] order by [$simpleDynamic$]
</statement>
 
在上面的statement的配置中,放在[]中的配置參數是可選的,所以下面的Mapped Statement是完全合法的。
<statement id="insertTestProduct">
         insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (1, "Shih Tzu")
</statement>
 
下面逐一介紹各個標籤的含義以及使用方法:

1. Statement 類型
下表中列出了所有的Statement,以及他們的屬性和所支持的特徵。
 
Statement Element
 
Attributes
 
Child Elements
 
Methods
 
<statement>
id
parameterClass
resultClass
parameterMap
resultMap
cacheModel
xmlResultName
All dynamic elements
insert
update
delete
All query methods
<insert>
 
id
parameterClass
parameterMap
All dynamic elements
<selectKey>
insert
update
delete
<update>
 
id
parameterClass
parameterMap
All dynamic elements
 
insert
update
delete
<delete>
 
id
parameterClass
parameterMap
All dynamic elements
insert
update
delete
<select>
 
id
parameterClass
resultClass
parameterMap
resultMap
cacheModel
All dynamic elements
All query methods
<procedure>
 
id
parameterClass
resultClass
parameterMap
resultMap
xmlResultName
All dynamic elements
insert
update
delete
All query methods
 
<statement id="statementName"
                     [parameterClass="some.class.Name"]
                     [resultClass="some.class.Name"]
                     [parameterMap="nameOfParameterMap"]
                     [resultMap="nameOfResultMap"]
                     [cacheModel="nameOfCache"]
>
       select * from PRODUCT where PRD_ID = [?|#propertyName#] order by [$simpleDynamic$]
</statement>

2. the SQL

sql語句無疑是map中最重要的組成部分,你可以使用任何的sql語句,只要你的數據庫和JDBC驅動支持就行。你也可以使用數據庫和驅動支持的任何函數。因爲你是將sql語句寫在了XML文檔中,爲了區別Sql中的"<>"和XML中的"<>",在寫Sql時,可以用<![CDATA[ SQL ]]>來寫。

3. 自增

很多關係型數據庫都支持主鍵的自增,SQL Map可以通過<insert>標籤中的<selectKey>來支持自增。預生成(如Oracle)和後生成(如Sql Server)都支持,下面是例子:
 
<!—Oracle SEQUENCE Example -->
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
       <selectKey resultClass="int" keyProperty="id" >
              SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
       </selectKey>
       insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)
</insert>
 
<!— Microsoft SQL Server IDENTITY Column Example -->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
       insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
       <selectKey resultClass="int" keyProperty="id" >
              SELECT @@IDENTITY AS ID
       </selectKey>
</insert>

4. 存儲過程

通過<procedure>標籤來支持存儲過程,下面的例子顯示瞭如何使用帶有輸出參數的存儲過程。
<parameterMap id="swapParameters" class="map" >
       <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
       <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>
<procedure id="swapEmailAddresses" parameterMap="swapParameters" >
       {call swap_email_address (?, ?)}
</procedure>
 
調用上面的存儲過程會在數據表的兩列間交換Email地址,而且在對應的參數對象中的也會交換。記住:當parameter mapping的mode爲INOUT或OUT的時候,
你輸入的參數對象纔會改變。很顯然,不變的參數對象也是不會改變的,比如說String對象。
 
記住:一定要使用標準的JDBC存儲過程的語法。請參見JDBC CallableStatement documentation以獲取更多信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章