一些ibatis使用建议.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一些ibatis使用建议

一些ibatis的使用建议 类继承关系在ibatis中的配置 SIMS系统中有很多领域都是有继承关系的,比如Service类和 SmsService、WapService子类。对应在数据表结构中有Service主表和Service_sms、Service_wap子表,主表通过sp_type_id字段来判断一条数据对应的子表是哪个,同时通过serv_id来关联Service主表和子表。 对应这种的常见的继承关系和数据库表结构,考虑下通过serv_id来获取对应的业务线Service这种场景中应该如何通过ibatis来配置,从而达到返回一个准确的Service子类的对象的目的。 先来看看 SIMS系统中目前的实现方式(简化的类图)。 调用过程的序列图 这个种实现方式的缺点是 通过BeanLocator来获取dao,使得serviceBiz对spring产生了依赖,脱离了spring环境无法进行单元测试。 serviceBiz必须要传入一个spTypeId才能取到对应的Dao.不够灵活。 下面来看看直接通过ibatis 来配置这种继承关系 首先需要配置ResultMap(省略了一些非关键性的属性)。 !-- 业务基本信息 -- resultMap id=service_basic_result class=service result property=served” column=serv_id/ result property=spId column=sp_id/ result property=companyId column=company_id/ discriminator column=sp_type_id javaType=int subMap value=2 resultMap=smsService_detail_result/ subMap value=3 resultMap=wapService_detail_result/ /discriminator /resultMap 注意到discriminator这个节点(这个节点很关键) 它表示的是通过sp_type_id这个字段来区分应该使用子类。 如果这个字段的值是2,则使用smsService_detail_result这个subMap. 如果这个字段的值是3,则使用wapService_detail_result这个subMap. 下面是这个smsService_detail_result的resultMap的配置(省略很多属性) resultMap id=smsService_detail_result class=smsService extends=service_detail_result groupBy=servId result property=region column=region/ result property=userGroup column=user_group/ /resultMap 这个resultMap使用了extends=service_detail_result来重用service_basic_result的属性。 在来看看select 语句的配置 select id=find_service_detail resultMap=service_detail_result parameterClass=service fetchSize=2000 select s.*, sp.sp_type_id, sp.sims_id sp_sims_id, sp.sp_code, _mode, c.short_name, c.value_added_no, pany_code from isEqual property=sp.spTypeId prepend= compareValue=2 include refid=lifecycle_sms_serv__sql/ s /isEqual isEqual property=sp.spTypeId prepend= compareValue=3 include refid=lifecycle_wap_serv__sql/ s /isEqual /select 这里通过判断传入参数的spTypeId来使用哪个sql,比如spTypeId是2, 就会使用 lifecycle_sms_serv__sql,其配置如下(实际上就是主表和子表关联在一起了) sql id=lifecycle_sms_serv__sql select include refid=lif

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档