ibatis高级特性.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iBATIS高级特性 1、主要内容 关联对象 事务 延迟加载 缓存 动态标签 读写CLOB和BLOB字段 与spring的整合 2、关联对象 我们的大部分员工习惯了Hibernate的关联对象查询、级联删除、级联保存等特性,那么iBATIS是否提供同样的功能呢?这是大部分人会关心的内容。 答案也许是另人失望的。iBATIS可以关联查询,却没有提供级联保存和级联删除的特性。 下面我们介绍如何处理关联对象之间的查询、保存及删除问题。 2.1 关联查询 iBatis为我们提供了两种方式关联查询,第一种N+1次查询,第二种新支持的查询方式。两种方式需要根据具体的应用环境,作出合适的选择。前一种由于多了一次和数据库的读取操作,所以读取速度慢了些,但是可以使用延迟加载减少内存的消耗。而后一种方式多了些内存消耗,但是读取速度要快了。 定义一个需求:我们在查询订单的同时希望查询出其关联的订单项。 2.2.1 采用N+1次查询 首先看看我们的SQL Mapped配置文件如何配置的: 我们可以看到,RESULT的select属性指向一个新的查询语句。 说明:这个很好的解决了关联查询的问题,而且如果我们配置了全局的延迟加载,当真正用到订单项的时候,iBatis才为我们做查询的动作。 但是这却带来了另外一个问题,N+1次查询的问题。也就是多了一次数据库的读操作,有一定的性能损失。 2.2.2 新查询方式 首先看看我们的SQL Mapped配置文件如何配置的: 我们可以看到,RESULT的resultMap属性指向一个resultMap标签定义。 说明:与前面N+1次查询方式比较,由于只读取数据库一次,的确读取速度更快了,但是由于存在更多的内存消耗(N+1方式可以通过延迟加载来减少内存的消耗),所以我们该根据具体的应用情况而选择合适的方式。 2.2 级联保存 在Hibernate中,我们可以使用级联保存,而iBATIS并没有提供该功能特性,此时我们需要自己保存关联的对象数据。 定义一个需求:在保存订单的时候,希望一起保存其关联的订单项。 其DAO层可以定义如下两个方法分别保存订单和关联的订单项: BMO层可以作如下调用: 这里涉及到的事务等后面讲解事务的时候再说明如何实现。 2.3 级联删除 同样iBatis未提供级连删除的特性,我们要删除连关联表一起删除,也需要自己实现,其方式和保存类似,第一次删除关联的子表如订单项,再删除其主表如订单。 ? 3、事务 3.1自动事务 所谓自己事务,就是说Ibatis API单个方法自动划分为一个事务,不需要显示的开始、提交、结束。 3.2局部事务 其主要针对一种应用程序、一个资源、且一次只能处理一个事务。如图: 其配置如下: 实现方式: 说明:在Spring已经使用AOP申明式事务,所以像上面的配置文件及编码式事务使用到的可能性不大。在蓝本工程的bss-BluePrint-spring-db.xml其Spring配置如下: 只要SMOImpl匹配的类,其insert*、update*、add*、del*将自动使用事务。 3.3全局事务 全局事务定义了一个更大的事务范围,它可以夸数据库、消息队列、甚至包含其它应用程序。下图展示了一个全局的事务系统: 下图展示一个全局事务的配置方式: 接口和iBATIS的局部事务相同。这样当需要从局部事务切换到全局事务的时候会很方方便,只要更改配置文件,不需要更改接口代码了。 4、延迟加载 配置方式如下图: 该属性默认值为true,若该属性值为true,当采用N+1次查询的时候,iBatis会在需要关联数据的时候才开始执行查询。 5、缓存 6、动态标签 主要分为五类动态标签: 6.1 dynamic标签 Dynamic可以使用的属性如下: 属性 功能 Prepend(可选) 该值作为前缀添加到标签的结果内容提前。但是当标签的结果内容体为空的时候,prpend值将不其作用。 Open(可选) 该值作为前缀添加到标签的结果内容提前。如果结果内容体为空的时候,open值将不被附加到其前面。Open值将在prepend属性值被添加到前缀之前先被添加前缀。例如假设prepend=”when”,而open=”(”,则最终得到的组合是”when (“。 Close(可选) 该值作为后缀添加到标签的结果内容提后。如果标签的结果内容体为空的时候,close值将不起作用。 使用示例如下: 6.2 二元标签 二元标签的属性如下: 属性 功能 Property(必选) 参数对象用于同compareProperty或compareValye作比较的特性 Prepend(可选) 该值作为前缀添加到标签的结果内容提前。但是当标签的结果内容体为空的时候,p

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档