摘:《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所有返回字段的映射