分享

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

 WindySky 2009-04-20
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./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以获取更多信息。
本篇文章来源于 新技术天空 原文链接:http://www./tech/java/opensource/ibatis/2007-06-29/349998e75c13b604.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多