iBATIS开发指南Word文件下载.docx
- 文档编号:16275036
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:59
- 大小:48.23KB
iBATIS开发指南Word文件下载.docx
《iBATIS开发指南Word文件下载.docx》由会员分享,可在线阅读,更多相关《iBATIS开发指南Word文件下载.docx(59页珍藏版)》请在冰豆网上搜索。
OSCache.................................................................................................43
相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,ibatis是一种“半
自动化”的ORM实现。
所谓“半自动”,可能理解上有点生涩。
纵观目前主流的ORM,无论Hibernate还是
ApacheOJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全
套映射机制。
程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate
或者OJB提供的方法完成持久层操作。
程序员甚至不需要对SQL的熟练掌握,
Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执
行。
大多数情况下(特别是对新项目,新系统的开发而言),这样的机制无往不利,大有一
统天下的势头。
但是,在一些特定的环境下,这种一站式的解决方案却未必灵光。
在笔者的系统咨询工作过程中,常常遇到以下情况:
1.系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几
条SelectSQL(或存储过程)以获取所需数据,具体的表结构不予公开。
2.开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由
存储过程实现(就笔者工作所面向的金融行业而言,工商银行、中国银行、交
通银行,都在开发规范中严格指定)
3.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高
度优化的SQL语句(或存储过程)才能达到系统性能设计指标。
面对这样的需求,再次举起Hibernate大刀,却发现刀锋不再锐利,甚至无法使用,
奈何?
恍惚之际,只好再摸出JDBC准备拼死一搏……,说得未免有些凄凉,直接使用JDBC
进行数据库操作实际上也是不错的选择,只是拖沓的数据库访问代码,乏味的字段读取操作
令人厌烦。
“半自动化”的ibatis,却刚好解决了这个问题。
这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”
ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及SQL的自动
生成和执行。
而ibatis的着力点,则在于POJO与SQL之间的映射关系。
也就是说,ibatis
并不会为程序员在运行期自动生成SQL执行。
具体的SQL需要程序员编写,然后通过映
射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。
使用ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,
这一层与通过Hibernate实现ORM而言基本一致,而对于具体的数据操作,Hibernate
会自动生成SQL语句,而ibatis则要求开发者编写具体的SQL语句。
相对Hibernate等
“全自动”ORM机制而言,ibatis以SQL开发的工作量和数据库移植性上的让步,为系___________统
设计提供了更大的自由空间。
作为“全自动”ORM实现的一种有益补充,ibatis的出现显
得别具意义。
ibatisQuickStart
准备工作
1.下载ibatis软件包()。
2.创建测试数据库,并在数据库中创建一个t_user表,其中包含三个字段:
Ø
id(int)
name(varchar)
sex(int)。
3.为了在开发过程更加直观,我们需要将ibatis日志打开以便观察ibatis运作的细节。
ibatis采用Apachecommon_logging,并结合Apachelog4j作为日志输出组件。
在
CLASSPATH中新建log4j.properties配置文件,内容如下:
log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1}-%m%n
log4j.logger.java.sql.PreparedStatement=DEBUG
构建ibatis基础代码
ibatis基础代码包括:
1.ibatis实例配置
一个典型的配置文件如下(具体配置项目的含义见后):
<
?
xmlversion="
1.0"
encoding="
UTF-8"
?
>
!
DOCTYPEsqlMapConfig
PUBLIC"
-//iBATIS.com//DTDSQLMapConfig2.0//EN"
"
sqlMapConfig>
settings
cacheModelsEnabled="
true"
enhancementEnabled="
lazyLoadingEnabled="
errorTracingEnabled="
maxRequests="
32"
maxSessions="
10"
maxTransactions="
5"
useStatementNamespaces="
false"
/>
transactionManagertype="
JDBC"
dataSourcetype="
SIMPLE"
propertyname="
JDBC.Driver"
value="
com.p6spy.engine.spy.P6SpyDriver"
JDBC.ConnectionURL"
jdbc:
mysql:
//localhost/sample"
JDBC.Username"
value="
user"
JDBC.Password"
mypass"
Pool.MaximumActiveConnections"
Pool.MaximumIdleConnections"
Pool.MaximumCheckoutTime"
120000"
Pool.TimeToWait"
500"
Pool.PingQuery"
select1from
ACCOUNT"
Pool.PingEnabled"
Pool.PingConnectionsOlderThan"
1"
Pool.PingConnectionsNotUsedFor"
/dataSource>
/transactionManager>
sqlMapresource="
com/ibatis/sample/User.xml"
/sqlMapConfig>
2.POJO(PlainOrdinaryJavaObject)
下面是我们用作示例的一个POJO:
publicclassUserimplementsSerializable{
privateIntegerid;
privateStringname;
privateIntegersex;
privateSetaddresses=newHashSet();
/**defaultconstructor*/
publicUser(){
}
publicIntegergetId(){
returnthis.id;
publicvoidsetId(Integerid){
this.id=id;
publicStringgetName(){
returnthis.name;
publicvoidsetName(Stringname){
this.name=name;
publicIntegergetSex(){
returnthis.sex;
publicvoidsetSex(Integersex){
this.sex=sex;
3.映射文件
与Hibernate不同。
因为需要人工编写SQL代码,ibatis的映射文件一般采
用手动编写(通过Copy/Paste,手工编写映射文件也并没想象中的麻烦)。
针对上面POJO的映射代码如下:
DOCTYPEsqlMap
-//iBATIS.com//DTDSQLMap2.0//EN"
sqlMapnamespace="
User"
typeAliasalias="
type="
com.ibatis.sample.User"
selectid="
getUser"
parameterClass="
java.lang.String"
resultClass="
[CDATA[
select
name,
sex
fromt_user
wherename=#name#
]]>
/select>
updateid="
updateUser"
UPDATEt_user
SET
name=#name#,
sex=#sex#
WHEREid=#id#
/update>
insertid="
insertUser"
INSERTINTOt_user(
sex)
VALUES(
#name#,
#sex#
)
/insert>
deleteid="
deleteUser"
deletefromt_user
whereid=#value#
/delete>
/sqlMap>
从上面的映射文件可以看出,通过<
insert>
、<
delete>
update>
、
select>
四个节点,我们分别定义了针对TUser对象的增删改查操作。
在这
四个节点中,我们指定了对应的SQL语句,以update节点为例:
……
⑴
⑵
[CDATA[⑶
UPDATEt_user⑷
SET(
name=#name#,⑸
sex=#sex#⑹
WHEREid=#id#⑺
⑴ID
指定了操作ID,之后我们可以在代码中通过指定操作id来执行此节点所定
义的操作,如:
sqlMap.update("
user);
ID设定使得在一个配置文件中定义两个同名节点成为可能(两个update节
点,以不同id区分)
⑵parameterClass
指定了操作所需的参数类型,此例中update操作以
com.ibatis.sample.User类型的对象作为参数,目标是将提供的User
实例更新到数据库。
中,user为“com.ibatis.sample.User”
类的别名,别名可通过typeAlias节点指定,如示例配置文件中的:
⑶<
[CDATA[……]]>
通过<
节点,可以避免SQL中与XML规范相冲突的字符对
XML映射文件的合法性造成影响。
⑷执行更新操作的SQL,这里的SQL即实际数据库支持的SQL语句,将由
ibatis填入参数后交给数据库执行。
⑸SQL中所需的用户名参数,“#name#”在运行期会由传入的user对象的name
属性填充。
⑹SQL中所需的用户性别参数“#sex#”,将在运行期由传入的user对象的
sex属性填充。
⑺SQL中所需的条件参数“#id#”,将在运行期由传入的user对象的id属性
填充。
对于这个示例,ibatis在运行期会读取id为“updateUser”的update节点
的SQL定义,并调用指定的user对象的对应getter方法获取属性值,并用此
属性值,对SQL中的参数进行填充后提交数据库执行。
此例对应的应用级代码如下,其中演示了ibatisSQLMap的基本使用方法:
Stringresource="
com/ibatis/sample/SqlMapConfig.xml"
;
Readerreader;
reader=Resources.getResourceAsReader(resource);
XmlSqlMapClientBuilderxmlBuilder=
newXmlSqlMapClientBuilder();
SqlMapClientsqlMap=xmlBuilder.buildSqlMap(reader);
//sqlMap系统初始化完毕,开始执行update操作
try{
sqlMap.startTransaction();
Useruser=newUser();
user.setId(newInteger
(1));
user.setName("
Erica"
);
user.setSex(newInteger
(1));
sqlMmitTransaction();
finally{
sqlMap.endTransaction();
其中,SqlMapClient是ibatis运作的核心,所有操作均通过SqlMapClient
实例完成。
可以看出,对于应用层而言,程序员面对的是传统意义上的数据对象,而非JDBC
中烦杂的ResultSet,这使得上层逻辑开发人员的工作量大大减轻,同时代码更
加清晰简洁。
数据库操作在映射文件中加以定义,从而将数据存储逻辑从上层逻辑代码中独立
出来。
而底层数据操作的SQL可配置化,使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iBATIS 开发 指南