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

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 等开源框架,阅读过源代码; 4、熟悉多线程开发,具有大型开发系统开发经验...认真踏实负责,且具备优秀的表达能力,曾多次主持对用户 和内部的技术讲解和培训,...
写给所有软件公司和程序员的技术
公司有责任组 织培训;也许有的公司会说,我的程序员技术没有问题,但是我也想...最常用的基本框架是 Struts Spring 和 (Hibernate 或 ibatis),程序员需要配置 ...
JAVA培训课程体系_图文
1 1 jQuery easyui 3 java 新 2 2 HTML5 技术 3 3 extJs4 4 4 ibatis 的升级 版 mybatis 等 主要从事 UI 设计、JAVA、跨境电商、HTML5 前端开 发培训...
JAVA WEB开发培训提纲
? ? JSP 技术 Servlet MVC1 与 MVC2 2.3 Spring-MVC 培训时间:1 个课时...hibernate 的事物管理 4 / 11 2.5.2 iBatis 培训时间:1 个课时 2.5.2.1...
IT行业职位要求
对软件工程师进行培训 . 对技术难题进行攻关 职位要求: 职位要求: .为人诚信,...熟悉 Spring、JSF/Struts、Hibernate/iBatis 等架构 . 熟悉数据库设计,熟悉 ...
基于SSI框架培训方案
基于SSI框架培训方案_计算机软件及应用_IT/计算机_专业资料。基于 struts+spring+ibatis+jquery 的员 工培养方案 一、引言 1、Java 开发规范详见《Java 软件开发...
java短期培训
Java 短期培训 Java 短期培训尚学堂高级课程 【培训...IBATIS 等框架,而是希望就业者或自身掌握更加核心的...近段时间出现的 Android 技术,成为了 2011 年的...
JAVA软件工程师需要什么职业技能
新华 IT 培训营的老师总 结了一下,一位优秀的 ...新华 Java 课程阶段,全面学习 Java 技术,让你学到...(以导航系统为驱动)Ibatis WebService 第六阶段 (...
班主任管理系统
一些院校专门对班主任进行一系列培训, 并且由原来的一个系甚至一个院配备一名辅导...第二章 系统技术 ibatis 技术 ibatis 是以 SQL 为中心的持久化层框架。 能...
简历_张东龙
Ibatis 等 Java 框架技术 熟练掌握 Eclipse 开发工具的使用和调试,了解 eclipse ...中软国际卓越培训中心(ETC) | 培训生 行业类别:电子技术/半导体/集成电路 | ...
更多相关标签:
绝味鸭脖技术培训官网 | 深圳技术培训 | 翘脚牛肉技术培训 | 小吃技术培训学校 | 娄底技术培训 | seo技术培训 | 技术培训 | 余杭技术培训 |