ibatis详解

上传人:wm****3 文档编号:43258906 上传时间:2018-06-05 格式:DOC 页数:20 大小:46.50KB
返回 下载 相关 举报
ibatis详解_第1页
第1页 / 共20页
ibatis详解_第2页
第2页 / 共20页
ibatis详解_第3页
第3页 / 共20页
ibatis详解_第4页
第4页 / 共20页
ibatis详解_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《ibatis详解》由会员分享,可在线阅读,更多相关《ibatis详解(20页珍藏版)》请在金锄头文库上搜索。

1、IbatisIbatis 详解详解Ibatis 详解相对 Hibernate 和 Apache OJB 等“一站式”ORM 解决方案而言,ibatis 是一种“半自动化”的 ORM 实现。以前 ORM 的框架(hibernate,ojb)的局限:1 系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条 Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。2 开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(就笔者工作所面向的金融行业而言,工商银行、中国银行、交通银行,都在开发规范中严格指定)3 系统数据处理量巨大,性能要求极

2、为苛刻,这往往意味着我们必须通过经过高度优化的 SQL 语句(或存储过程)才能达到系统性能设计指标。ibatis 的着力点:在于 POJO 与 SQL 之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将 SQL 所需的参数,以及返回的结果字段映射到指定 POJO。Ibatis 与 Hibernate 的区别:Hibernate 提供了全面的数据库封装机制的“全自动化”ORM 实现而言, “全自动”ORM 实现了 POJO 和数据库表之间的映射,以及SQL 的自动生成和执行,而 ibatis 的着力点,则在

3、于 POJO 与 SQL之间的映射关系。也就是说,ibatis 并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将 SQL 所需的参数,以及返回的结果字段映射到指定 POJO。ibatis 配置文件:Settings 节点 参数描述cacheModelsEnabled是否启用 SqlMapClient 上的缓存机制。建议设为“true“enhancementEnabled是否针对 POJO 启用字节码增强机制以提升 getter/setter 的调用效能,避免使用 JavaReflect 所带来的性能开销。同时,这也为 Lazy Loadin

4、g 带来了极大的性能提升。建议设为“true“errorTracingEnabled是否启用错误日志,在开发期间建议设为“true“以方便调试lazyLoadingEnabled是否启用延迟加载机制,建议设为“true“maxRequests最大并发请求数(Statement 并发数)maxTransactions最大并发事务数maxSessions最大 Session 数。即当前最大允许的并发 SqlMapClient 数。maxSessions 设定必须介于 maxTransactions 和 maxRequests 之间,即 maxTransactions这里,指定了此 sqlMap 节

5、点下定义的操作均从属于“User“命名空间。在 useStatementNamespaces=“true“的情况下,Statement 调用需追加命名空间,如:sqlMap.update(“User.updateUser“,user);否则直接通过 Statement 名称调用即可,如:sqlMap.update(“updateUser“,user);但请注意此时需要保证所有映射文件中,Statement 定义无重名。 transactionManager 节点transactionManager 节点定义了 ibatis 的事务管理器,目前提供了以下几种选择:? JDBC通过传统 JDBC

6、Cmit/rollback 实现事务支持。? JTA使用容器提供的 JTA 服务实现全局事务管理。? EXTERNAL外部事务管理,如在 EJB 中使用 ibatis,通过 EJB 的部署配置即可实现自动的事务管理机制。此时 ibatis 将把所有事务委托给外部容器进行管理。此外,通过 Spring 等轻量级容器实现事务的配置化管理也是一个不错的选择。关于结合容器实现事务管理,参见“高级特性”中的描述。 dataSource 节点dataSource 从属于 transactionManager 节点,用于设定 ibatis 运行期使用的 DataSource 属性。type 属性: data

7、Source 节点的 type 属性指定了 dataSource 的实现类型。可选项目:? SIMPLE:SIMPLE 是 ibatis 内置的 dataSource 实现,其中实现了一个简单的数据库连接池机制,对应 ibatis 实现类为com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。? DBCP:基于 Apache DBCP 连接池组件实现的 DataSource 封装,当无容器提供 DataSource 服务时,建议使用该选项,对应 ibatis 实现类为com.ibatis.sqlmap.engine.dataso

8、urce.DbcpDataSourceFactory。? JNDI:使用 J2EE 容器提供的 DataSource 实现,DataSource 将通过指定的 JNDI Name 从容器中获取。对应 ibatis 实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。dataSource 的子节点说明(SIMPLEdatabaseName=ibatis 如果用的是 SQLServer JDBC Driver,需要在 url 后追加SelectMethod=Cursor 以获得 JDBC 事务的多 Statement 支持。J

9、DBC.Username数据库用户名JDBC.Password数据库用户密码Pool.MaximumActiveConnections数据库连接池可维持的最大容量。Pool.MaximumIdleConnections数据库连接池中允许的挂起(idle)连接数。以上子节点适用于 SIMPLE 和 DBCP 模式,分别针对 SIMPLE 和 DBCP 模式的 DataSource 私有配置节点如下:SIMPLE:Pool.MaximumCheckoutTime数据库联接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回。 (毫秒)Pool.TimeToWait当线程

10、试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。 (毫秒)Pool.PingQuery数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑 SQL。如“select 1 from t_user” ,如果执行此语句成功,连接池管理器将认为此连接处于可用状态Pool.PingEnabled是否允许检测连接状态。Pool.PingConnectionsOlderThan对持续连接时间超过设定值(毫秒)的连

11、接进行检测。Pool.PingConnectionsNotUsedFor对空闲超过设定值(毫秒)的连接进行检测。DBCP:Pool.MaximumWait当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。 (毫秒)Pool.ValidationQuery数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑 SQL。如“select 1 from t_user” ,如果执行此语句成功,连接池管理器

12、将认为此连接处于可用状态。Pool.LogAbandoned当数据库连接被废弃时,是否打印日志。Pool.RemoveAbandonedTimeout数据库连接被废弃的最大超时时间Pool.RemoveAbandoned当连接空闲时间超过 RemoveAbandonedTimeout 时,是否将其废弃。JNDI:由于大部分配置是在应用服务器中进行,因此 ibatis 中的配置相对简单,下面是分别使用 JDBC 和 JTA 事务管理的 JDNI 配置:使用 JDBC 事务管理的 JNDI DataSource 配置 sqlMap 节点sqlMap 节点指定了映射文件的位置,配置中可出现多个 sq

13、lMap 节点,以指定项目内所包含的所有映射文件。给对应的类取别名设定缓存有效期指定执行特定 Statement 时,将缓存清空。如 updateUser 操作将更新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。CacheModel 中最大容纳的数据对象数量申明了一个名为“userCache“的 cacheModel,之后可以在 Statement申明中对其进行引用:例如:需要一个 JAVABEAN:有 getter 和 setter 方法如何读取配置文件:public class SQLMapper public static

14、 SqlMapClient sqlMapper;staticString resource = “org/lzp/xml/SqlMapConfig.xml“;指明了配置文件的相对路径try Reader reader = Resources.getResourceAsReader(resource);/ibatis2.0/* XmlSqlMapClientBuilder xmlBuilder =new XmlSqlMapClientBuilder();sqlMapper = xmlBuilder.buildSqlMap(reader);*/ibatis1.0sqlMapper = SqlMap

15、ClientBuilder.buildSqlMapClient(reader); catch (Exception e) e.printStackTrace();SqlMapClient 是 ibatis 运作的核心,所有操作均通过SqlMapClient 实例完成。例如:sqlMapper.insert(“名称“, 参数);sqlMapper 提供了众多数据操作方法,下面是一些常用方法的示例,具体说明文档请参见 ibatis java doc,或者 ibatis 官方开发手册。Statement 配置:Statement 配置包含了数个与 SQL Statement 相关的节点,分别为:u

16、statement: 最为通用,它可以替代其余的所有节点。u insertu deleteu updateu selectu procedure参数描述:可以是类、基本数据类型和 MAP 进行传值参数描述parameterClass参数类。指定了参数的完整类名(包括包路径) 。可通过别名避免每次重复书写冗长的类名。resultClass结果类。指定结果类型的完整类名(包括包路径)可通过别名避免每次重复书写冗长的类名。parameterMap参数映射,需结合 parameterMap 节点对映射关系加以定义。对于存储过程之外的 statement 而言,建议使用 parameterClass 作为参数配置方式,一方面避免了参数映射配置工作,另一方面其性能表现也更加出色。resultMap结果映射,需结合 resultMap 节点对映射关系加以定义。cacheModelstatement 对应的 Cache 模块。动态映射:Select id,name,sex from t_user(name like #name#)(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号