qq_31651207
qq_31651207
采纳率34.8%
2018-04-22 13:31

DAO模式 面向对象问题

10

大概了解了一下DAO模式,感觉用起来有点不顺手。
比如我有2个实体:student,teacher
那么teacherDAO里就只能增删改查teacher表,要获取某个老师下的student信息只能去studentDAO里查询(查询条件为teacher),
这样功能上都能实现,但是用起来怪怪的,感觉每个实体都没有当前实例一样,
个人倾向于teacher类里有getAllStudent()这样的方法来获取当前teacher实例下的所有student,但是DAO模式中没有找到哪一层能放这样的方法,

该怎么做?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前

    dao本来就是这样,纯粹的读写数据库,更高层的面向对象的逻辑,应该放在业务逻辑层实现(BLL)
    实际上,现在没有人去写DAO的代码,直接用O/R Mapping框架(比如hibernate),所以这些重复的代码实际上被简化掉了。

    点赞 1 评论 复制链接分享
  • qq_31651207 qq_31651207 3年前

    还有一个service 作为业务逻辑,来调用dao层。。。。

    点赞 评论 复制链接分享
  • ahjxtxw ahjxtxw 3年前

    在mybatis框架中,用MapperScannerConfigurer类完成对各个接口的动态代理就可以了,都不用写实现类,在service里完成crud操作省事多了。

    点赞 评论 复制链接分享
  • alan2818 alan2818 3年前

    我是个初学者 , 我开始也不太明白为什么这么做 , 在ServLet的时候老师开始教我们写DAO,里面都是interface,然后写实现类;后来学到SSM发现,实现类都不用谢了,框架帮你封装好了;之后写了几个案例,对于你这个情况有点感觉了,你的确可以在teacher实体类里面定义student的属性并且给getter/setter方法,但是一切都是以需求为导向;在建表的时候你肯定不可能把teacher和student放在一张表里,一定是两张表通过主外键去关
    联,那么就很容易理解了,肯定是通过主外键(你可以看做一个通道)去把两个表联系起来;它们既是独立又有着联系。

    点赞 评论 复制链接分享
  • qiuxinyidian qiuxinyidian 3年前

    单一职责,尽可能降低代码的耦合度

    点赞 评论 复制链接分享
  • qq_35862847 黄泉渡口 3年前

    你可以在techer中新建一条属性,例如private List studentList;这样可以在sql中直接关联查出你想要的学生数据,然后存放,方便使用

    点赞 评论 复制链接分享
  • qq_40981281 YKP.TOSTRING 3年前

    hibernate框架就是这样子的,你需要在teacher类里面定义个属性 List hibernate的查询这个teacher的同时就会级联(根据teacherid)
    查询到他所有的学生放到list中

    点赞 评论 复制链接分享

为你推荐