DAO模式 面向对象问题

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

该怎么做?

7个回答

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

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

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

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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问