现在我想把一个数据库表里的数据取出来。
数据库表TSALE的定义如下:
字段:id, depart, prop_code, product_id
字段id是主键,自动递增。
depart是部门id,prop_code是产品编码,product_id是具体一个产品的id,一种产品编码(prop_code)对应有很多产品,也就是对应很多product_id。现在我想将depart, prop_code, product_id取出,
将他们用对象关联起来。
depart存放在 DepartBean 类里,
SELECT DEPART FROM TSALE GROUP BY DEPART,
取出这个表里所有的DEPART。DepartBean 里还有一个List<PropBean> propList成员变量。存放的就是 用 SELECT PROP_CODE FROM TSALE WHERE DEPART = #depart# GROUP BY PROP_CODE 。
取出一个部门有的产品种类。PropBean 里有一个List<String> productList成员变量。
存放product_id。
SELECT PRODUCT_ID FROM TSALE WHERE PROP_CODE = #propCode# AND DEPART = #depart#
现在我想用resultMap定义一个复杂类型,直接将这表里的关系都取出来。请大家看一下,最好能按照现在的内容写代码。谢谢了。
数据库表TSALE的定义如下:
字段:id, depart, prop_code, product_id
字段id是主键,自动递增。
depart是部门id,prop_code是产品编码,product_id是具体一个产品的id,一种产品编码(prop_code)对应有很多产品,也就是对应很多product_id。现在我想将depart, prop_code, product_id取出,
将他们用对象关联起来。
depart存放在 DepartBean 类里,
SELECT DEPART FROM TSALE GROUP BY DEPART,
取出这个表里所有的DEPART。DepartBean 里还有一个List<PropBean> propList成员变量。存放的就是 用 SELECT PROP_CODE FROM TSALE WHERE DEPART = #depart# GROUP BY PROP_CODE 。
取出一个部门有的产品种类。PropBean 里有一个List<String> productList成员变量。
存放product_id。
SELECT PRODUCT_ID FROM TSALE WHERE PROP_CODE = #propCode# AND DEPART = #depart#
现在我想用resultMap定义一个复杂类型,直接将这表里的关系都取出来。请大家看一下,最好能按照现在的内容写代码。谢谢了。
<resultMap id="CongenerUserResult" class="user">
<result property="id" column="USER_ID" jdbcType="NUMBER" nullValue="0"/>
<result property="name" column="USER_NAME" nullValue=""/>
<result property="roles" column="USER_ID" select="user.selectedRoles" />
</resultMap>
这种方式用过吗?查询user的时候用user_id关联到角色表,将该用户的所有角色查询出来。
<resultMap id="get-saleInfo-header" class="com.linkage.ess.ejb.ipm.ipm.po.SaleInfoHeader">
<result property="departId" column="DEPART_ID"/>
<result property="bodyList" column="DEPART_ID" select="getBodyByDepartId" />
</resultMap>
<select id="SI_selSaleInfo" resultClass="get-saleInfo-header">
<![CDATA[
SELECT
DEPART_ID
FROM
TF_R_TERMINAL_SALETRADE_DTL
GROUP BY
DEPART_ID
]]>
</select>
<resultMap id="get-saleInfo-body" class="com.linkage.ess.ejb.ipm.ipm.po.SaleInfoBody">
<result property="propId" column="PROP_ID"/>
</resultMap>
<statement id="getBodyByDepartId" parameterClass="String" resultMap="get-saleInfo-body">
<![CDATA[
SELECT
PROP_ID
FROM
TF_R_TERMINAL_SALETRADE_DTL
WHERE
DEPART_ID = #DEPART_ID#
GROUP BY
PROP_ID
]]>
</statement> 这样用了,但有异常。
我现在想知道怎么设置这些关系。
用resultMap=’get-saleInfo-header‘<statement id="getBodyByDepartId" parameterClass="String" resultMap="get-saleInfo-body">
把statement改成select
Exception in thread "main" java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error. Could not initialize class. Cause: java.lang.ClassNotFoundException: get-saleInfo-header
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:49)
at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
at com.linkage.base.ibatis.IbatisHelper.LoadResource(IbatisHelper.java:48)
at com.linkage.base.dao.BaseDao.LoadResource(BaseDao.java:18)
at com.linkage.ess.ejb.ipm.base.dao.ProvinceDao.LoadResource(ProvinceDao.java:10)
at com.linkage.ess.ejb.ipm.ipm.service.SI_SaleInfoSrv.<init>(SI_SaleInfoSrv.java:27)
at com.linkage.ess.ejb.ipm.ipm.service.SI_SaleInfoSrv.main(SI_SaleInfoSrv.java:45)
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error. Could not initialize class. Cause: java.lang.ClassNotFoundException: get-saleInfo-header
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:46)
... 6 more
Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error. Could not initialize class. Cause: java.lang.ClassNotFoundException: get-saleInfo-header
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
... 7 more
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error. Could not initialize class. Cause: java.lang.ClassNotFoundException: get-saleInfo-header
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser.parse(SqlMapParser.java:40)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$10.process(SqlMapConfigParser.java:270)
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
... 11 more
Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException: Error. Could not initialize class. Cause: java.lang.ClassNotFoundException: get-saleInfo-header
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
... 14 more
Caused by: com.ibatis.sqlmap.client.SqlMapException: Error. Could not initialize class. Cause: java.lang.ClassNotFoundException: get-saleInfo-header
at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.resolveClass(SqlStatementParser.java:89)
at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.parseGeneralStatement(SqlStatementParser.java:67)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser$21.process(SqlMapParser.java:362)
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
... 18 more
Caused by: java.lang.ClassNotFoundException: get-saleInfo-header
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.ibatis.common.resources.Resources.classForName(Resources.java:267)
at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.resolveClass(SqlStatementParser.java:84)
... 21 more帮搞一下,急。
应该是我在8楼分析的,你用的是resultClass来指向一个ResultMap,当然不对,应该用resultMap
还有就是 resultMap 要写在引用到它的地方的前面,也就是向上引用。
谢谢各位。
今天一早问题就解决了。