java dao orm service

Java中如何使用DAO?和service,ORM,repository,MVC的model是啥关系?

 
 
 

1.Dao和Service是如何划分的?

一个Dao方法可以包含多个sql操作吗?
譬如User/Permission/Group 以及他们两两关联表.

我删除User 顺便把Permission也删掉(前提是通过代码删而不是cascade). 这是写到一个DAO方法里还是在Service里组装?

1.1 针对非数据库数据如何处理?
如果是redis 也许有现成的类似mybatis的封装.
但是如果是数据源本身就是一个http api. 那获取这个数据的动作(python中使用requests.get("<url>"))应该写在service里还是DAO里.还是都可以?

2. MVC中的Model和三层中的DAO有什么区别?

我目前的结论是在java中实际上Model 其实是pojo. 只是用于存数据的.

而django/peewee等实际上是active record. 功能更强大. 我这么理解对吗? 进而引出下一个问题和结论:

2.1 DAO和ORM之间的关系是什么?

我的结论: DAO是人为的抽象. 目的是将ORM/SQL 和 service隔离. 也就是说如果有一天我要换orm或数据库或他们的版本, 那么service是一行代码都不需要改的.

而ORM 无论是actice record还是data mapper 不重要. 重要的是ORM简化了SQL或者说部分隐藏了SQL 在没有其他用处了.

在django项目中DAO不常见其实可以认为这个项目没有考虑将来django的版本升级风险.

 

3. Repository和Dao的区别? Manager和Dao的区别?

我的结论:

DAO是个通用概念 别的语言也可以有.

repository是 和JPA 一起出现的概念也就是说repository 是 java 范畴的概念.

也就是说在java里repository 约等于 DAO. 只不过repository因为有JPA协议加持所以有他自己的约束行为. 而DAO 因为是人为的抽象所以爱咋写咋写.

譬如可以在DAO的方法中调用orm. 也可以在DAO的方法中手写SQL.

Manager是我在搜索Repository和Dao的区别这个问题的时候看到的概念. 目前还没有在java代码中看到过.

我目前的理解是 controller -- service -- manager -- DAO

但是我也不知道这个manager是干啥的.

4. 我是Python --> Go

Java正在学习中,所以很多概念不是很理解. 我觉得JAVAEE 提出了很多概念 但是这些概念其实是没啥大意义的.譬如POJO,DO,DTO,BO,AO,VO..

【转】https://www.zhihu.com/question/589707954/answer/2937836966

posted on 2024-03-06 05:52  lydstory  阅读(3)  评论(0编辑  收藏  举报

导航