ibatis教程介绍

上传人:第*** 文档编号:61616945 上传时间:2018-12-07 格式:PPT 页数:41 大小:3.29MB
返回 下载 相关 举报
ibatis教程介绍_第1页
第1页 / 共41页
ibatis教程介绍_第2页
第2页 / 共41页
ibatis教程介绍_第3页
第3页 / 共41页
ibatis教程介绍_第4页
第4页 / 共41页
ibatis教程介绍_第5页
第5页 / 共41页
点击查看更多>>
资源描述

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

1、ibatis简介,为什么要使用Ibatis?,在系统的开发过程中,你可能碰到如下一些问题:,1.系统的部分或全部数据都来源于现有数据库,出于安全考虑,客户只给你提供一些select sql语句(或存储过程)来获取数据,具体的表结构不公开。(金融行业项目常见) 2.开发规范过程中要求,所有涉及到业务逻辑部分的数据库表的操作,必顺通过存储过程进行实现 3.系统数据处理量巨大,对性能要求非常高 请问此时你将选择Hibernate来操作,还是选择JDBC呢?,当你选择使用Hibernate,却发现其优点荡然无存!,当你选择使用JDBC,却发现拖沓的代码到处存在!,什么是Ibatis?,半自动化ORM框

2、架 相对于Hibernate等“一站式”ORM框架,Ibatis是一种“半自动化”的ORM框架实现。也就是说,ORM概念中,Ibatis只强调O/R部分的内容,而将M(mapping)这部分概念进行了淡化。因为它将对于SQL语句的操作权,最终交还给了程序员。 上面提到的“半自动化”这个概念可能大家理解起来比较生涩,通过我们对Hibernate或EJB3的了解,可以发现在它们都是针对POJO到数据库提供了一种较为完整的封装。程序只需要对POJO进行操作,就达到操作数据库持久层的目的,我们程序员对SQL语句都不需要太多的了解,因为Hibrenate会根椐POJO的映射关系生成对应的SQL语句,最终

3、调用JDBC完成操作。 大部分情况, Hibernate这种操作机制无往不利,但是在特定的情况下,这种“一站式”的解决方案却不见得灵光。我们来思考在开发过程中的一些问题:,什么是Ibatis?,使用Ibatis解决前述问题 使用“半自动化”化的Ibatis框架,可以解决前面系统开发过程中存在的问题。 针对Hibernate在POJO与数据库之间建立映射,以及自动生成SQL并执行的过程,Ibatis着力点,则在于POJO与SQL语句之间的映射。也就是说,Ibatis在运行过程中不会自动生成SQL语句执行,具体的SQL语句由程序员编写,然后通过映射配置文件,将SQL语句所需的参数,获得的返回结果字

4、段映射到指定的POJO。 使用Ibatis提供的ORM机制,在业务逻辑层实现人员而言,操作的是JAVA对象,这一层面与Hibernate机制中一样的。对于具体的数据库操作,Hibernate会自动生成SQL并执行,而Ibatis要求开发人员具体编写SQL语句。Ibatis通过在数据库移植性和SQL开发工作量上面做出了让步,换来了为系统设计更多的灵活性和自由空间。,如何使用Ibatis?,准备工作 导入Ibatis相关的jar包 目前ibatis的最新版本为2.3.4。使用ibatis非常简单,只需要将相关的jar包复制到指定的目录下便可,具体情况如下表: IBATIS 2.0的一个主要的关注点

5、是管理并降低JAR文件的依赖性。因此,如果您用的是JDK1.4,IBATIS仅仅依赖于Jakarta Commons Logging框架。,Ibatis中可能需要的一些jar包,如何使用Ibatis?,构建基础代码 ibatis的基础代码包括以下几个部分: ibatis实例配置(SqlMapConfig.xml ) Pojo(Plain Ordinary Java Object) 映射文件, ,引用dtd文件,用于配置和优化SqlMapClient实例的各选项,配置事务管理服务,引入映射文件,如何使用Ibatis?,构建基础代码,假设我们在数据库中建立了一个Person表,其中包括三个字段:

6、Create table Person( pid number(10) primary key, pname varchar2(30) not null, sex char(1) ),public class Person implements Serializable private Integer pid; private String pname; private String sex; setter/getter ,Pojo对象类,如何使用Ibatis?,构建基础代码 与Hibernate不同,因为需要人工手动编写SQL,所以Ibatis的映射文件一般通过手动编写的方式完成。, sel

7、ect * from Person where PID = #id# ,Person.xml(Ibatis映射文件),为实体类定义别名,定义查询操作SQL,如何使用Ibatis?,创建SqlMapClient对象使用Ibatis 通过SqlMapClient对象以及调用此对象上面的API,可以完成通过Ibatis进行持久层操作。 使用SqlMapClient对象完成持久化的步骤 1、读取SqlMapConfig.xml文件 2、创建SqlMapClientBuilder对象 3、创建SqlMapClient对象 4、调用SqlMapClient对象相关API,通过使用comibatiscomm

8、onresourcesResources对象来读取SqlMapConfig.xml文件(要求位于classpath下面),结合问题,static try Reader resource= Resources.getResourceAsReader(“SqlMapConfig.xml“); client=SqlMapClientBuilder.buildSqlMapClient(resource); catch(Exception k) k.printStackTrace(); ,读取位于classpath下面的文件,此名称来源于Person.xml文件,SqlMapConfig.xml配置文件

9、说明,元素 元素用于配置和优化SqlMapClient实例的各选项。元素本身及其所有的属性都是可选的。下表列出了元素支持的属性及其功能:,SqlMapConfig.xml配置文件说明,元素 元素让您为一个通常较长的、全限定类名指定一个较短的别名。 在ibatis中默认定义了几个别名,如下:,SqlMapConfig.xml配置文件说明,元素 元素让您为SQL Map配置事务管理服务。属性type指定所使用的事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。包含在框架的三个事务管理器分别是:JDBC,JTA和EXTERNAL。 JDBC:通过常用的Connection commit()

10、和rollback()方法,让JDBC管理事务。 JTA:本事务管理器使用一个JTA全局事务,使SQL Map的事务包括在更大的事务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。 EXTERNAL:这个配置可以让您自己管理事务。您仍然可以配置一个数据源,但事务不再作为框架生命周期的一部分被提交或回退。这意味着SQL Map外部应用的一部分必须自己管理事务。也可以用于没有事务管理的数据库配置(比如说只读性质的数据库操作),SqlMapConfig.xml配置文件说明,元素 是的一部分,为SQL Map数据源设置了一系列参数。 目前为止,ibatis支持三种数据源,如下: Simpl

11、eDataSourceFactory 为DataSource提供了一个基本的实现,适用于在没有J2EE容器提供DataSource的情况。 DbcpDataSourceFactory 实现使用Jakarta DBCP(Database Connection Pool)的DataSource API提供连接池服务。适用于应用/Web容器不提供DataSource服务的情况。 JndiDataSourceFactory 在应用容器内部从JNDI Context中查找DataSource实现。,最佳实践:2.0版本只允许一个数据源。要使用多个数据源,最好使用多个属性文件, 不同的系统使用不同的属性文

12、件,或在创建SQLMapClient时传入不同的属性文件。,SqlMapConfig.xml配置文件说明,元素 元素用于包括SQL Map映射文件和其他的SQL Map配置文件。每个SqlMapClient对象使用的所有SQL Map映射文件都要在此声明。映射文件作为stream resource从类路径或URL读入。您必须在这里指定所有的SQL Map文件。,SQL Map XML文件说明,Mapped Statements SQL Map的核心概念是Mapped Statement。Mapped Statement可以使用任意的SQL语句,并拥有parameter map(输入)和resu

13、lt map(输出)。如果是简单情况,Mapped Statement可以使用Java类来作为parameter和result。Mapped Statement也可以使用缓存模型,在内存中缓存常用的数据。Mapped Statement的结构如下所示:, SQL语句 ,Statement有多种类型,在上面的表达式中,括号里的部分时可选的属性, 并且在某些情况下只有特定的组合才是合法的,SQL Map XML文件说明,Statement的类型 元素是个通用声明,可以用于任何类型的SQL语句。通常,使用具体的statement类型是个好主意。具体statement类型提供了更直观的XML DTD,

14、并拥有某些元素没有的特性。下表总结了statement类型及其属性和特性:,SQL Map XML文件说明,SQL语句 SQL显然是mapped statement中最重要的部分,可以使用对于数据库和JDBC Driver合法的任意SQL语句。只要JDBC Driver支持,可以使用任意的函数,甚至是多条语句。因为SQL语句是嵌在XML文档中的,因此有些特殊的字符不能直接使用,例如大于号和小于号()。幸运的是,解决的办法很简单,只需将包含特殊字符的SQL语句放在XML的CDATA区里面就可以了。例如:, #value# ,SQL Map XML文件说明,parameterClass属性 par

15、ameterClass属性的值是Java类的全限定名(即包括类的包名)。parameterClass属性是可选的,但强烈建议使用。它的目的是限制输入参数的类型为指定的Java类,并优化框架的性能。如果您使用parameterMap,则没有必要使用parameterClass属性。例如,如果要只允许Java类“.Person”作为输入参数,可以这样作:, insert into PRODUCT values (#id#, #description#, #price#) ,与java类的属性名称一样,最佳实践:虽然2.0向后兼容,但强烈建议使用parameterClass(除非没必要)。 通过提供

16、parameterClass,您可以获得更好的性能。,SQL Map XML文件说明,parameterMap属性 属性parameterMap的值等于一个预先定义的元素的名称。parameterMap的基本思想是定义一系列有次序的参数系列,用于匹配JDBC PreparedStatement的值符号:, insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (?,?); ,说明:parameterMap属性很少使用,更多的是使用上面的 parameterClass和inline parameter,SQL Map XML文件说明,Inline Parameter简介 parameterMap的语法虽然简单,但很繁琐。还有一种更受欢迎更灵活的方法,可以大大简化定义和减少代码量。这种方法把Java Bean的属性名称嵌在Mapped Statement的定义中(即直接写在SQL语句中)。缺省情况下,任何没有指定parameterMap的Mapped Stat

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

当前位置:首页 > 办公文档 > 事务文书

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