yyyyyyyi
2014-01-14 11:43
浏览 267
已采纳

持久化工具ibatis的问题

使用ibatis了小半年,没有接触过其他持久化工具,听说过著名的h持久化工具,没有使用过。暂时觉得ibatis非常简单,灵活。但也发现了问题,不知道是不会用,还是想法本身的问题。

产品研发期间使用ibatis自带工具对数据库进行映射生成(dao,service,pojo),个人理解持久化这层就是dao这层,service与pojo已经算业务层。
业务逻辑都写在service里,方便事务控制回滚,排他。项目将业务逻辑和持久化这两层单独提出来,进行了rest封装,方便其他平台调用。同时展示层有两套方案分别用的传统html5+ajax,另一套是服务器端动态生成ui的框架。

业务层的疑问????
由于ibatis自动生成(dao,service,pojo),所以生成出来的是以面向对象为主体,数据关系被淡化了。也就是每一个对象有一套自己service和dao进行数据操作,当我新增业务时,我首先是找到该业务的主体操作对象,然后到该对象的对应service上新增业务逻辑,然后可能会调用到多个其他对象对应的dao进行多个对象的数据操作。关于业务这块,我想到了几个解决办法,不知道哪种更可取

1:service还是以对象的这种方式生成,当我新增业务时,首先是找到该业务的主体操作对象,然后到该对象的对应service上新增业务逻辑,调用多个其他对象对应的dao。service绝不调用其他service。

2:对象对应着的service不变,当新增业务时,新建service类,调用其他对象对应的service处理业务逻辑。

3:对象对应着的service不变,当新增业务时,新建service类,调用其他对象对应的dao处理业务逻辑,绝不调用其他service。

持久化层的疑问????
由于项目所需的表在数据库级别没有建立任何约束,所有关系都依靠代码控制,也就是dao这层来控制。我将持久化操作分为两类:一类是查询,一类是非查询。

查询:多表关联查询时,重写ibatis对象对应的sql ,争取一个sql查出所有数据,后来发现随着业务增加,关联的越来越多,而且方向都不尽相同,只能拆分成多个查询方法,以提供给service调用。
非查询:service控制,事务控制,一个对象一个对象的处理,直到全部搞定。

目前是这样解决的,但是总感觉sql很乱,风格不统一,不知道有没有啥好方法

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

4条回答 默认 最新

  • hellostory 2014-01-15 13:33
    最佳回答

    看了楼主的问题,有几点感慨:

    [color=blue]① 感觉楼主纯粹就是为分层而分层,根本没有理解为什么要分层!

    ② IBatis就是一个持久层的工具,不知道为什么你还要让它自动生成业务层Service的东西?

    ③ Service层的对象是业务对象,不是简单的Java POJO对象。楼主一直把IBatis层的对象和Service层的对象混为一谈,才会这么迷惑!不知道我有没有说错?

    ④ Service层的对象只能调用Service层的对象,DAO层的对象只能调用DAO层的对象!这是基本原则,要不我们还有分层干嘛?
    比如:
    1)DAO层的UserMapper.findById()返回的User对象只包含:工号、姓名、年龄
    2)Service层的UserMapper.findById()返回的User对象不仅包含:工号、姓名、年龄,还包含所属部门、拥有的角色列表……[/color]
    [color=red] 注意:这里Service层的User对象可不是DAO层的User对象!这就是你一直混淆的地方之一! [/color]

    评论
    解决 无用
    打赏 举报
查看更多回答(3条)

相关推荐 更多相似问题