关闭

ibatis学习2

183人阅读 评论(0) 收藏 举报

摘:《ibatis开发指南》

sql map映射文件的元素和属性简要介绍

1.大于小于号等不能直接使用,将包含特殊字符的sql语句放在xml的cdata区里面
<statement id="" parameterClass="" resultClass="">
 <![CDATA[
   select *from person where age>#value#
 ]]>
</statement>

2.自动生成主键(sql通过<insert>的子元素<selectKey>来自动生成键值)
1)预生成(oracle):
<insert id="" parameterClass="">
         <selectKey resultClass="int" keyProperty="id">
                 select stockidsequence.nextval as id from dual
            </selectKey>
             insert into product(prd_id,prd_description)
             values (#id#,#description#)
</insert>
2)后生成(mysql)
<insert id="" parameterClas="">
     insert into product(prd_description)
      values (#description#)
      <selectKey resultClass="int" keyProperty="id">
               select @@identity as id
      </selectKey>
</insert>

3.parameterClass:java类的全限定名(包括类的包名) 
可选,目的是限制输入参数的类型为指定的java类,并优化框架性能
建议使用parameterClass,通过使用parameterClass,可以获得更好的性能,因为如果框架事先知道这个类
就可以优化自己的性能,如果不指定parameterClass参数,任何带有合适属性(get/set方法)的javabean都
可以作为输入参数

4.parameterMap的值等于一个预先定义的<parameterMap>元素的id。parameterMap属性很少使用,
更多的使用上面的parameterClass和inline parameter
注:动态mapped statement只支持inline parameter 不支持parameter map
基本思想:定义一系列有次序的参数系列,用于匹配jdbc preparedstatement的值符号。
<parameterMap id="insert-product-param" class="">
      <parameter property="id"/>
     <parameter property="description"/>
</parameterMap>
<statement id="insertProduct" parameterMap="insert-product-param">
       insert into PRODUCT(PRD_ID,PRD_DESCRIPTION) value(?,?)
</statement>
parameter map的两个参数按次序匹配sql语句中的值符号(?)
第一个"?"  <======>  id
第二个"?"  <======>description

5.Inline Parameter:可以嵌在mapped statement内部使用。例如:
<statement id="insertProduct">
        insert into product(prd_id,prd_description) values (#id#,#description#)
</statement>
内嵌的参数是#id#和#description#。每个参数代表一个javabean属性,用于给sql语句中相应
的位置赋值
6.resultClass:java类的全限定名。只要javabean的属性名称和resultset的列名匹配
<statement id="" parameterClass="" resultClass="全限定名类名">
 select pre_id as id,
 pre_first_name as firstName,
 pre_last_name as lastName,
 pre_bitrh_date as birthDate,
 pre_weight_kg as weightlnKilograms,
 pre_heigth_m as heightInMethers
 from person
 where pre_id=#value#
</statement>
当执行mapped statement时,person类将被初始化,从结果集中得到的列值将根据属性名和列名
映射成对象的属性值
7.resultMap:使用resultMap可以控件数据如何从结果集中取出,以及哪一个属性匹配那一个字段
resultMap属性可以允许指定字段的类型,null的替代值复杂类映射(包括其他javabean,集合类型和基本类型包装类)
<resultMap id="get-product-result" class="com......Product">
           <result property="id" column="PRD_ID"/>
           <result property="description" column="prd_description"/>
</resultMap>
<statement id="getProduct" resultMap="get-product-result">
            select *from product
</statement>
通过resultMap的定义,查询语句得到的ResultSet被映射成Product对象。注意resultMap支持"select *",并不要求定义resultset所有返回字段的映射

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5583次
    • 积分:150
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类