ibatis 联表查询结果集取值问题

igyhi 2008-11-25 04:07:30
table:
t1:person
id name age
1 kaka 24
2 lala 26

t2:car
id uid brand
1 1 bmw
2 1 benz
3 2 honda

==================

bean:CarDAO
int id
int uid
String name
String brand

==================

sqlmap:
<select id="CarDAO.getInfo" parameterClass="String" resultClass="CarDAO">
<![CDATA[
select car.id,uid,name,brand
from person,car
where person.id=car.uid and $value$
]]>
</select>

===================

运行的查询是: select car.id,uid,name,brand from person,car where person.id=car.uid and car.id=2
把这个ibatis生成的查询直接用数据库sql查看下,结果是
2 1 kaka benz
结果取得了kaka这个联表数据

但是,用这个CarDAO获得的数据
dao.getName()
没有name属性值,为"",是什么原因?
...全文
223 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
igyhi 2008-12-03
  • 打赏
  • 举报
回复
这就是我想知道的.谢谢了
pk69688 2008-12-03
  • 打赏
  • 举报
回复
如果我用resultClass作为返回结果集,当遇到bean里的字段和数据库里的对应字段名字不一样时,你可以在SQL语句中用AS把哪个字段名字命名成与BEAN里面一样的名字
igyhi 2008-12-03
  • 打赏
  • 举报
回复
找到问题的地方了

Bean:
private String xwmlmc="";


<resultMap id="MyDAO.SelectMap" class="MyDAO">
<result property="xwid" column="xwid"/>
<result property="xwmlmc" column="lmmc"/>
......
</resultMap>



<select id="MyDAO.getInfo" parameterClass="String" resultClass="MyDAO"> //不正确的,不能产生lmmc输出

<select id="MyDAO.getInfo" parameterClass="String" resultMap="MyDAO.SelectMap"> //正确的能产生lmmc输出的

使用resultMap作为返回结果集,会通过resultMap的设定,把数据库中的字段lmmc与bean里的对应属性xwmlmc联系上.
而使用resultClass作为返回结果集,返回结果会直接使用bean来匹配数据,但是bean里xwmlmc恰恰与数据库的对应字段不是一个名字,所以找不到了.
不知道是不是这个问题?

那么,如果我用resultClass作为返回结果集,当遇到bean里的字段和数据库里的对应字段名字不一样时,怎么才能匹配上?
igyhi 2008-12-03
  • 打赏
  • 举报
回复
re:hdhai9451

我哪个是简略记述,哪个是bean,get/set方法都有


DEBUG - {conn-100015} Connection
DEBUG - {conn-100015} Preparing Statement: select xwid,lmmc,xwdjl from table_A,table_B where 1=1 and table_A.xwmlid=table_B.lmid and xwid=11
DEBUG - {pstm-100016} Executing Statement: select xwid,lmmc,xwdjl from table_A,table_B where 1=1 and table_A.xwmlid=table_B.lmid and xwid=11
DEBUG - {pstm-100016} Parameters: []
DEBUG - {pstm-100016} Types: []
DEBUG - {rset-100017} ResultSet
DEBUG - {rset-100017} Header: [xwid, xwdjl]
DEBUG - {rset-100017} Result: [11,10]


这个是log记录
sql查询语句里已经有lmmc这个字段的获取,但是Result里却没有出现对应的lmmc属性和值.
android2008 2008-11-26
  • 打赏
  • 举报
回复
mark
Andy__Huang 2008-11-26
  • 打赏
  • 举报
回复
bean:CarDAO
int id
int uid
String name
String brand
---------------------------
这里边的代码,你应该帖出来更多一些;我记得在里面应该还有
public setID{

}
public getID{

}
public setUid{

}
public getUid{

}
....................

igyhi 2008-11-26
  • 打赏
  • 举报
回复
d
igyhi 2008-11-25
  • 打赏
  • 举报
回复
或者用2个bean的方式
CarDAO,PersonDAO
CarDAO包含PersonDAO的一个对象

在写个resultMap,然后在里面用个关联
具体方法不明白,大概意思.

有熟悉的人能给写个例子么?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧