2014java数据库技术详解11网络教程提供http第15章_第1页
2014java数据库技术详解11网络教程提供http第15章_第2页
2014java数据库技术详解11网络教程提供http第15章_第3页
2014java数据库技术详解11网络教程提供http第15章_第4页
2014java数据库技术详解11网络教程提供http第15章_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章iBatis概述iBatis一词来源于“internet”和“abatis”的组合,是一个由ClintonBegin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和DataAccessObjects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。iBatis是一种数据映射器(datamapper)。iBatis是一种半自动化的ORM实现。15.1什么是iBatisiBatis一词来源于“internet”和“abatis”的组合,是一个由ClintonBegin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和DataAccessObjects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。15.1.1iBatis框架IBatis框架也有一个XML的映射文件,这个映射文件中不是通过简单Java对象与数据库表的字端进行关联,而是通过常见的SQL语句来描述。也就是说,将一个简单Java对象映射成了一句SQL语句。只需对对象进行操作就可以完成对数据库表的操作。在表面看来,对象和表之间仍然存在映射关系。简单的说iBatis框架是通过对象和SQL之间映射来完成持久层的工作。15.1.1iBatis框架iBatis是一种半自动化的ORM实现。在映射文件中手动配置SQL语句。这是区别于Hibernate的一大标志。这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。而ibatis的着力点,则在于POJO与SQL之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成SQL执行。具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。15.1.2iBatis框架和Hibernate框架的区别iBatis框架和Hibernate框架都是ORM实现,但是两者有着很大的区别,iBatis在处理大型的、关系复杂的数据上比Hibernate更具优势。下来来简单介绍iBatis框架和Hibernate框架的区别。iBatis的特性易于掌握,对于初学者来说,学习iBatis比学习Hibernate更加容易。同时iBatis的特性更容易进行SQL的优化。15.1.2iBatis框架和Hibernate框架的区别使用iBatis是,可以列出所需要的表字段内容,不需要使用的表字段可以不加载,使用Hibernate的时候,一般情况下Hibernate会把所有的字段都选出来。使用Hibernate更新一条记录(一个对象),需要现把对象select出来,然后再做update。这对数据库来说就是两条SQL。而iBatis只需要一条update的SQL就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。iBatis的SQL都保存到单独的文件中,Hibernate在有些情况下可能会在java代码中保存sql/hql。所以对于后期维护来说iBatis优越于Hibernate。15.2iBatis基础这一节将简单介绍为什么要使用iBatis以及iBatis的工作流程,iBatis的配置文件的使用以及iBatis的操作方法。通过这一节的学习,能够对iBatis有初步的了解。15.2.1使用iBatis的原因在实际的开发中常常遇到如下问题:系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条SelectSQL(或存储过程)以获取所需数据,具体的表结构不予公开。开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现。系统数据处理量巨大,性能要求极为苛刻,这往往意味着必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。15.2.1使用iBatis的原因iBatis致力于POJO与SQL之间的映射关系。也就是说,iBatis不会在运行期自动生成SQL执行。具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBatis提供的ORM机制,相对Hibernate等“全自动”ORM机制而言,iBatis以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。15.2.2iBatis框架的搭建使用iBatis框架进行开发需要搭建好框架,使用iBatis框架就必须用到iBatis的jar包,即ibatis.jar。ibatis.jar有不同的版本,本书中使用的是ibatis-2.3.0.677.jar。该jar包可以在iBatis官方网站中下载。新建一个Web工程,把ibatis-2.3.0.677.jar拷贝到该工程的WebRoot/WEB-INF/lib目录下,这样就可以使用iBatis框架了,连接具体的数据库,还需要具体的数据库连接jar包。工程中所需的jar包都复制到该工程的WebRoot/WEB-INF/lib目录下。iBatis连接数据库的设置在iBatis的配置文件中配置,实体类和数据库表的关系以及SQL语句在映射文件中配置。15.3iBatis的使用这一节通过一个简单的iBatis例子来对iBatis做一个直观的了解。通过这个例子的学习,了解iBatis框架的工作流程。关于iBatis的配置文件和映射文件在这一节不做详细介绍,在后边的章节中详细介绍iBatis的配置文件和映射文件。本节的例子使用的开发工具是MyEclipse5.5,服务器是Tomcat6.0,数据库是MySQL5.1。本节的所有例子源代码见光盘第15章/15-3的first_ibatis工程中。15.3.1搭建iBatis框架在MyEclipse中新建一个Web工程,工程名为first_ibatis,把iBatis框架的jar包ibatis-2.3.0.677.jar和连接MySQL数据库的jar包mysql-connector-java-5.1.6-bin.jar拷贝到该工程的WebRoot/WEB-INF/lib目录下。15.3.2创建数据库表这个例子中需要用到数据库表,在MySQL数据库中创建一张表格users,建表SQL语句如下:--Table"users"DDLCREATETABLEusers(idint(11)NOTNULL,namevarchar(20)DEFAULTNULL,

15.3.2创建数据库表ageint(11)DEFAULTNULL,telvarchar(20)DEFAULTNULL,addressvarchar(50)DEFAULTNULL,PRIMARYKEY(id))ENGINE=InnoDBDEFAULTCHARSET=gb2312;表中有5个字段,id字段是主键,是不为能为空的。这里主键不设置成自动增长,需要手动添加。其他的字段都可以为空。15.3.3创建实体类和映射文件创建好数据库表以后,需要创建数据库表对应的实体类和映射文件。实体类中药把数据库表字段对应的属性都声明了,并且声明属性对应的setter和getter方法。实体类UsersVo的代码如下:package.entity;publicclassUsersVo{privateintid;//用户编号15.3.3创建实体类和映射文件privateStringname;//用户姓名privateintage;//用户年龄privateStringtel;//用户的话privateStringaddress;//用户地址}15.3.4添加数据在SQL语句中,values中的动态值用实体类的属性来代替,放在两个井号“#”之间。insert中的id="insertUser"是用来标识这个SQL语句的。Java程序通过id的值来调用SQL语句。parameterClass="UsersVo"是实体类在映射文件中中对应的名称。添加成功后,到数据库中查询,表users中存在一条id值为102的数据。说明数据已经添加到数据库中了。15.3.5根据id查询数据在SQL语句中,查询条件id动态值用实体类的属性来代替,放在两个井号“#”之间。select中的id="selectUserById"是用来标识这个SQL语句的。Java程序通过id的值来调用SQL语句。parameterClass="int"查询条件id的数据类型。SqlMapClient是用来读取配置文件的,根据读取的配置文件来调用相应的SQL语句。selectUserById方法中,使用queryForObject()来调用SQL语句,传递一个id作为参数。15.3.6查询全部数据查询的开发流程和查询单条数据的开发流程是一样的。查询全部数据的SQL语句也要写在映射文件中,id="selectAllUsers"是SQL语句的标志,Java程序通过这个标识来调用SQL语句的。resultMap="UsersResult"表示结果集。SQL语句不被调用是不会执行的,所以需要编写一个Java类类调用查询全部数据的SQL语句SqlMapClient是用来读取配置文件的,根据读取的配置文件来调用相应的SQL语句。selectAllAccounts()方法中使用queryForList()方法来调用查询全部数据的SQL语句,编写一个测试类来调用selectAllAccounts()方法查询出全部数据。15.3.7修改数据修改数据的开发流程和查询数据的开发流程是一样的。修改数据的SQL语句也要写在映射文件中,映射文件UsersVo.xml中修改数据的SQL语句代码如下。<!--修改--><updateid="updateUserById"parameterClass="UsersVo">updateusersset15.3.7修改数据name=#name#,age=#age#,tel=#tel#,address=#address#whereid=#id#</update>15.3.8删除数据删除数据的开发流程和查询数据的开发流程一样。删除数据的SQL语句也要写在映射文件中,映射文件UsersVo.xml中删除数据的SQL语句id="deleteUserById"是SQL语句的标识,Java代码通过id的值来调用删除的SQL语句。parameterClass="int"用来声明删除条件的数据类型是int型。编写一个Java类来调用删除数据的SQL语句,删除数据的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论