相对Hibernate 等ORM 实现而言,ibatis的映射配置更为简洁直接,下面是一
个典型的配置文件。
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<!--模块配置-->
<typeAlias alias="user" type="com.ibatis.sample.User"/>
<cacheModel id="userCache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement=" updateUser"/>
<property name="size" value="1000" />
</cacheModel>
<!—Statement配置-->
<select id="getUser" parameterClass="java.lang.String" resultClass="user"
cacheModel="userCache"
>
<![CDATA[
select name, sex from t_user where name = #name#
]]>
</select>
<update id="updateUser" parameterClass="user">
UPDATE t_user
SET
name=#name#,
sex=#sex#
WHERE id = #id#
</update>
</sqlMap>
可以看到,映射文件主要分为两个部分:模块配置和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操作将更新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。
Statement配置:
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节点无需返回数据类型定义
主要的配置项如下:
statement:
<statement id="statementName"
[parameterClass="some.class.Name"]
[resultClass="some.class.Name"]
[parameterMap="nameOfParameterMap"]
[resultMap="nameOfResultMap"]
[cacheModel="nameOfCache"]
>
select * from t_user where sex = [?|#propertyName#]
order by [$simpleDynamic$]
</statement>
select:
<select id="statementName"
[parameterClass="some.class.Name"]
[resultClass="some.class.Name"]
[parameterMap="nameOfParameterMap"]
[resultMap="nameOfResultMap"]
[cacheModel="nameOfCache"]
>
select * from t_user where sex = [?|#propertyName#]
order by [$simpleDynamic$]
</select>
Insert:
<insert id="statementName"
[parameterClass="some.class.Name"]
[parameterMap="nameOfParameterMap"]
>
insert into t_user (name,sex)
values
([?|#propertyName#],[?|#propertyName#])
</insert>
Update
<update id="statementName"
[parameterClass="some.class.Name"]
[parameterMap="nameOfParameterMap"]
>
UPDATE t_user
SET
name=[?|#propertyName#],
sex=[?|#propertyName#]
WHERE id = [?|#propertyName#]
</update>
Delete:
<delete id="statementName"
[parameterClass="some.class.Name"]
[parameterMap="nameOfParameterMap"]
>
delete from t_user where id = [?|#propertyName#]
</delete>
其中以“[]”包围的部分为可能出现的配置栏目。
parameterClass:参数类。指定了参数的完整类名(包括包路径)。可通过别名避免每次重复书写冗长的类名。
resultClass:结果类。指定结果类型的完整类名(包括包路径)可通过别名避免每次重复书写冗长的类名。
parameterMap:参数映射,需结合parameterMap节点对映射关系加以定义。
对于存储过程之外的statement而言,建议使用parameterClass作为参数配置方式,一方面避免了参数映射配置工作,另一方面其性能表现也更加出色。
cacheModel:statement对应的Cache模块。
resultMap:结果映射,需结合resultMap节点对映射关系加以定义。
相关推荐
### ibatis and和or联合查询知识点 #### 一、ibatis简介 ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀开源数据访问框架。ibatis消除了几乎所有的JDBC对象操作,提供了一个简单的基本API,它通过XML或...
Ibatis的主要特点是通过XML或注解定义SQL映射文件,将SQL语句与Java对象绑定。例如,`<select>`标签用于定义查询语句,`<insert>`、`<update>`和`<delete>`分别对应增删改操作。在SQL映射文件中,可以使用动态SQL来...
标题中的“myBatis or ibatis 神器”指的是两个知名的Java持久层框架——myBatis和iBatis。这两个框架在Java开发中扮演着重要角色,它们简化了数据库操作,让开发者能够更加专注于业务逻辑,而不是底层的SQL查询。 ...
他们也阐明了怎样取得你已编写的SQL语句及把他们映射给iBATIS使用的Bean。最后,还讨论了iBATIS的优缺点,及为什么是这样的一种方式,即所谓的“在完全OR与JDBC之间的一个幽雅的折衷。” <br>就象Developer's ...
### OR 映射 iBatis的核心功能之一就是对象关系映射(ORM)。它将数据库中的记录映射到Java对象,反之亦然。在XML映射文件中,你可以定义`resultMap`来描述字段与对象属性之间的对应关系。 ### iBatis 高级特性 ##...
在对象关系映射(OR映射)上,iBATIS允许开发者在XML映射文件中定义POJO(Plain Old Java Object)与数据库表之间的映射关系。这样,Java对象的属性可以直接映射到SQL语句的占位符,反之亦然。 iBATIS的高级特性...
在Java Web开发中,iBatis(现在称为MyBatis)是一个流行的持久层框架,它提供了灵活的SQL映射机制,使得数据库操作更加便捷。在iBatis中,`<iterate>`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、...
#### OR 映射 - **一对多关联**:通过 `<association>` 元素定义一对多的关系,通常用于处理返回多个实体的情况。 - **一对一关联**:通过 `<association>` 元素定义一对一的关系,用于处理返回单个实体的情况。 - *...
8. OR映射 - 对象关系映射(ORM)是iBATIS的核心特性之一,它将Java对象与数据库中的表进行映射,简化数据库操作。 9. iBATIS高级特性 - 包括数据关联(一对多、一对一)、延迟加载、动态映射、事务管理和缓存策略...
接下来,我们需要在iBATIS的映射文件中配置调用存储过程的语句。映射文件通常以`.xml`为扩展名,例如`emp.xml`。在这个文件中,我们将定义一个`<select>`标签来调用存储过程: ```xml <!DOCTYPE mapper PUBLIC "-/...
#### 六、对象关系映射 (OR 映射) - **一对多关联**:通过配置文件中的 `<collection>` 标签来实现。 - **一对一关联**:通过 `<association>` 标签来实现。 - **延迟加载**:通过配置文件中的 `<autoMapping>` 或 `...
**OR 映射** 对象关系映射(ORM)是iBATIS的核心特性,它将数据库表中的记录映射到Java对象。iBATIS通过XML映射文件定义这种映射,使得开发者可以使用Java对象而不是直接操作SQL语句。映射包括字段到属性、主键生成...
OR映射(Object-Relational Mapping)是Ibatis的核心特性,它将数据库表记录映射到Java对象,反之亦然。Ibatis通过标签定义映射规则,可以处理复杂的列与字段的对应关系。 在高级特性中,Ibatis支持数据关联,分为...