`
sunbin
  • 浏览: 341405 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ibatis 子对象查询

 
阅读更多

方法一:

主表:MASTER

字段:ORDER_ID  --主键

         RELATE_ID --申请单位

         STOCK_ADDRESS --仓库地址

         TERMINAL_VENDER --供应商

         PROVINCE_ID --省分ID

         STATE --状态

 

子表:DETAIL

字段:ORDER_ID   --与主表ORDER_ID关联

         PROPERTY_CODE  --属性编码

         SALE_PRICE  --价格

         TERMINAL_VENDER --供应商 与主表TERMINAL_VENDER关联

         PROVINCE_ID --省分ID 与主表PROVINCE_ID关联

 

主键为 ORDER_ID + PROPERTY_CODE

 

要求,取得 主表:MASTER 中STATE为1的记录,并映射成易于操作的java对象。

并关联子表,ORDER_ID、TERMINAL_VENDER、PROVINCE_ID作为查询子表的条件。

将查询出的子表数据映射成List<Object> ,作为 主表映射成对象的一个 成员变量。

以便后续操作。

 

定义java对象 Master,对应主表数据:

 

  1. 1package com.test.ibatis.po;  
  2.  2 
  3.  3import java.util.List;  
  4.  4 
  5.  5/** *//**  
  6.  6 * 主表对应数据  
  7.  7 */ 
  8.  8public class Master implements java.io.Serializable {  
  9.  9    private static final long serialVersionUID = 1L;  
  10. 10    /** *//** ID */ 
  11. 11    private String            channelsId       = null;  
  12. 12    /** *//** 地址 */ 
  13. 13    private String            deliveryLoc      = null;  
  14. 14 
  15. 15    /** *//** 对应子表数据 */ 
  16. 16    private List<Detail> details          = null;  
  17. 17 
  18. 18    public String getChannelsId() {  
  19. 19        return channelsId;  
  20. 20    }  
  21. 21 
  22. 22    public void setChannelsId(String channelsId) {  
  23. 23        this.channelsId = channelsId;  
  24. 24    }  
  25. 25 
  26. 26    public String getDeliveryLoc() {  
  27. 27        if (deliveryLoc == null)  
  28. 28            return "";  
  29. 29        return deliveryLoc;  
  30. 30    }  
  31. 31 
  32. 32    public void setDeliveryLoc(String deliveryLoc) {  
  33. 33        this.deliveryLoc = deliveryLoc;  
  34. 34    }  
  35. 35 
  36. 36    public List<Detail> getDetails() {  
  37. 37        return details;  
  38. 38    }  
  39. 39 
  40. 40    public void setDetails(List<Detail> details) {  
  41. 41        this.details = details;  
  42. 42    }  
  43. 43

定义Detail类,对应子表数据:

 

  1.  1package com.test.ibatis.po;  
  2.  2 
  3.  3import java.text.DecimalFormat;  
  4.  4 
  5.  5public class Detail implements java.io.Serializable {  
  6.  6    private static final long          serialVersionUID = 1L;  
  7.  7 
  8.  8    private static final DecimalFormat df               = new DecimalFormat("###0.00");  
  9.  9    /** *//** 产品编号 */ 
  10. 10    private String                     partNo           = null;  
  11. 11    /** *//** 价格 */ 
  12. 12    private String                     price            = null;  
  13. 13 
  14. 14    public String getPartNo() {  
  15. 15        return partNo;  
  16. 16    }  
  17. 17 
  18. 18    public void setPartNo(String partNo) {  
  19. 19        this.partNo = partNo;  
  20. 20    }  
  21. 21 
  22. 22    public String getPrice() {  
  23. 23        if (price == null)  
  24. 24            return "0";  
  25. 25        return df.format(Double.parseDouble(price) / 1000.0);  
  26. 26    }  
  27. 27 
  28. 28    public void setPrice(String price) {  
  29. 29        this.price = price;  
  30. 30    }  
  31. 31}  
  32.  

sql如下配置:
 

  1.  1<?xml version="1.0" encoding="gbk" ?>  
  2.  2 
  3.  3<!DOCTYPE sqlMap        
  4.  4    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
  5.  5    "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  6.  6<sqlMap namespace="TEST_SQL">  
  7.  7    <typeAlias alias="HashMap" type="java.util.HashMap" />  
  8.  8 
  9.  9    <!-- Master对象定义 -->  
  10. 10    <resultMap id="master" class="com.test.ibatis.po.Master">  
  11. 11        <result property="channelsId" column="ORDER_CHANNEL" />  
  12. 12        <result property="deliveryLoc" column="DELIVER_ADDRESS" />  
  13. 13        <result property="details" column="{province=PROVINCE_CODE,id=ORDER_ID,VENDER=TERMINAL_VENDER}" 
  14. 14            select="select-dtl" />  
  15. 15    </resultMap>  
  16. 16    <!-- Detail对象定义 -->  
  17. 17    <resultMap id="detail" class="com.linkage.ess.ordercreate.po.OrderDetail">  
  18. 18        <result property="partNo" column="PROPERTY_CODE" />  
  19. 19        <result property="price" column="SALE_PRICE" />  
  20. 20    </resultMap>  
  21. 21    <select id="selectData" resultMap="master">  
  22. 22    <!--[CDATA[  
  23. 23        SELECT T.RELATE_ID ORDER_CHANNEL,  
  24. 24               T.STOCK_ADDRESS DELIVER_ADDRESS  
  25. 25         FROM MASTER T  
  26. 26         WHERE T.PROVINCE_ID = #PROVINCE_ID#  
  27. 27         AND T.STATE = '1' 
  28. 28    ]]>  
  29. 29    </select>  
  30. 30    <statement id="select-dtl" resultMap="detail">  
  31. 31    <![CDATA[  
  32. 32        SELECT D.PROPERTY_CODE,  
  33. 33               D.SALE_PRICE,  
  34. 34         FROM DETAIL D  
  35. 35         WHERE D.ORDER_ID = #id#  
  36. 36         AND D.TERMINAL_VENDER = #VENDER#  
  37. 37         AND D.PROVINCE_ID = #province#  
  38. 38    ]]-->  
  39. 39    </statement>  
  40. 40</sqlMap> 

这样所有的工作都OK,

执行

 

List<Master> masters = (List<Master>) sqlMap.queryForList("selectData", param);

// param 为HashMap, put("PROVINCE_ID", "BJ"); 作为查询条件用。

 

 

得到 List<Master>,其中每个Master对象,都会持有 List<Detail>。


 

要点在于

<result property="details" column= "{province=PROVINCE_CODE,id=ORDER_ID,VENDER=TERMINAL_VENDER}"
            select="select-dtl" />

的配置,

即 将主表中的值传到 子查询当中作为查询条件,

这样取得的数据就是 有关系的了。

 

方法二:

ibatis的子对象查询, 填充到List<E> 中

<resultMap id="memberResult" type="member">

<id property="id" column="ID" />

<id property="memberID" column="MEM_ID" />

<id property="userName" column="MEN_NAME" />

<id property="fullName" column="NAME" />

<id property="memberCode" column="MEM_NUM" />

<id property="activateCode" column="ACTIVATE_CODE" />

<id property="cardNo" column="CARD_NO" />

<id property="cardLevel" column="CARD_LEVEL" />

<id property="memberType" column="MEM_TYPE" />

<id property="memberHierarchy" column="MEM_TIER" />

<id property="registerSource" column="ENROLL_CHANNEL" />

<id property="registerDate" column="ENROLL_DATE" />

<id property="remindQuestion" column="QUESTION" />

<id property="remindAnswer" column="ANSWER" />

<id property="status" column="STATUS" />

<id property="email" column="EMAIL" />

<id property="cellPhone" column="PHONE" />

<id property="password" column="PASSWORD" />

<id property="lastUpd" column="LAST_UPD"/>

<id property="newMemberHierarchy" column="NEW_MEM_TIER" />

<id property="identityType" column="IDENTITY_TYPE" />

<id property="identityNo" column="IDENTITY_NO" />

<id property="title" column="TITLE" />

<id property="mcMemberCode" column="MC_MEMBER_CODE" />

<id property="thirdpartyType" column="THIRDPARTY_TYPE" />

    <id property="mCustomerId" column="M_CUSTOMER_ID" />

<collection property="cardList" column="ID" javaType="ArrayList" ofType="memberMemCard"  select="queryCardInfoByMemberInfoId" />

<collection property="memberVerfyList" column="ID" javaType="ArrayList" ofType="memberVerfy"  select="queryVerifyInfoByInfoId" />

</resultMap>

分享到:
评论

相关推荐

    ibatis单个对象的各种操作

    NULL 博文链接:https://abstractforever.iteye.com/blog/632103

    Ibatis数据表对象自动生成器

    Ibatis 数据表对象自动生成器 自动生成针对配置好的每个表的XML文件和VO(DTO)文件

    iBATIS实战

    第10章 iBATIS数据访问对象 173 10.1 隐藏实现细节 173 10.1.1 为何要分离 174 10.1.2 一个简单示例 175 10.2 配置DAO 177 10.2.1 properties元素 177 10.2.2 context元素 178 10.2.3 transactionManager元素 178 ...

    ibatis 开发指南(pdf)

    使用ibatis 提供的ORM 机制,对业务逻辑实现人员而言,面对的是纯粹的Java 对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求...

    SSM整合开发.docx

    SSM整合也叫做SSI (IBatis也就是mybatis的前身), 整合中有容器。 1.第一个容器SpringMVC容器, 管理Controller控制器对象的。 2.第二个容器Spring容器,管理Service,Dao,工具类对象的 我们要做的把使用的对象交给...

    JSP网络编程学习笔记源代码 part2

    第四篇为“数据库访问技术”,主要讲述JDBC技术及JSP和Servlet如何通过JDBC访问数据库,以及如何改进数据库的访问和目前流行的Hibernate、iBATIS及Spring集成访问的支持;第五篇为“标签语言和表达式语言”,主要...

    深入浅出Hibernate.pdf

    本书有丰富的附录部,在附录中讲述了Hibernate常用的映射配置,Hibernate工具、XDoclet模板配置以及Hibernate的益友iBatis用法,还以卡片的形式列出了本书中所用的工具及软件,附录最后一部分是“快速启动代码”,供...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。 C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。 D .可使用存储过程写分页逻辑...

    Spring in Action(第2版)中文版

    15.3.2提炼子流程并使用子状态 15.4集成springwebflow与其他框架 15.4.1jakartsstruts 15.4.2javaserverface 15.5小结 第16章集成其他web框架 16.1协同使用spring和struts 16.1.1向struts注册spring插件 ...

    Spring in Action(第二版 中文高清版).part2

    15.3.2 提炼子流程并使用子状态 15.4 集成Spring Web Flow与其他框架 15.4.1 Jakarts Struts 15.4.2 JavaServer Face 15.5 小结 第16章 集成其他Web框架 16.1 协同使用Spring和Struts 16.1.1 向Struts注册...

    Spring in Action(第二版 中文高清版).part1

    15.3.2 提炼子流程并使用子状态 15.4 集成Spring Web Flow与其他框架 15.4.1 Jakarts Struts 15.4.2 JavaServer Face 15.5 小结 第16章 集成其他Web框架 16.1 协同使用Spring和Struts 16.1.1 向Struts注册...

    Spring-Reference_zh_CN(Spring中文参考手册)

    11.2.7. 执行查询 11.2.8. 更新数据库 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. SingleConnectionDataSource类 11.3.5. ...

    Java面试宝典2010版

    11、iBatis与Hibernate有什么不同? 12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO中如何体现DAO设计模式? 14、spring+Hibernate中委托方案怎么配置? 15、...

    最新Java面试宝典pdf版

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

    Java面试笔试资料大全

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

    spring chm文档

    11.2.7. 执行查询 11.2.8. 更新数据库 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. SingleConnectionDataSource类 11.3.5. ...

    JAVA面试宝典2010

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

    Java面试宝典-经典

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

    java面试题大全(2012版)

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

Global site tag (gtag.js) - Google Analytics