[工学]ibatis-Training.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]ibatis-Training

在 运 行 上 面 的 例 子 时 ,我 们 可 以 发 现 ,在 我 们 执 行 sqlMap.queryForList(User.getUsers, ) 时,实际上ibatis只向数据库发送了一条select id, name, sex from t_user SQL。而用于获取Address记录的SQL,只有在我们真正访问address对象时,才开始执行。这也就是所谓的延迟加载(Lazy Loading)机制。即当真正需要数据的时候,才加载数据。延迟加载机制能为我们的系统性能带来极大的提升。试想,如果我们只需要获取用户名称和性别数据,在没有延迟加载特性的情况下,ibatis会一次将所有数据都从数据库取回,包括用户信息及其相关的地址数据,而此时,关于地址数据的读取操作没有意义,也就是说,我们白白在地址数据的查询读取上浪费了大量的系统资源。延迟加载为我们妥善的处理了性能与编码上的平衡(如果没有延迟加载,我们为了避免无谓的性能开销,只能专门为此再增加一个不读取地址信息的用户记录检索模块,无疑增加了编码上的工作量)。 回忆之前“ibatis配置”中的内容: settings ⑴ …… enhancementEnabled=true lazyLoadingEnabled=true ……/ Settings 节点有两个与延迟加载相关的属性lazyLoadingEnabled 和enhancementEnabled,其中lazyLoadingEnabled设定了系统是否使用延迟加载机制,enhancementEnabled设定是否启用字节码强化机制(通过字节码强化机制可以为Lazy Loading带来性能方面的改进。为了使用延迟加载所带来的性能优势,这两项都建议设为true。 2.延迟加载 无填写任何信息:Select * from t_user; 只填写姓名:Select * from t_user where name like ‘%Erica%’ ; 只填写地址:Select * from t_user where address like ‘%Beijing%”; 同时填写姓名和地址:Select * from t_user where name like ‘%Erica%’ and address like ‘%Beijing%” 传统的的做法无非是通过if-else语句对输入进行判断,考虑到这个问题ibatis引入了动态映射机制。看下面例子: 3.动态映射 select id=getUsers“ parameterClass=user“ resultMap=get-user-result select id, name, sex from t_user dynamic prepend=WHERE isNotEmpty prepend=“AND” property=“name” (1) (name like #name#) (2) /isNotEmpty isNotEmpty prepend=AND property=address (address like #address#) /isNotEmpty /dynamic /select 通过dynamic 节点,我们定义了一个动态的WHERE 子句。此WHERE 子句中将可能包含两个针对name 和address 字段的判断条件。 (1)节点的语义是如果“name”属性非空,则ibatis会根据配置文件中设定的SQL动态生成规则(2),创建相应的SQL语句。 例子: user.setName(request.getParameter(name)); user.setAddress(request.getParameter(address)); sqlMap.queryForList(User.getUsers, user); 另外还可以嵌套判定节点 Dynamic节点和判定节点中的prepend属性,指明了本节点中定义的SQL子句在主体SQL中出现时的前缀。 假设“name”属性的值为“Erica”, “address”属性的值为“Beijing”,则会生成类似下面的SQL子句: WHERE (name like ‘Beijing’) AND (address like ‘Beijing’) 判定节点并非仅限于isNotEmpty,ibatis中提供

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档