当前位置:首页 >> 信息与通信 >>

iBATIS技术培训


iBATIS技术教程
软件外包事业部
Copyright 2011

与传统的JDBC进行比较
? ? ? ? ? ? 减少了61%的代码量 最简单的持久化框架 架构级性能增强 SQL代码从程序代码中彻底分离,可重用 增强了项目中的分工 增强了移植性

实例步骤
? 1.建立数据库 ? 2.创建工

程 ? 3.添加lib 下载 ibatis 2.0 开发包 www.ibatis.com
ibatis-common-2.jar ibatis-dao-2.jar ibatis-sqlmap-2.jar

? 4.编写sqlmapconfig.xml ? 5.编写sqlmap.xml ? 6.编写代码

—从感性认识到理性认识

业务分层
搬家的例子

持久层细化

Hibernate映射关系

iBATIS映射关系

认识SqlMapClient
? SqlMapClient sqlMap=sqlMapClientBuilder.buidSqlMapCli ent(reader); ? 返回的真实对象是谁?

SQLMAP API(1)
? Object queryForObject(java.lang.String id);
? Object queryForObject(java.lang.String id, java.lang.Object parameterObject);

? Object queryForObject(java.lang.String id, java.lang.Object parameterObject, java.lang.Object resultObject)

SQLMAP API(2)
? Map queryForMap(java.lang.String id, java.lang.Object parameterObject, java.lang.String keyProp);
? Map queryForMap(java.lang.String id, java.lang.Object parameterObject, ? java.lang.String keyProp, java.lang.String valueProp);

SQLMAP API(3)
? List queryForList(java.lang.String id);
? List queryForList(java.lang.String id, int skip, int max); ? List queryForList(java.lang.String id, java.lang.Object parameterObject); ? List queryForList(java.lang.String id, java.lang.Object parameterObject, int skip, int max);

—config/sqlmap文件

SqlMapConfig的标签
? ? ? ? ? ? <properties> <settings> <transactionManager> <typeAlias> 已经内置的类型别名定义 P59 <typeHandler> <sqlMap>

ibatis实例配置
? 一个典型的配置文件如下(具体配置项目的含义见后): <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0/ "http://www.ibatis.com/dtd/sql-map-config-2.dt <sqlMapConfig > < settings cacheModelsEnabled ="true" enhancementEnabled ="true" lazyLoadingEnabled ="true" errorTracingEnabled ="true" maxRequests ="32" maxSessions ="10" maxTransactions ="5" useStatementNamespaces ="false" />

< transactionManager type ="JDBC" > < dataSource type ="SIMPLE" > < property name ="JDBC.Driver" value ="com.p6spy.engine.spy.P6SpyDriver" /> < property name ="JDBC.ConnectionURL" value ="jdbc:mysql://localhost/sample" /> < property name ="JDBC.Username" value ="user" /> < property name ="JDBC.Password" value ="mypass" /> < property name ="Pool.MaximumActiveConnections" value ="10" /> < property name ="Pool.MaximumIdleConnections" value ="5" /> < property name ="Pool.MaximumCheckoutTime" value ="120000" /> < property name ="Pool.TimeToWait" value ="500" /> < property name ="Pool.PingQuery" value ="select 1 from ACCOUNT" /> < property name ="Pool.PingEnabled" value ="false" /> < property name ="Pool.PingConnectionsOlderThan" value ="1" /> < property name ="Pool.PingConnectionsNotUsedFor" value ="1" /> </ dataSource > </ transactionManager > < sqlMap resource ="com/ibatis/sample/User.xml" /> </ sqlMapConfig >

Settings 节点
cacheModelsEnabled 是否启用SqlMapClient上的缓存机制。 建议设为"true" enhancementEnabled 是否针对POJO启用字节码增强机getter/setter的调用效能,避免Reflect所带来的 性能开销。同时,这也为Lazy Loading带来提升。 建议设为"true" errorTracingEnabled 是否启用错误日志,在开发期间建议设为"true" 以方便调试 lazyLoadingEnabled 是否启用延迟加载机制,建议设为"true" maxRequests 最大并发请求数(Statement并发数) maxTransactions 最大并发事务数 maxSessions 最大Session数。即当前最大允许的并发SqlMapClient数。 useStatementNamespaces 是否使用Statement命名空间。 这里的命名空间指的是映射文件中,sqlMap节的namespace属性,如在上例中针 对t_use 表的映射文件sqlMap节点: <sqlMap namespace="User"> 这里,指定了此 sqlMap节点下定义的操作均属于"User"命名空间。 在 useStatementNamespaces="true"的情况下,Statement调用需追加命名空间, 如:sqlMap.update("User.updateUser",user); 否则直接通过Statement名称调用即可,如: sqlMap.update("updateUser",user); 但请注意此时需要保证所有映射文件中,Statement定义无重名。

transactionManager节点
transactionManager节点定义了ibatis的事务管理器 目前提供了以下几种选择: JDBC 通过传统JDBC Connection.commit/rollback实现事务支 持。 JTA 使用容器提供的JTA服务实现全局事务管理。 EXTERNAL 外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置 即可实现自 动的事务管理机制。此时ibatis将把所有事务委托给外部容器 进行管理。

dataSource节点
dataSource从属于transactionManager节点,用于设定ibatis 运行期使用的DataSource属性。

type属性: dataSource节点的type属性指定了dataSource的实现类型。 sqlMap节点 可选项目: SIMPLE: SIMPLE是ibatis内置的dataSource实现,其中实现了一个简 单的 数据库连接池机制,对应 ibatis 实现类为 com.ibatis.sqlmap.engine.datasource.SimpleDataSourceF actory。

sqlMap节点
? sqlMap节点指定了映射文件的位置,配置中 可出现多个sqlMap节点,以指定 项目内所包含的所有映射文件。

SqlMap的标签
? ? ? ? ? ? ? ? <select> <insert> <update> <delete> <procedure> <statement> <sql> select * from a where name=“aaa” <include>

XmlSqlMapClientBuilder
? XmlSqlMapClientBuilder是ibatis 2.0之后版 本新引入的组件,用以替代1.x 版本中的XmlSqlMapBuilder。其作用是根据 配置文件创建SqlMapClient实例。
SqlMapClient SqlMapClient是ibatis的核心组件,提供数据 操作的基础平台。

? SqlMapClient 可通过XmlSqlMapClientBuilder创建: String resource = " com/ibatis/sample/SqlMapConfig.xml "; Reader reader; reader = Resources.getResourceAsReader(resource); XmlSqlMapClientBuilder xmlBuilder = new XmlSqlMapClientBuilder(); SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader); "com/ibatis/sample/SqlMapConfig.xml"指明了配置文件在 CLASSPATH 中的相对路径。XmlSqlMapClientBuilder通过接受一个 Reader类型的配置文 件句柄,根据配置参数,创建SqlMapClient实例。

SqlMapClient基本操作示例
? SqlMapClient提供了众多数据操作方法,下面 是一些常用方法的示例,具体说明 文档请参见ibatis java doc,或者ibatis官方开 发手册。

例1: 数据写入操作(insert, update, delete):
sqlMap.startTransaction(); Product product = new Product(); product.setId ( 1 ); product.setDescription (“Shih Tzu”); int rows = sqlMap.insert (“insertProduct”, product); sqlMap.commitTransaction();

? 例2: 数据查询 (select) sqlMap.startTransaction(); Integer key = new Integer ( 1 ); Product product = (Product)sqlMap.queryForObject (“getProduct”, key); sqlMap.commitTransaction();

? 例3: 在指定对象中存放查询结果(select) sqlMap.startTransaction(); Customer customer = new Customer(); sqlMap.queryForObject(“getCust”, parameterObject, customer); sqlMap.queryForObject(“getAddr”, parameterObject, customer); sqlMap.commitTransaction();

? 例4: 执行批量查询 (select) sqlMap.startTransaction(); List list = sqlMap.queryForList (“getProductList”, null ) sqlMap.commitTransaction();

? 例5: 关于AutoCommit // 没有预先执行startTransaction时,默认为 auto_commit模式 int rows = sqlMap.insert (“insertProduct”, product);

? 例6:查询指定范围内的数据 sqlMap.startTransaction(); List list = sqlMap.queryForList (“getProductList”, null , 0 , 40 ); sqlMap.commitTransaction();

? 例7: 结合RowHandler进行查询(select)

public class MyRowHandler implements RowHandler { public void handleRow (Object object, List list) throws SQLException { Product product = (Product) object; product.setQuantity ( 10000 ); sqlMap.update (“updateProduct”, product); } } sqlMap.startTransaction(); RowHandler rowHandler = new MyRowHandler(); List list = sqlMap.queryForList (“getProductList”, null , rowHandler); sqlMap.commitTransaction();

? // 例8: 分页查询 (select) PaginatedList list = sqlMap.queryForPaginatedList (“getProductList”, null , 10 ); list.nextPage(); list.previousPage();

? // 例9: 基于Map的批量查询 (select) sqlMap.startTransaction(); Map map = sqlMap.queryForMap (“getProductList”, null , “productCode”); sqlMap.commitTransaction(); Product p = (Product) map.get(“EST 93 ”);

—select标签详解

Select的输入和输出
? Select id,name,age from people Where (name like ?%张%?) and (age>#num#)

select标签
? ? ? ? ? ? ? ? ? ? ? ? <select>的属性 id parameterClass resultClass parameterMap resultMap cacheModel resultSetType fetchSize xmlResultName remapResults timeout

select标签
? ? ? ? ? ? 1.用#占位符做参数 2.用$占位符做参数 3.SQL注入 4.结果自动映射(单列、多列、动态) 5.内联结果映射 6.外联结果映射
? <resultMap>实例

—非查询标签1

三个非查询标签
? <insert>标签 ? <update>标签 ? <delete>标签 ? 属性 ? id、parameterClass、parameterMap

三个SqlMap API
? public int insert(String statementName, Object parameterObject) throws SQLException ? public int update(String statementName, Object parameterObject) throws SQLException ? public int delete(String statementName, Object parameterObject) throws SQLException

参数映射
? 内联参数映射 ? 外联参数映射 ? <parameterMap>标签 ? insert实例演示参数映射

其他的标签
? <statement> <statement id=“droptable”>
DROP TABLE Account CASCADE

</statement> sqlMap.update(“droptable”,null); ? <sql> ? <include> ? <procedure> p21

iBATIS—非查询标签2

自动生成的键
? <selectKey>标签 ? 实例

存储过程
? <procedure>
? ? ? ? ? ? ? ? ? ? id parameterClass resultClass parameterMap resultMap cacheModel fetchSize xmlResultName remapResults timeout

批处理
? startBatch( ) ? executeBatch( ) ? 多对象的更新实例

iBATIS—高级查询技术

映射继承
? 鉴别器(discriminator)

用XML做参数和获得结果
? 简单实例

RowHandler
? 和XML形成的实例 ? 模拟过滤数据

iBATIS—事务和高速缓存

事务处理
? 1.什么是事务 ? 2.事务的特性ACID 原子性、一致性、隔离性、持久性 ? 3.事务放到哪一层?(业务逻辑层) ? 4.主动和被动事务 P123 ? 5.事务举例(说明事物的三个阶段 开始 提交 结束)P52

高速缓存
? 使用高速缓存 p16 p24 ? 高速缓存的算法 p42 43

iBATIS—动态使用SQL

动态SQL
? 动态使用SQL概述 P132 PP41 ? 直接使用JDBC一个非常普遍的问题是动态 SQL。使用参数值、参数本身和数据列都是动 态的SQL,通常非常困难。典型的解决方法是, 使用一系列if-else条件语句和一连串讨厌的字 符串连接。对于这个问题,SQL Map API使用 和mapped statement非常相似的结构,提供 了较为优雅的方法

动态标签的分类
? ? ? ? <dynamic>标签 二元标签 一元标签 <iterate>标签

? 共同的属性 prepend,open,close

<dynamic>标签
? <dynamic>标签 ? 属性 prepend,open,close

二元条件标签
? <isEqual property=“age” compareValue=“20”> 比较属性值和静态值或另一个属性值是否相等 ? <isNotEqual> 比较属性值和静态值或另一个属性值是否不相等。 ? <isGreaterThan> 比较属性值是否大于静态值或另一个属性值。 ? <isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值。 ? <isLessThan> 比较属性值是否小于静态值或另一个属性值。 ? <isLessEqual> 比较属性值是否小于等于静态值或另一个属性值。

一元条件标签
? <isPropertyAvailable> 检查是否存在该属性(存在parameter bean的属性) ? <isNotPropertyAvailable> 检查是否不存在该属性(不存在parameter bean的属性) ? <isNull> 检查属性是否为null ? <isNotNull> 检查属性是否不为null ? <isEmpty> 检查Collection.size()的值,属性的String或String.valueOf() 值,是否为null或空(“”或size() < 1) ? <isNotEmpty> 检查Collection.size()的值,属性的String或String.valueOf() 值,是否不为null或不为空(“”或size() > 0)

其他标签
? <isParameterPresent> 检查是否存在参数对象(不为null) ? <isNotParameterPresent> 检查是否不存在参数对象(参数对象为null) ? <iterate> 遍历类型为java.util.List的元素。

实例与比较
? 标签和实例代码展示 ? 和java代码 存储过程比较 进行比较

以上!


相关文章:
ibatis学习资料
ibatis学习资料_IT/计算机_专业资料。iBATIS SQL Maps 入门教程 Page 1 of 10...ibatis 48页 免费 深入iBATIS 2.2 56页 免费 IBatis 培训 60页 免费 iBatis...
ibatis2开发和学习总结
ibatis2开发和学习总结_IT/计算机_专业资料。ibatis开发和学习总结Ibatis 培训资料 2007 年 4 月 目录 第一章 Ibatis 原理... 3 SQL Map 的概念......
ibatis学习笔记
使用事务处理的例子如下: private Reader reader = new Resources.getResourceAsReader( "com/ibatis/example/sqlMapconfig.xml"); private SqlMapClient sqlMap = ...
Ibatis学习笔记手册
Ibatis 学习随笔 < person > < id > 1 </ id > < firstName > Clinton </ firstName > < lastName > Begin </ lastName > < birthDate > 1900-01-...
ibatis学习笔记
DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <...
Spring与ibatis整合学习心得
Spring 与 ibatis 整合学习心得梁飞虎 首先,明确一下 ibatis 在此工程中的作用相当于 hibernate,就是进行数据库的访问,也就是 连接操作数据库用的。因此常说的 ...
基于SSI框架培训方案
基于SSI框架培训方案_计算机软件及应用_IT/计算机_专业资料。基于 struts+spring+ibatis+jquery 的员 工培养方案 一、引言 1、Java 开发规范详见《Java 软件开发...
iBatis入门
iBatis入门_社会学_人文社科_专业资料。iBatis入门iBatis 入门 收藏 根据官网上的开发指南,按照个人使用习惯,频度等整理的,没啥特别的东西。 笑着--胖胖兰学习笔记 ...
我们所学习的技术框架有很多
我们所学习的技术框架有很多, 例如 struts1、 struts2、 JSF、 Spring、 SpringMVC、 Hibernate、 ibatis· ··· 在上篇博客我说了我们可能在开发的路途上会要...
JAVA WEB开发培训提纲
? ? JSP 技术 Servlet MVC1 与 MVC2 2.3 Spring-MVC 培训时间:1 个课时...hibernate 的事物管理 4 / 11 2.5.2 iBatis 培训时间:1 个课时 2.5.2.1...
更多相关标签:
ibatis培训大纲 | seo技术培训 | 网络技术培训 | 小吃技术培训 | 信息技术培训心得体会 | 绝味鸭脖技术培训官网 | 卤菜技术培训 | 软件技术培训 |