欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    扩展 iBatis 以透明支持多种数据库.docx

    • 资源ID:59599       资源大小:26.53KB        全文页数:8页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    扩展 iBatis 以透明支持多种数据库.docx

    扩展iBatis以透亮支持多种数据库iBatis是一个开源的对象关系映射框架,着重于POJO与SQL之间的映射关系。和其它ORM框架不同,iBatis开发者需要自己编写利维护SQL语句。为了得到更好的执行性能,在实际开发中免不了会使用一些数据库方言。随之而来的一个问题是,如何在增加对新的数据库支持的同时尽可能避开对已有应用程序代码的修改?本文供应了一个简洁有效的方法,通过扩展iBatis来透亮地支持多数据库方言。iBatis简介iBatis是一个开源的对象关系映射程序,着重于POJO与SQL之间的映射关系。使用时,开发者供应一个被称为SQL映射的XML文件,定义程序对象与SQL语句间的映射关系,iBatis会依据SQL映射文件的定义,运行时自动完成SQL调用参数的绑定以及JDBCResuItSet到JaVaPoJO之间的转换。下面是一个简洁的例子,相比其它ORM工具,iBatis相对简洁,更简洁上手。清单1.POJO对象publicclassBIogDataimplementsSerializableprotectedStringid;protectedStringname;protectedintrating=0;publicStringgetld()returnid;1publicStringgetName()returnname;(publicintgetRating()returnrating;1publicvoidsetId(Stringid)this.id=id;)publicvoidsetName(Stringname)this.name=name;1publicvoidsetRating(intrating)this.rating=rating;清单2.SQL映射文件Sqlmarxmlinsertintoblogs(id,name,rating)values(#id#,#name#,#rating#)updateblogssetname=#name#,rating=#rating#whereid=#id#deletefromblogswhereid=#id#select*fromblogsorderbyratingdescfetchfirst$SiZe$rowsonly清单3.iBatis配置文件SQLMAPCONFIGXML/SQL映射声明清单4.SQL访问示例Stringcfg=',SQLMAPCONFIGXML;Readerr=Resources.getResourceAsReader(cfg);SqlMapClientclient=newSqlMapConfigParser().parse(r);/插入BlogDatao=newBlogData();o.setld("id,r);o.setName("test);client.insert("SAVEBLOG,o);/更新o.setRating(10);Client.UpdateCUPDATEBLOG",o);/删除client.delete("REMOVEBLOG,"id");/查询Mapparams=newHashMapO;params.put(size,5);Listl=client.queryForList("GETMOSTPOPULARBLOG'params,0,5);iBatis应用中的多数据库支持在iBatis应用中,开发者仍需自己编写详细的SQL语句,iBatis只是隐蔽和简化了JDBC的相关调用。实际开发中,我们不免需要就SQL语句针对各种特定的数据库进行特别优化,以期猎取更好的执行性能,随之而来的一个问题是,如何应对新的数据库平台支持的需求。一般的做法是,修改SQL映射文件,供应一些新的针对新数据库平台的SQL语句版本,然后修改程序代码,添加相应调用。连续上面的例子。上面的例子中,对于SQL语句Getmostpopularblog的定义,我们使用了db2特有的sql方言“fetchfirstnROWS0NLY,对于这样的程序,假如盼望增加对MYSQL的支持,依据一般的做法,需要:1 .修改Sqlmarxml,增力口语句定义"getmostpopularblog_mysql”。清单5.增加语句定义select*fromblogsorderbyratingdescfetchfirst$size$rowsonlyselect*fromblogsorderbyratingdesclimit0,$size$2 .搜寻程序代码,在每一个调用iBatis“GETMOSTPOPULARBLOG”的地方,增加检测MYSQL数据库引擎的代码,并添加对“GETMOSTPOPULARBLOG_MYSQL”的iBatis调用。清单6.增加检测数据库引擎的代码SqIMapClientclient=/查询Mapparams=newHashMapO;params.put(size,5);List1=null;Connectionconn=client.getCurrentConnection();StringprodName=conn.getMetaData().getDatabaseProductName().toLowerCase();if(prodName.indexOf("mysql")>-1)(/MicrosoftSQLServer1=client.queryForListCETMOSTPOPULARBLOG-MYSQL",params);)else1=client.queryForList(',GETMOSTPOPULARBLOG",params);每增加一个新的数据库支持,增加了一些新的针对新数据库平台的SQL语句版本,我们就不得不搜寻源代码,找出全部受到影响的iBatis调用,修改并增加针对新数据库的特别调用。代码维护时,每次涉及使用数据库方言的SQL语句,我们也都必需记住当心谨慎地处理全部相关的数据库特化调用。这样的工作乏味且简洁出错。本文,我们试图在分析iBatis源码的基础上,通过适当扩展iBatis,供应一个高效便利的解决方案。扩展SqlMapConfigParser在iBatis应用中,SqlMapConfigParser负责解析iBatis配置文件,加载全部的SQL映射文件,生成SqIM叩Cliem实例,这是长久化调用的入口。SqIM叩COnfigParSer的实现并不简单。成员函数ParSer将传入的配置文件XML输入流交给一个XML解析器。XML解析器解析XML输入,并针对每一个XMLFragmem调用合适的处理器处理。全部的处理器都在SqlMapConfigParser类实例初始化时预先被注册到XML解析器上,其中,对于iBatis配置中的SQL映射声明,只是简洁地调用类SqIM叩ParSer中的parser方法,解析并加载相应的SQL映射定义文件。清单7.SqlMapConfigParser实现publicclassSqIMapConfigParser/XML解析器protectedfinalNodeletParserparser=newNodeletParserO;publicSqlMapConfigParserO/注册XML处理器addSqlMapNodelets();/more(publicSqIMapClientparse(Readerreader)/调用XML解析器解析传入的配置文件XML输入流parser,parse(reader);returnvars.client;1protectedvoidaddSqlMapNodelets()/XML处理器,处理XPalhSqIMaPConfigsqlM叩”,即SQL映射声明parser.addNodelet("sqlMapConfigsqlMap'newNodelet()publicvoidprocess(Nodenode)throwsException(Propertiesattributes=NodeletUtils.parseAttributes(node);Stringresource=attributes.getProperty(,resource");Readerreader=Resources.getResourceAsReader(resource);newSqlMapParser(vars).parse(reader);/调用SqlMapParseEparser方法/解析并加载SQL映射文件);我们继承iBatis原有的配置文件解析器实现SqlM叩COnfigParser,重写其中对SQL映射声明的处理。首先,我们重写SqIMapConfigParser的成员函数addSq)MapNodelets»对于从XML解析器传入的SQL映射声明节点,我们并不马上进行解析处理,而只是将它们纪录下来。清单8.重写addSqlMapNodclcts方法publicclassSqlMapConfigParserExextendsSq1MapConfigParser(ListSqlMapNodeList=newArrayList();protectedvoidaddSqlMapNodelets()/XML处理器,处理XPath:"/SqIMaPCOnfigsqlMap”,即SQL映射声明parser.addNodelet("sqlMapConfigsqlMap",newNodelet()publicvoidprocess(Nodenode)throwsExceptionsqlMapNodeList.addNode(node););这些SQL映射声明被放到最终处理,此时SqlMapClient实例已经基本构造完毕,至少,我们可以平安地调用它的相关方法,打开数据库连接,查询数据库引擎相关信息。对于每个SQL映射声明,SqIMapConfigParSerEX调用其成员函数方法handleSqlMapNode进行相应的SQL映射文件解析和加载处理,数据库引擎支持的SQL方言版本信息作为参数被一并传入。清单9.重写parse方法publicinterfaceDialectMapping(publicStringgetDialect(StringproductName);/返回数据库平台支持的SQL方言信息)publicclassSqlMapConfigParserExextendsSqlMapConfigParser(ListSqlMapNodeList=newArrayList();DiaIectMappingdialectMapping=publicSqIMapClientparse(Readerreader)super,parse(reader);StringSqlDialect=null;SqIMapCIientclient=vars.client;Connectionconn=client.getDataSource().getConnection();DatabaseMetaDatadbMetaData=conn.getMetaData();StringproductName=dbMetaData.getDatabaseProductName();SqlDialect=dialectMapp

    注意事项

    本文(扩展 iBatis 以透明支持多种数据库.docx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开