ibatis学习2

摘:《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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值