相对Hibernate等ORM实现而言,ibatis的映射配置更为简洁直接,以下是一个典型的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<!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.itmyhome.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 * from user where id = #id#
]]>
</select> <insert id="insertUser" parameterClass="user">
insert into user values(#id#,#name#,#age#)
</insert> <update id="updateUser" parameterClass="user">
update user set name = #name# where id = #id#
</update> </sqlMap>

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

一、模块配置包含:

typeAlias节点:

定义了本映射文件里的别名,以避免过长变量值的反复书写,此例中通过typeAlias节点为类"com.itmyhome.User"定义了一个别

名"user",这样在本配置文件的其它部分,须要引用"com.itmyhome.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主要有以下几个配置点:

flushInterval:设定缓存有效期,假设超过此设定值,则将此CacheModel的缓存清空。

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

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

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

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

二、Statement配置

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

1)statement

2)insert

3)delete

4)update

5)select

6)procedure

当中,statement最为通用,它能够替代其余的全部节点。除statement之外的节点各自相应了SQL中的

同名操作(procedure相应存储过程).使用statement定义全部操作固然能够达成目标,但缺乏直观性,

建议在实际开发中依据操作目的,各自选用相应的节点名加以申明.一方面,使得配置文件

更加直观,还有一方面,也可借助DTD对节点申明进行更有针对性的检查,以避免配置上的失误。

基本的配置项例如以下:

<statement id="queryUser" parameterClass="java.lang.Integer" resultClass="user">
select * from user where id = #id#
</statement> <select id="getUser" parameterClass="java.lang.String"
resultClass="user" cacheModel="userCache">
<![CDATA[
select * from user where id = #id#
]]>
</select> <insert id="insertUser" parameterClass="user">
insert into user values(#id#,#name#,#age#)
</insert> <update id="updateUser" parameterClass="java.lang.Integer">
update user set name = #name# where id = #id#
</update> <delete id="deleteUser" parameterClass="java.lang.Integer">
delete user where id = #id#
</delete>
參数 描写叙述
parameterClass 參数类.指定了參数的完整类名(包含包路径).
可通过别名避免每次反复书写冗长的类名.
resultClass 结果类.指定结果类型的完整类名(包含包路径)
可通过别名避免每次反复书写冗长的类名.
parameterMap 參数映射,需结合parameterMap节点对映射关系加以定义.
对于存储过程之外的statement而言,建议使用
parameterClass作为參数配置方式,一方面避免了
參数映射配置工,还有一方面其性能表现也更加出色。
resultMap 结果映射,需结合resultMap节点对映射关系加以定义。
cacheModel statement相应的Cache模块。

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

这样在SQL中能够直接将POJO的属性作为參数加以设定,如:

<update id="updateUser" parameterClass="com.itmyhome.User">
alter table user set name = #name# where id = #id#
</update>

这里将com.itmyhome.User类设定为updateUser的參数之后,我们就可以在SQL中通过#name#

对POJO的属性进行引用。例如以下:

set name = #name# where id = #id#

执行期,ibatis将通过调用User对象的getName,getId方法获得相应的參数值,并将其作为SQL的參数。

假设parameterClass中设定的是jdk的中的简单对象类型,如String、Integer,ibatis会直接将其作为SQL中的參数值。

我们也能够将包含了參数数据的Map对象传递给Statement如:

<update id="updateUser" parameterClass="java.util.Map">
update user set name = #name# where id = #id#
</update> Map<String, Object> map = new HashMap<String,Object>();
map.put("id", "1");
map.put("name", "hello");
sqlMap.update("updateUser",map);

这里传入的參数就是一个Map对象,ibatis将以key "id"、"name"从中提取相应的參数值

在SQL中设定參数名时,能够同一时候指定參数类型,如:

update  user set name = #name:VARCHAR# where id = #id:NUMBERIC#

ibatis实战之OR映射的更多相关文章

  1. ibatis实战之插入数据(自动生成主键)

    ibatis实战之插入数据(自动生成主键) --------- 如果你将数据库设计为使用自动生成的主键,就可以使用ibatis的<selectKey>元素(该元素是<insert&g ...

  2. ibatis实战之基础环境搭建

    关于ibatis的介绍.优缺点,以及ibatis和hibernate的比较再此不在赘述,可参阅其他资料. 一.准备工作 1.下载ibatis软件包http://download.csdn.net/de ...

  3. 《深入浅出MyBatis技术原理与实战》——4. 映射器,5. 动态SQL

    4.1 映射器的主要元素 4.2 select元素 4.2.2 简易数据类型的例子 例如,我们需要统计一个姓氏的用户数量.应该把姓氏作为参数传递,而将结果设置为整型返回给调用者,如: 4.2.3 自动 ...

  4. 第十三篇:一点一滴学ibatis(二)映射文件

       首先给出一个常见的映射文件局部模板 <?xml version="1.0" encoding="utf-8" ?><!DOCTYPE s ...

  5. Java实战之02Hibernate-02映射、一级缓存、实体对象状态

    五.映射基础 1.实体类采用javabean的编写规范 JavaBean编写规范: a.类一般是public的 b.有默认的构造方法 c.字段都是私有的 d.提供公有的getter和setter方法 ...

  6. [原创+实战+钓鱼]setoolkit+映射

    所需工具:setoolkit,花生壳 (此方法主要针对没有服务器,没有空间的攻击者.有服务器或者空间可以直接上传setoolkit的生成源码到服务器或者空间.) 1.setoolkit克隆一个站点 | ...

  7. ibatis实战之一对多关联

    在实际开发中,我们常常遇到关联数据的情况,如User对象拥有若干Book对象 每个Book对象描述了归属于一个User信息,这种情况下,我们应该如何处理? 通过单独的Statement操作固然可以实现 ...

  8. ibatis实战之中的一个对多关联

    在实际开发中,我们经常遇到关联数据的情况,如User对象拥有若干Book对象 每一个Book对象描写叙述了归属于一个User信息,这样的情况下,我们应该怎样处理? 通过单独的Statement操作固然 ...

  9. SpringMVC实战(三种映射处理器)

    1.前言 上一篇博客,简单的介绍了一下SpringMVC的基础知识,这篇博客来说一下SpringMVC中的几种映射处理器机制. 2.三种映射处理器 2.1 BeanNameUrlHandlerMapp ...

随机推荐

  1. 搜索:POJ2251&POJ1426&POJ3087&POJ2488

    图的遍历也称为搜索,就是从图中某个顶点出发,沿着一些边遍历图中所有的顶点,且每个顶点仅被访问一次,遍历可采取两种不同的方式:深度优先搜索(DFS)和广度优先搜索(BFS). 1.DFS算法思想` 从顶 ...

  2. Linux Socket编程注意事项

    Socket API 是网络应用程序开发中实际应用的标准 API.虽然该 API 简单.可是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示怎样避免它们. 隐患 1.忽略返回状态 ...

  3. Kaggle—Digit Recognizer竞赛

    Digit Recognizer 手写体数字识别  MNIST数据集 本赛 train 42000样例 test 28000样例,原始MNIST是 train 60000 test 10000 我分别 ...

  4. Unity MegaFiers 顶点动画

        使用 MegaFiers 插件,能够使得Unity支持顶点动画的播放. 官方视频教程例如以下: 在这里简单測试使用下,环境例如以下: Blender 2.72 Unity 4.5.4 Mega ...

  5. FZU2181+poj2942(点双连通+判奇圈)

    分析:我们对于那些相互不憎恨的人连边,将每次参加会议的所有人(不一定是全部人,只需人数>=3且为奇数)看做一个点双联通分量,那么每个点都至少有两个点与他相邻.即需要保证双联通分量中存在奇圈.至于 ...

  6. hdu-4833-Best-Financing(DP)

    Best Financing Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. myeclipse10.7皴,出口解决war包时报“SECURITY ALERT: INTEGERITY CHECK ERROR”

    一.操作系统的环境是win7,64bit和32bit的操作系统我试过都OK 依照网上一些Crack破解程序步骤操作就能够完毕破解过程, 也能够到我的CSDN资源里下载文件包 myeclipse10.7 ...

  8. Linux 单用户模式的使用

    在进入系统启动菜单时,选择kernel,输入"e"后进入,在kernel开头的启动项后输入(空格) /single或者 / 1,然后输入"b"重新启动机器,此时 ...

  9. mysql自动备份

    #!/bin/bash MyUSER="SET-MYSQL-USER-NAME"     # USERNAME MyPASS="SET-PASSWORD"    ...

  10. .Net 文本框实现内容提示(仿Google、Baidu)

    原文:.Net 文本框实现内容提示(仿Google.Baidu) 1.Demo下载: 文本框实现内容提示(仿Google.Baidu).rar 2.创建数据库.表(我用的sqlserver2008数据 ...