ibatis 使用文档 (上篇)

(代码下载地址:http://download.csdn.net/detail/partner4java/4760043

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
创建于2002年,后很快加入了Apache,但是2010年又易主到google code,并改名为MyBatis。
本篇文章主要是基于iBATIS来进行展示,后面会再发一篇和MyBatis的对比。
(本文大多摘自《iBATIS in action》一书,若有时间学习此书,建议不要看本文--因为书中更详细,且本文可能存在技术点上的错误分析)

==================================================================================================
第1章 iBATIS的理念

(导读:本章主要介绍iBATIS框架的设计理念,可能会随带几个iBATIS的展示,目前不需要关心如何去书写或代码规范,只需要对概念有所了解即可)

SQL(Structured Query Language,结构化查询语言)已经存在很长一段时间了。而且在接下来的很长一段时间内还会继续存在。
iBATIS的建立正是基于这样的思想:关系数据库和SQL仍然很有价值,在整个产业范围内对SQL投资仍然是一个非常好的注意。
我们可能都曾有过这样的经历,应用程序的源代码(即使发展了很多版本)随着时间的流逝最终还是过时了,但他的数据库甚至是SQL本身却仍然很有价值。
在某些情况下我们也会看到一个应用程序已经被其他的语句重写了,但背后的SQL和数据库却基本上保持不变。

正是基于这些原因,iBATIS并不试图去隐藏SQL或者避免使用SQL。
相反,正是iBATIS这个持久层框架广泛使用了SQL,他使得SQL更容易使用、更容易集成到现代的面向对象软件中。

混合型解决方案在IT领域同样被证明是非常有效的。iBATIS就是这样一个混合型的持久层解决方案。

一:探索iBATIS的根源
iBATIS是一个混合型解决方案。他吸取了SQL、老式存储过程(“两层应用程序”)、现代存储过程、内联SQL、动态SQL、ORM这些解决方案中最有价值的思想并将他们融会贯通。

iBATIS提供的与其他解决方案相同的优点:
-------------------------------------------------------------------------------------------------------------------------


iBATIS框架的核心价值:外部化SQL和封装SQL

二:外部化SQL
“总是将一个大系统设计为多个子系统,每个子系统的功能都相对集中”。
应该尽可能的降那些由不同的开发角色处理的任何分离开。
外部化将SQL从应用程序的源代码中分离出来,从而使得两者都更加清晰。
这样就保证了SQL语句与任何特定的语言或平台都想对的独立。
在以前的书写方式中,在代码中拼写SQL,容易引起空格等错误,特别是如果你有一条复杂的SQL语句。
这时iBATIS的一个主要优点就体现出来了:使用iBATIS你就拥有按照最自然的方式写SQL的能力。

select 
	name,
	age
from user
where address=#address#


三:封装化的SQL
计算机编程领域一个最古老的概念就是模块化。
iBATIS使用XML来封装SQL。
<select id="categoryById" 
	parameterClass="string" resultClass="category">
	select categoryid,name,description
	from category
	where categoryid=#categoryId#
</select>

四:iBATIS适合应用在何处
几乎所有结构良好的软件都使用了分层设计。
iBATIS是一个持久层框架。持久层位于应用程序的业务逻辑层和数据库之间。这种分离非常重要,他保证了持久化策略不会混入业务逻辑代码,反之亦然。
这种分离的好处在于你的代码更将加容易维护,因为他允许对象模型的转化不依赖于数据库设计。

==================================================================================================
第2章 iBATIS是什么

(导读:本章主要介绍iBATIS框架是什么,并简单附带了示例,目前仍不需要关心如何去书写或代码规范,只需要对概念有所了解即可)

概述:
iBATIS就是我们通常所说的数据映射器(data mapper)。
所谓映射器层,是用于在对象和数据库之间搬运数据,同时保证对象、数据库以及映射器本身都相互独立。

iBATIS与O/RM不同,他不是直接把类映射为数据库表或者说把类的字段映射为数据库列,而是把SQL语句的参数和结果映射为类。

iBATIS在数据库和类之间建立了一个额外的间接层,这就为在类和数据库直接建立映射关系带来了更大的灵活性,使得不用改变数据库模型或者对象模型的情况下改变他们的映射关系成为可能。(这里的间接层就是SQL)

一:映射SQL语句(我们来观赏下iBATIS的简单映射方式)
任何一条SQL语句都可以看做是一组输入和输出。输入即参数(parameter),通常可以在SQL语句的WHERE子句中找到。输出是SELECT子句中指定的那些列。

iBATIS使用一个简单的XML描述符文件来映射SQL语句的输入和输出。

示例:
<select id="getAddress" parameterClass="int" resultClass="Address">
	select 
		ADR_ID				as 	id,
		ADR_DESCRIPTION 	as	description
	from address
	where ADR_ID = #id#
</select>

示例代码中包含一条SQL SELECT语句,他返回地址数据。
从<select>元素中可以看出一个Integer对象作为参数,该参数是通过WHERE子句中的#id#符号标记的。
结果是一个Address类的对象实例,假设Address类的所有字段的名与SELECT语句中指定的各个列的别名相同,会被自动映射为相应字段。
Address address = (Address)sqlMap.queryForObject("getAddress",new Integer(8));

SQL映射这个概念具有很好的可移植性,可应用于任何一个功能完备的编程语言。

二:iBATIS如何工作(上面简单示例是如何工作的呢?)
Address address = (Address)sqlMap.queryForObject("getAddress",new Integer(8));
这行代码会执行相应的SQL语句,设置其参数,并以一个真实的Java对象的形式作为结果返回。
SQL语句被“干干净净”地封装在Java代码之外的一个XML文件中。iBATIS负责管理所有的幕后资源。

三:为何使用iBATIS
简单性、生产效率、性能、关注点分离、明确分工、可移植性、开源和诚实。

四:何时不该使用iBATIS
1.当对数据库永远拥有完全控制权时
当你对数据库具有完全控制权时,就有充分的理由使用一个完全的对象/关系映射方案,如Hibernate。

2.当应用程序需要完全动态的SQL时

3.当没有使用关系数据库时

4.当iBATIS不起作用时

==================================================================================================
第3章 iBATIS HelloWorld

(导读:目前你只需要跟着我做每一步,能写个helloworld,至于具体每个配置是什么含义,后面章节我们会一一道来)

一:HelloWorld

我们创建一个依赖于架构的项目,在脑海里应该很快的想到应该需要几个重要步骤:导入相关jar包;配置需要配置文件;如果和数据库相关还需要创建相应数据库。

第一步:创建项目并导入相关jar
创建一个项目(建议创建一个Maven项目 -- eclipse中可安装maven插件即可,具体操作请查阅相关资料)
所需jar:
ibatis2-common.jar -- 共享的iBATIS类
该文件包含SQL映射框架和DAO框架中要用到的公共组件。
ibatis2-sqlmap.jar -- iBATIS的SQL
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值