Ibatis2.0使用说明(二)——配置篇(2) - sunsnow8的专栏

J2EE

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 mappingmodeINOUTOUT的时候,

你输入的参数对象才会改变。很显然,不变的参数对象也是不会改变的,比如说String对象。

 

记住:一定要使用标准的JDBC存储过程的语法。请参见JDBC CallableStatement documentation以获取更多信息。


本文引用通告地址: http://blog.csdn.net/sunsnow8/services/trackbacks/246578.aspx