ibatis的部分属性

ibatis的部分属性

 1.映射配置文件中的节点:

 

可以看到,映射文件主要分为两个部分:模块配置和Statement配置。

模块配置包括:

Ø typeAlias节点:

定义了本映射文件中的别名,以避免过长变量值的反复书写,此例中通过

typeAlias节点为类"com.ibatis.sample.User"定义了一个别名"user"

这样在本配置文件的其他部分,需要引用"com.ibatis.sample.User"类时,

只需以其别名替代即可。

Ø cacheModel节点

定义了本映射文件中使用的Cache机制:

<cacheModel id="userCache" type="LRU">

<flushInterval hours="24"/>

<flushOnExecute statement="updateUser"/>

<property name="size" value="1000" />

</cacheModel>

这里申明了一个名为"userCache"cacheModel,之后可以在

Statement申明中对其进行引用:

<select id="getUser"

parameterClass="java.lang.String"

resultClass="user"

cacheModel="userCache"

这表明对通过id"getUser"Select statement获取的数据,使用

cacheModel "userCache"进行缓存。之后如果程序再次用此Statement

进行数据查询,即直接从缓存中读取查询结果,而无需再去数据库查询。

cacheModel主要有下面几个配置点:

l flushInterval

设定缓存有效期,如果超过此设定值,则将此CacheModel的缓存清空。

l size

CacheModel中最大容纳的数据对象数量。

l flushOnExecute

指定执行特定Statement时,将缓存清空。如updateUser操作将更

新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际

数据发生偏差,因此必须将缓存清空以避免脏数据的出现。

关于Cache的深入探讨,请参见“高级特性”中的相关章节。

Statement配置:

IBATIS Developers Guide Version 1.0

September 2, 2004 So many open source projects. Why not Open your Documents?

Statement配置包含了数个与SQL Statement相关的节点,分别为:

u statement

u insert

u delete

u update

u select

u procedure

其中,statement最为通用,它可以替代其余的所有节点。除statement之外

的节点各自对应了SQL中的同名操作(procedure对应存储过程)。

使用statement 定义所有操作固然可以达成目标,但缺乏直观性,建议在实际

开发中根据操作目的,各自选用对应的节点名加以申明。一方面,使得配置文件

更加直观,另一方面,也可_____借助DTD对节点申明进行更有针对性的检查,以避免

配置上的失误。

各种类型的Statement 配置节点的参数类型基本一致,区别在于数量不同。如

insertupdatedelete节点无需返回数据类型定义(总是int)。

参数 描述

parameterClass 参数类。指定了参数的完整类名(包括包路径)。

可通过别名避免每次重复书写冗长的类名。

resultClass 结果类。指定结果类型的完整类名(包括包路径)

可通过别名避免每次重复书写冗长的类名。

parameterMap 参数映射,需结合parameterMap节点对映射

关系加以定义。

对于存储过程之外的statement而言,建议使用

parameterClass作为参数配置方式,一方面避

IBATIS Developers Guide Version 1.0

September 2, 2004 So many open source projects. Why not Open your Documents?

免了参数映射配置工作,另一方面其性能表现也

更加出色。

resultMap 结果映射,需结合resultMap节点对映射关系

加以定义。

cacheModel statement对应的Cache模块。

对于参数定义而言,尽量使用parameterClass,即直接将POJO 作为

statement 的调用参数,这样在SQL 中可以直接将POJO 的属性作为参数加以

设定,如:

<update id="updateUser"

parameterClass="com.ibatis.sample.User">

UPDATE t_user

SET

name=#name#,

sex=#sex#

WHERE id = #id#

</update>

这里将com.ibatis.sample.User类设定为update statement的参数,之后,

我们即可在SQL 中通过#propertyName#POJO 的属性进行引用。如上例

中的:

SET name=#name#, sex=#sex# WHERE id=#id#

运行期,ibatis 将通过调用User 对象的getNamegetSex getId 方法获得相

应的参数值,并将其作为SQL 的参数。

如果 parameterClass 中设定的是jdk 的中的简单对象类型,如String

Integeribatis会直接将其作为SQL中的参数值。

我们也可以将包含了参数数据的Map对象传递给Statement,如:

<update id="updateUser"

parameterClass="java.util.Map">

UPDATE t_user

SET

name=#name#,

sex=#sex#

WHERE id = #id#

</update>

这里传入的参数就是一个Map对象,ibatis将以key namesexid从中

提取对应的参数值。

同样的原理,我们也可以在resultMap中设定返回类型为map

__________<select id="getUser"

parameterClass="java.lang.String"

resultClass="java.util.Map">

IBATIS Developers Guide Version 1.0

September 2, 2004 So many open source projects. Why not Open your Documents?

<![CDATA[

select

id,

name,

sex

from t_user

where id = #id#

]]>

</select>

返回的结果将以各字段名为key保存在Map对象中返回。

SQL中设定参数名时,可以同时指定参数类型,如:

SET name=#name:VARCHAR#,sex=#sex:NUMERIC# WHERE

id=#id:NUMERIC#

对于返回结果而言,如果是select语句,建议也采用resultClass进行定义,如:

<select id="getUser"

parameterClass="java.lang.String"

resultClass="user">

<![CDATA[

select

name,

sex

from t_user

where name = #name#

]]>

</select>

ibatis会自动根据select语句中的字段名,调用对应POJO set方法设定属性

值,如上例中,ibatis会调用setNamesetSex 方法将Select语句返回的数据赋

予相应的POJO 实例。

有些时候,数据库表中的字段名过于晦涩,而为了使得代码更易于理解,我们

希望字段映射到POJO时,采用比较易读的属性名,此时,我们可以通过Select

as 字句对字段名进行转义,如(假设我们的书库中对应用户名的字段为

xingming,对应性别的字段为xingbie):

select

xingming as name,

xingbie as sex

from t_user

where id = #id#

ibatis 会根据转义后的字段名进行属性映射(即调用POJO setName 方法而

不是setXingming方法)。

IBATIS Developers Guide Version 1.0

September 2, 2004 So many open source projects. Why not Open your Documents?

parameterMapresultMap实现了POJO到数据库字段的映射配置,下面是

一个例子:

<resultMap id="get_user_result" class="user">

<result property="name" column="xingming"

jdbcType="VARCHAR" javaType="java.lang.String"/>

<result property="sex" column="xingbie"

jdbcType="int" javaType="java.lang.Integer"/>

<result property="id" column="id"

jdbcType="int" javaType="java.lang.Integer"/>

</resultMap>

<parameterMap id="update_user_para" class="redemption" >

<parameter property="name"

jdbcType="VARCHAR"

javaType="java.lang.String"

nullValue=""

/>

<parameter property="sex"

jdbcType="int"

javaType="java.lang.Integer"

nullValue=""

/>

</parameterMap>

ParameternullValue

你可能感兴趣的:(jdk,sql,ibatis,cache)