可以看到,映射文件主要分为两个部分:模块配置和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 Developer’s 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 配置节点的参数类型基本一致,区别在于数量不同。如
insert、update、delete节点无需返回数据类型定义(总是int)。
参数 描述
parameterClass 参数类。指定了参数的完整类名(包括包路径)。
可通过别名避免每次重复书写冗长的类名。
resultClass 结果类。指定结果类型的完整类名(包括包路径)
可通过别名避免每次重复书写冗长的类名。
parameterMap 参数映射,需结合parameterMap节点对映射
关系加以定义。
对于存储过程之外的statement而言,建议使用
parameterClass作为参数配置方式,一方面避
IBATIS Developer’s 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 对象的getName、getSex 和getId 方法获得相
应的参数值,并将其作为SQL 的参数。
如果 parameterClass 中设定的是jdk 的中的简单对象类型,如String、
Integer,ibatis会直接将其作为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 ”name”、”sex”、”id”从中
提取对应的参数值。
同样的原理,我们也可以在resultMap中设定返回类型为map。
__________<select id="getUser"
parameterClass="java.lang.String"
resultClass="java.util.Map">
IBATIS Developer’s 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会调用setName,setSex 方法将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 Developer’s Guide Version 1.0
September 2, 2004 So many open source projects. Why not Open your Documents?
parameterMap和resultMap实现了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>
Parameter的nullValue
相关推荐
在`org.apache.ibatis.executor.resultset.ResultSetHandler`中,ResultMap被用来定义字段与Java对象属性的映射关系。ResultMap不仅支持简单的列名映射,还能处理复杂的一对多、一对一关系映射。 六、...
在"iBATIS框架源码剖析pdf第二部分"中,我们将深入探讨iBATIS的核心组件、工作原理以及其实现细节。 首先,我们来了解一下iBATIS的基本架构。iBATIS由四大核心部分组成:SqlMapConfig.xml配置文件、SqlMap接口、SQL...
`iBATIS SQL Maps开发指南.pdf`是一份详细的开发者手册,涵盖了从入门到高级的全部内容,以下是其中的重点部分: 1. **SQL映射文件**:每个XML文件代表一个数据库表或视图,包含多个SQL语句。这些语句可以是静态的...
SQL映射文件是Ibatis的核心组成部分,它包含了SQL语句和结果映射。这些映射文件通常以XML格式编写,其中定义了SQL查询、插入、更新和删除操作,以及对应的参数映射和结果集映射。 ### 2.2 SqlSessionFactory ...
这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索映射SQL语句的...
在IT行业中,数据库操作是必不可少的一部分,而Ibatis作为一款流行的Java持久层框架,它使得SQL与Java代码更好地结合,提供了灵活的数据库操作方式。然而,数据处理时遇到的编码问题,如乱码,常常会给开发者带来...
2. 参数映射:通过参数映射,iBatis可以自动将Java对象的属性值映射到SQL语句的参数,反之亦然,返回结果也能自动映射到Java对象。 3. 事务管理:iBatis提供了简单的事务控制,可以在代码中手动管理,也可以通过...
总之,《iBatis官方中文文档》是学习和实践iBatis框架的重要指南,它详细阐述了iBatis的各个组成部分和使用方法,有助于开发者快速上手并深入理解iBatis的工作原理,提升开发效率。通过阅读和实践文档中的示例,...
`<dynamic>`标签是iBATIS动态标签的核心,它允许在其内部包含一系列的条件标签,根据不同的条件来决定哪些部分应该被插入到最终的SQL语句中。`<dynamic>`标签有三个主要属性: 1. `prepend`: 在动态内容前添加的字符...
配置文件是Ibatis的核心部分,它定义了SQL语句及其映射规则。这里有两个XML文件:`book.xml`和`sqlMapConfig.xml`。 在`book.xml`中,我们定义了一个命名空间`test`,并创建了类型别名,使得Ibatis能够识别我们的...
这是Ibatis的属性配置文件,主要用于存放数据库连接信息和其他配置参数。通常包含以下内容: - `driver`: 数据库驱动类名,例如`com.mysql.jdbc.Driver`。 - `url`: 数据库连接URL,包含了数据库服务器地址、端口...
SQL映射文件,如`User.xml`,是ibatis中最重要的组成部分之一,用于定义SQL语句和结果映射规则。映射文件的结构通常包括以下元素: - **typeAlias**:定义类型别名,简化SQL语句中的类型引用。 - **resultMap**:...
首先,Ibatis 的核心类库包括以下几个主要部分: 1. **MyBatis.jar**:这是Ibatis的主要实现库,包含了SqlSession、SqlSessionFactory、Mapper接口和XML配置文件解析等关键组件。 2. **mybatis-ognl.jar**:OGNL...
在标题和描述中提到的"ibatis jar包"是iBATIS框架的核心组成部分,它是iBATIS运行所需的Java类库。这个jar包包含了iBATIS的所有核心组件,如SqlMapConfig.xml配置文件解析器、SqlMapClient接口及其实现、Executor...
iBATIS的核心组件包括以下几个部分: 1. SQL Maps:这是iBATIS的核心,它定义了如何将Java对象映射到数据库表。SQL Maps是XML文件,其中包含了SQL查询和结果集映射。通过这种方式,SQL语句和业务逻辑可以独立维护,...
`resultMap` 用于指定查询结果如何映射到 `Book` 类,其中 `users` 属性的 `column` 设置为 `oid`,`select` 设置为 `getUsersByBookId`,这意味着 Ibatis 将通过执行这个方法来获取与书关联的作者。`selectAllBooks...
事务管理是iBATIS的另一个关键部分。它可以基于JDBC进行本地事务管理,也可以使用JTA(Java Transaction API)实现分布式事务。此外,iBATIS还支持外部事务管理,允许应用自定义事务边界。 缓存(Cache)功能是...
`ibatis.util`包是Ibatis框架的一部分,提供了很多实用工具类,帮助开发者更好地进行数据库操作。在这个描述中,我们看到提到的是"EMIS文件中缺少的ibatis工具包",这可能意味着在EMIS(可能是企业信息管理系统)的...