ibatis问题,困扰我一天了,来者即有分

i5767343 2010-03-31 10:29:37
以下例子:
-------------Book表(相应的model为Book)----------------------------
bookId,
title,
authorId(作者表)
------------------------------------------------------------------
-------------Author表(相应的model为Author)----------------------------
authorId,
authorName
------------------------------------------------------------------
那么我建立Book表的model层的时候,该怎样建立?
第一种:

public class Book{
private int bookId;
private String title;
private authorId;
..相应的get和set
}

第二种:

public class Book{
private int bookId;
private String title;
private Author author(区别在这);
..相应的get和set
}

该用哪种方式定义Book呢
说明一下,我的数据库框架是ibatis,
如果用第一种的话,直接用resultClass就可以,很简单:

<select id="selectBookById" parameterClass="java.lang.Integer" resultClass="Book">
select * from bs_book where bookId=#bookId#
</select>

如果我使用第二种的话,要是查询的话,我得使用resultMap:

<resultMap class="Book" id="BookMap">
<result property="bookId" column="bookId" />
<result property="title" column="title" />
<result property="author" column="authorId" select="selectAuthorById" />
<select id="selectBookById" parameterClass="java.lang.Integer" resultMap="BookMap">
select * from bs_book where bookId=#bookId#
</select>
<select id="selectAuthorById" parameterClass="java.lang.Integer" resultClass="Author">
select * from bs_author where authorId=#authorId#
</select>
</resultMap>

注意下resultMap,它要求model的每个属性都得写一个

<result property="属性名(必须有get和set)" column="列名" />

这是个问题,我简化了模型,实际上我的Book表有将近20个属性,那么写那么多resultMap,是不是很痛苦?
我应该选哪种model,我倾向于第二种,可是谁能给我解决resultMap必须写每个property的问题??
谢谢了
说明一下:不写某个列的property,则该列是查不出来的,我试过的。
...全文
309 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
luozhangwen 2010-04-08
  • 打赏
  • 举报
回复
没用过ibatis...
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 villagehead 的回复:]

首先声明,我觉得2种方法都可以,
properties多就多写己行吧。要不就写个生成工具,也不麻烦。

我觉得还是看许需求来决定实现方法。
如果“只要需要书籍的信息,就需要作者的信息”的话,
就用第2种,这样也一劳永逸。免去了每次取得数据都还要再取一次作者的“麻烦”。

如果“作者信息只是在需要的时候才取得”这样的需求,
我的话还是选择第1种方法,
这样起码节省了处理多余数据在……
[/Quote]

确实到位
wulg10 2010-04-08
  • 打赏
  • 举报
回复
第一种!
yy_dan 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 villagehead 的回复:]
首先声明,我觉得2种方法都可以,
properties多就多写己行吧。要不就写个生成工具,也不麻烦。

我觉得还是看许需求来决定实现方法。
如果“只要需要书籍的信息,就需要作者的信息”的话,
就用第2种,这样也一劳永逸。免去了每次取得数据都还要再取一次作者的“麻烦”。

如果“作者信息只是在需要的时候才取得”这样的需求,
我的话还是选择第1种方法,
这样起码节省了处理多余数据在网……
[/Quote]
顶!!!!
gaoxulaiguo 2010-04-08
  • 打赏
  • 举报
回复
我一般使用17楼的方法
chen_xiangguo 2010-04-05
  • 打赏
  • 举报
回复
0.0
道光2008 2010-04-04
  • 打赏
  • 举报
回复
ibatis直接面向的是sql语句本身,它自己不参与维护表之间的关系,所以不要使用hibernate的级联思想来定义domain
ZIONER 2010-04-04
  • 打赏
  • 举报
回复
我不熟悉ibatis..
dahaidao 2010-04-04
  • 打赏
  • 举报
回复
来看看,不过没有看完啊

limit_clear 2010-04-04
  • 打赏
  • 举报
回复
................
JavaAlpha 2010-04-03
  • 打赏
  • 举报
回复
一般使用第一个方法的比较多。第二种也是直接返回的 map。
kai27ks 2010-04-03
  • 打赏
  • 举报
回复
其实说实话 ,我都是用工具生成的,这个工具叫ibator,建议楼主去了解下。然后你说的这个问题我也遇到过,我的解决方式是:综合,将原来的数据库字段映射后,添加上他们之间的映射关系于MODEL内,也就是我保留了authorId,然后又添加上了Author author属性。当不需要2表联查的时候使用resultClass即可以,当需要的时候使用resultMap。我觉得你对IBATIS的映射机制还不够了解,特别是resultMap,建议你去学习下。
重返春季 2010-04-03
  • 打赏
  • 举报
回复
我觉得第一种好,也希望高手参与,为楼主顶一下!!
BigBird2012 2010-04-03
  • 打赏
  • 举报
回复
那就ResultMap吧,你必须指定Property的,iBATIS是一种SqlMap,他不是严格意义上的ORM框架,这就是他和Hibernate的区别,楼主可以去看看iBATIS的爸爸写的那本《iBATIS实战》,这里面对iBATIS的原理讲了好多
老马哥V 2010-04-02
  • 打赏
  • 举报
回复
1 这个XML可以使用小工具生成。

2 <result property="属性名(必须有get和set)" column="列名" />
这个其实是非必须的,如果数据库字段与bean命名一致的话
limit_clear 2010-04-02
  • 打赏
  • 举报
回复
难解......
villagehead 2010-04-02
  • 打赏
  • 举报
回复
首先声明,我觉得2种方法都可以,
properties多就多写己行吧。要不就写个生成工具,也不麻烦。

我觉得还是看许需求来决定实现方法。
如果“只要需要书籍的信息,就需要作者的信息”的话,
就用第2种,这样也一劳永逸。免去了每次取得数据都还要再取一次作者的“麻烦”。

如果“作者信息只是在需要的时候才取得”这样的需求,
我的话还是选择第1种方法,
这样起码节省了处理多余数据在网络上的“流量”,
还能降低些些程序的复杂度。

good luck
LuffySY 2010-04-02
  • 打赏
  • 举报
回复
支持第一种
leavin521 2010-04-02
  • 打赏
  • 举报
回复
我觉得第一种比较好
mucrea 2010-04-02
  • 打赏
  • 举报
回复
returnClass="java.util.Map.HashMap"
加载更多回复(12)

67,513

社区成员

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

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