主表: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 ,作为 主表映射成对象的一个 成员变量。
以便后续操作。
定义java对象 Master,对应主表数据:
1
packagecom.test.ibatis.po;23importjava.util.List;45
/** *//**6 * 主表对应数据7*/8
publicclassMasterimplementsjava.io.Serializable{9privatestaticfinallongserialVersionUID=1L;10
/** *//**ID*/11privateString channelsId=null;12
/** *//**地址*/13privateString deliveryLoc=null;1415
/** *//**对应子表数据*/16privateListdetails=null;1718
publicString getChannelsId(){19returnchannelsId;20 }2122
publicvoidsetChannelsId(String channelsId){23this.channelsId=channelsId;24 }2526
publicString getDeliveryLoc(){27if(deliveryLoc==null)28return"";29returndeliveryLoc;30 }3132
publicvoidsetDeliveryLoc(String deliveryLoc){33this.deliveryLoc=deliveryLoc;34 }3536
publicListgetDetails(){37returndetails;38 }3940
publicvoidsetDetails(Listdetails){41this.details=details;42 }43}
定义Detail类,对应子表数据:
packagecom.test.ibatis.po;23importjava.text.DecimalFormat;45
publicclassDetailimplementsjava.io.Serializable{6privatestaticfinallongserialVersionUID=1L;78privatestaticfinalDecimalFormat df=newDecimalFormat("###0.00");9
/** *//**产品编号*/10privateString partNo=null;11
/** *//**价格*/12privateString price=null;1314
publicString getPartNo(){15returnpartNo;16 }1718
publicvoidsetPartNo(String partNo){19this.partNo=partNo;20 }2122
publicString getPrice(){23if(price==null)24return"0";25returndf.format(Double.parseDouble(price)/1000.0);26 }2728
publicvoidsetPrice(String price){29this.price=price;30 }31}
sql如下配置:
23sqlMap4 PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"5 "http://ibatis.apache.org/dtd/sql-map-2.dtd">678910111213 select="select-dtl"/>15161718192021223940
这样所有的工作都OK,
执行
List masters = (List) sqlMap.queryForList("selectData", param);
// param 为HashMap, put("PROVINCE_ID", "BJ"); 作为查询条件用。
得到 List,其中每个Master对象,都会持有 List。
要点在于
select="select-dtl" />
的配置,
即 将主表中的值传到 子查询当中作为查询条件,
这样取得的数据就是 有关系的了。
本文为原创,欢迎转载,转载请注明出处BlogJava。