现在有两张表。
T_Main 表,ItemNo字段为主键、MsgDate、Desc等说明字段。
T_Dtl表是T_Main表的字表。
T_Dtl表的主键为ItemNo和Product_code,
这个Product_code是一个产品的编号,标志着一个具体产品。
另外T_Dtl表还有Product_Type字段,Product_Price字段,Product_Type是产品的种类,Product_Price是产品的价格。
一种产品对应一个价格。我现在想这样做。一个MainPo类,包括ItemNo、MsgDate、Desc等成员变量,
另外加一个List<DtlPo> dtls成员变量,这个成员变量标识主表与子表产品种类的一对多关系。DtlPo类包括Price、Type成员变量,还包括List<String> codes成员变量,
标识一个ItemNo,一种产品(Product_Type)包括哪些具体的Product_code。我现在做的映射如下:
<!-- MainPo对象定义 -->
<resultMap id="Main_Po" class="MainPo">
<result property="ItemNo" column="ITEM_NO"/>
<result property="MsgDate" column="MSG_DATE"/>
<result property="Desc" column="DESC"/>
<result property="dtls" column="ITEM_NO" select="select_dtls" />
</resultMap> <!-- DtlPo对象定义 -->
<resultMap id="Dtl_Po" class="DtlPo">
<result property="Type" column="PRODUCT_TYPE"/>
<result property="Price" column="PRODUCT_PRICE"/>
<result property="codes" column="PRODUCT_TYPE" select="select_codes" />
</resultMap> <!--第一步 供外部调用,取得主表与子表这种1对多的关系 -->
<select id="select_all" resultMap="Main_Po">
<![CDATA[
SELECT
ITEM_NO,
MSG_DATE,
DESC
FROM
T_Main
WHERE
TRUNC(UPDATE_TIME) = TRUNC(SYSDATE) --取得当天插入的数据
]]>
</select>
<!-- 第二步 根据主表的ItemNo,取得子表里,有几种Product_Type -->
<statement id="select_dtls" parameterClass="String" resultMap="Dtl_Po">
<![CDATA[
SELECT
PRODUCT_TYPE,
PRODUCT_PRICE
FROM
T_Dtl
WHERE
ITEM_NO = #ITEM_NO# --主表的ItemNo
GROUP BY PRODUCT_TYPE,PRODUCT_PRICE
]]>
</statement>
<!-- 第三步 取得这个ItemNo下,每种产品有具体哪些产品编码 -->
<statement id="select_codes" parameterClass="String" resultClass="String">
<![CDATA[
SELECT
PRODUCT_CODE
FROM
T_Dtl
WHERE
PRODUCT_TYPE = #PRODUCT_TYPE#
]]>
</statement>
第一步、第二步连起来是对的,
这种ItemNo和Type的一对多关系可以正确的取得。但是第三步出现了问题。PRODUCT_CODE,要通过ItemNo和Product_type共同确定。
但现在是 只是根据Product_type取得这个T_Dtl表中所有的Product_code。请问要怎样做,才能做到这样的约束呢?
我的想法是在第三步时,可以传入两个参数,
一个是在第二步时候用到的ItemNo,还有一个就是Product_Type。
请问我该怎么写才能做到呢?
T_Main 表,ItemNo字段为主键、MsgDate、Desc等说明字段。
T_Dtl表是T_Main表的字表。
T_Dtl表的主键为ItemNo和Product_code,
这个Product_code是一个产品的编号,标志着一个具体产品。
另外T_Dtl表还有Product_Type字段,Product_Price字段,Product_Type是产品的种类,Product_Price是产品的价格。
一种产品对应一个价格。我现在想这样做。一个MainPo类,包括ItemNo、MsgDate、Desc等成员变量,
另外加一个List<DtlPo> dtls成员变量,这个成员变量标识主表与子表产品种类的一对多关系。DtlPo类包括Price、Type成员变量,还包括List<String> codes成员变量,
标识一个ItemNo,一种产品(Product_Type)包括哪些具体的Product_code。我现在做的映射如下:
<!-- MainPo对象定义 -->
<resultMap id="Main_Po" class="MainPo">
<result property="ItemNo" column="ITEM_NO"/>
<result property="MsgDate" column="MSG_DATE"/>
<result property="Desc" column="DESC"/>
<result property="dtls" column="ITEM_NO" select="select_dtls" />
</resultMap> <!-- DtlPo对象定义 -->
<resultMap id="Dtl_Po" class="DtlPo">
<result property="Type" column="PRODUCT_TYPE"/>
<result property="Price" column="PRODUCT_PRICE"/>
<result property="codes" column="PRODUCT_TYPE" select="select_codes" />
</resultMap> <!--第一步 供外部调用,取得主表与子表这种1对多的关系 -->
<select id="select_all" resultMap="Main_Po">
<![CDATA[
SELECT
ITEM_NO,
MSG_DATE,
DESC
FROM
T_Main
WHERE
TRUNC(UPDATE_TIME) = TRUNC(SYSDATE) --取得当天插入的数据
]]>
</select>
<!-- 第二步 根据主表的ItemNo,取得子表里,有几种Product_Type -->
<statement id="select_dtls" parameterClass="String" resultMap="Dtl_Po">
<![CDATA[
SELECT
PRODUCT_TYPE,
PRODUCT_PRICE
FROM
T_Dtl
WHERE
ITEM_NO = #ITEM_NO# --主表的ItemNo
GROUP BY PRODUCT_TYPE,PRODUCT_PRICE
]]>
</statement>
<!-- 第三步 取得这个ItemNo下,每种产品有具体哪些产品编码 -->
<statement id="select_codes" parameterClass="String" resultClass="String">
<![CDATA[
SELECT
PRODUCT_CODE
FROM
T_Dtl
WHERE
PRODUCT_TYPE = #PRODUCT_TYPE#
]]>
</statement>
第一步、第二步连起来是对的,
这种ItemNo和Type的一对多关系可以正确的取得。但是第三步出现了问题。PRODUCT_CODE,要通过ItemNo和Product_type共同确定。
但现在是 只是根据Product_type取得这个T_Dtl表中所有的Product_code。请问要怎样做,才能做到这样的约束呢?
我的想法是在第三步时,可以传入两个参数,
一个是在第二步时候用到的ItemNo,还有一个就是Product_Type。
请问我该怎么写才能做到呢?
解决方案 »
- STRUTS2的属性驱动
- 小小问题,给我带来大麻烦,给高手指点~~~
- 高分求教一个关于EJB3的问题!
- 急!struts中 大小写问题???
- 求数据库物理设计和用户角色设计文档
- 用c3p0方式获取的数据源,创建JDBCTmeplate,获取不到连接
- (来者有分)假如咱有了钱?会干点什么呢?想过吗?就在面前了请支持
- 真诚的求教相关问题 谢谢大家捧场
- system.out.pritnln()用得太多了,weblogic窗口中显示不了那么多,前面的都看不到了,怎么办?
- 求问Java老司机,这段代码的参数传递这是怎么样的,最好能给个内存图
- Myeclipse快捷键
- 谈一谈hibernate对SQL支持的BUG
<resultMap id="Main_Po" class="MainPo">
<result property="ItemNo" column="ITEM_NO"/>
<result property="MsgDate" column="MSG_DATE"/>
<result property="Desc" column="DESC"/>
<result property="dtls" column="ITEM_NO" select="select_dtls" />
</resultMap><!-- DtlPo对象定义 -->
<resultMap id="Dtl_Po" class="DtlPo">
<result property="ItemNo" cloumn="ITEM_NO"/>
<result property="Type" column="PRODUCT_TYPE"/>
<result property="Price" column="PRODUCT_PRICE"/>
<result property="codes" column="Dtl_Po" select="select_codes" />
</resultMap><!--第一步 供外部调用,取得主表与子表这种1对多的关系 -->
<select id="select_all" resultMap="Main_Po">
<![CDATA[
SELECT
ITEM_NO,
MSG_DATE,
DESC
FROM
T_Main
WHERE
TRUNC(UPDATE_TIME) = TRUNC(SYSDATE) --取得当天插入的数据
]]>
</select>
<!-- 第二步 根据主表的ItemNo,取得子表里,有几种Product_Type -->
<statement id="select_dtls" parameterClass="String" resultMap="Dtl_Po">
<![CDATA[
SELECT
PRODUCT_TYPE,
PRODUCT_PRICE,
ITEM_NO
FROM
T_Dtl
WHERE
ITEM_NO = #ITEM_NO# --主表的ItemNo
GROUP BY PRODUCT_TYPE,PRODUCT_PRICE
]]>
</statement>
<!-- 第三步 取得这个ItemNo下,每种产品有具体哪些产品编码 -->
<statement id="select_codes" parameterClass="DtlPo" resultClass="String">
<![CDATA[
SELECT
PRODUCT_CODE
FROM
T_Dtl
WHERE
ITEM_NO = #ITEM_NO# and
PRODUCT_TYPE = #PRODUCT_TYPE#
]]>
</statement>
LZ.我也是ibatis新手。你试试看吧
参考:
http://www.router.net.cn/Article/23912.html