SSM框架下,spring中service和dao层的作用与三者之间的关系

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析) 本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。 阅读详情

参考原文,若有侵权请联系删除https://blog.youkuaiyun.com/ChenLeihappy/article/details/80003325

1、java web 中dao 层和service层都使用接口,是否是为使用接口而使用接口?

一个dao或者一个service都是一个接口,然后再一个类去实现,为什么不直接使用一个类呢?在入门级(单表)的SSM+maven代码里面,我们甚至可以看到dao和service的接口类中代码内容都是一样的,这个作何理解?

java web中的三层架构:
在这里插入图片描述

其中,表示层一般是采用 MVC 架构模式,业务层有事务脚本模式、领域模型模式等,持久层有数据映射器模式(Hibernate即是典型的)、入口模式(MyBatis、JDBC)。企业应用中最关键的显然是业务层。而对于初学者来说,事务脚本模式是最为简单,最容易掌握的。如果开发团队面向对象设计能力一般,而且业务逻辑相对简单,业务层一般都会采用事务脚本模式。

所谓事务脚本模式,就是将业务层的对象分为三类,按照下图的方式组织起来(下图是用EA画的UML类图,一个简单的学生管理的业务层设计)。
在这里插入图片描述

如上图所示,在事务脚本模式中,有三类对象。其中,Service类封装业务流程(或者说是界面上的业务流程),DAO类封装对持久层的访问,DTO类封装业务实体对象。各个对象之间的关系如上图所示,这就是所谓业务逻辑的组织方式。

为什么要用Service接口和DAO接口?
其实就是为了解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。举个例子,用DAO接口,那么持久层用Hibernate,还是用myBatis,还是 JDBC,随时可以替换,不用修改业务层Service类的代码。

具体来讲:标准主流现在的表现层都是采用MVC综合设计模式,最终目的达到解耦, 初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。 当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
其实因为入门级程序做东西分层次不是那么严格,涉及到的业务很少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。
DAO一定是和数据库的每张表一一对应,而service则不是。项目中一个service和一个DAO其实也一样可以操作数据库,只不过那要是表非常多,出问题了,那找起来多麻烦,而且太乱了。

一个DAO单独对1个表进行操作。一个Service可以操作几个DAO。

构建业务层的模式:Service + DAO,即DAO中只做CRUD及类似的简单操作(称之为功能点,不包含业务逻辑),Service中通过调用一个或多个DAO中的功能点来组合成为业务逻辑.Service的数量应该由功能模块来决定。在这种模型中业务逻辑是放在Service中的,事务的边界也应该在Service中控制. 当然,直接在Service中控制事务会引入非业务逻辑的代码,幸好spring的AOP可以解决这个问题,这也是引入Spring的原因之一。如果说到缺点,就在于对某些对象的操作就是简单的CRUD,Service层显得累赘。

2、java web中的service,dao,po分别是什么意思和什么作用

Service:service层是在mcv三层模式中新添加一层,能够更加清晰的定义应用程序的边界,需要操作数据的时候,通过service层访问DAO层来实现。service层做的事情,不仅仅是调用DAO操作数据,还会包含了一定的业务逻辑。整个程序设计就变成了针对服务的设计。

DAO:Data Access Object是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。是MVC模式中Model层

PO:Persistent Object即持久对象,它们是由一组属性和属性的get和set方法组成。可以看成是与数据库中的表相映射的java对象
在这里插入图片描述
Dao主要做数据库的交互工作
Modle 是模型 存放你的实体类
Service 做相应的业务逻辑处理
Action是一个控制器
Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Service是厨师,action送来的菜单上的菜全是ta做的;Dao是厨房的小工,和原材料(通过mybatis操作数据库)打交道的事情全是ta管。对象的调用流程:JSP—Action—Service—DAO—mybatis—数据库。

3、service层事物控制的理解

一般情况下,我们会把事务控制在service层。

例如我们的一个业务:删除A记录,插入B记录(需要在一个事务里进行),如果我们把这个业务逻辑写在了action层,我们再action层调用删除A的service,然后再调用插入B的service,如果说插入B失败了,那我们删除A这个操作将不能回滚,因为事务控制在了service层,这样写已不是一个事务。删除A操作的service已经完成,事务已经提交了,插入B的操作在另外的事务里运行。根据需要,业务逻辑尽量放在service层。通过配置spring事务控制的传播行为,在service层可以达到大部分的业务事务要求,而不需另加一层。spring的事务有两种一种是声明式事务,一种是编程式事务。

action和dao层,会使用一些框架技术。比如action层可能选择有springmvc、struts等,dao层有hibernate、mybatis等选择,所以action的dao有可能根据情况变化,而service层关注业务逻辑,业务代码都是自己完成的,代码对自己是透明的。

我们更应该把与业务相关的代码移至service层控制事务。这主要发生在我们把整个业务逻辑放在了service的一个方法,而这个方法以及调用的方法的事务配置为required(或其他),但业务的部分操作需要在不同的事务中进行,我们不想写另外的方法,也不想去更改事务配置,所以引入support层(或许你说可以把这种逻辑向action层移动,在action层处理,但记住我们的前提,action的框架是会变的,我们想尽量做到更改action层时,更简单。而且从分工来说,action层应该只关注视图逻辑,个人自扫门前雪,休管他人瓦上霜)。support层当然不是只为处理这种事务问题的,我把它定义为业务处理时需要的一些辅助层,可以协助处理业务,比如刚才说的事务问题,还有可以提供工具类支持等。

对于dao层,应该只关注数据库连接执行结果封装这些事。

作者:JonyLei
来源:优快云
原文:https://blog.youkuaiyun.com/ChenLeihappy/article/details/80003325
版权声明:本文为博主原创文章,转载请附上博文链接!

【Claude】Invalid API key 无效密钥报错已解决 API 拒绝了你提供的 key。最高频的根因是老的/被撤销的 key 藏在某处自动加载的配置文件里,而你对此不知情。→ 检查所有可能注入 key 的来源(.env.envrc、shell 配置、IDE 设置、)→ 清除无效来源 → 用/status验证。参考:Claude Code 官方《错误参考》"身份验证"章节、社区 Invalid API key 排查记录。 阅读详情

相关推荐

论文理解【LLM-OR】——【Step-Opt】Training LLMs for Optimization Modeling via Iterative Data Synthesis and

本文提出 Step-Opt-Instruct 方法,针对用 LLM 做 OR 问题求解任务,用迭代问题生成 + 分步验证机制实习更可靠的训练数据合成,从而微调开源 LLM 得到 Step-Opt。在多个 OR 建模基准提升性能,尤其在复杂问题上提升更明显

佚失的诗篇 805

SSM框架下,spring中service和dao层的关系

【部分转载】1、java web 中dao 层和service层都使用接口,是否是为使用接口而使用接口?一个dao或者一个service都是一个接口,然后再一个类去实现,为什么不直接使用一个类呢?在入门级(单表)的SSM+maven代码里面,我们甚至可以看到dao和service的接口类中代码内容都是一样的,这个作何理解?java web中的三层架构:其中,表示层一般是采用 MVC 架构模式,业务...

ChenLeihappy的博客 1万+

2025虚幻游戏逆向工程解包尝试

2025虚幻游戏逆向工程解包指南 本文详细介绍了虚幻引擎5游戏逆向解包的完整流程,主要包括获取AES密钥、生成映射文件和导出资源三个关键步骤。作者在实际操作中遇到诸多难题:AES密钥获取工具存在加壳保护问题,映射文件生成器依赖复杂的VS编译环境,DLL注入工具的使用也存在技术门槛。通过多次尝试,作者发现部分游戏可直接搜索现成的AES密钥,而映射文件生成需要额外下载Memcury依赖库才能正常编译。文章提供了相关工具的下载链接和具体操作说明,但同时也指出每个环节都可能出现意外状况,逆向工程实际执行过程远比理论

wsdchong的博客 6150

service层直接调用service层还是dao层

问题引入: java web项目开发中spring service层直接调用service层还是dao层,哪个更合理? 一、初步理解 service层作为一个业务逻辑处理层,我若直接调用dao层,那么该业务只取出我所需要的数据,我若调用service层,那么就相当于一个业务依赖于另一个业务,耦合度不就高了?所以,到底哪个更合理,想听听你们的理解 二、分析总结 总结1 按我的经验,service a不能调用b的dao层,只能调用b的service层实现业务。 因为b的service是对dao.

AlbenXie的博客 1万+

DreamerV3实战:如何用世界模型在Minecraft中自动挖钻石(附完整训练流程)

本文详细介绍了如何使用DreamerV3世界模型在Minecraft中训练AI智能体自动完成挖钻石的复杂任务。文章深入分析了该任务对强化学习的挑战,提供了从环境配置、模型训练到结果评估的完整实战流程,并分享了关键的调优技巧与问题解决方案,展示了基于模型的强化学习在解决稀疏奖励问题上的强大能力。

weixin_29050271的博客 191

Appstore开发者必读:3.2(f)违规预警与高效申诉指南

本文为AppStore开发者提供了应对3.2(f)违规通知的完整指南。文章深度解析了3.2(f)条款下的隐瞒性、关联性与真实性违规类型,并提供了黄金48小时内的自查、申诉信撰写与提交全流程策略。同时,文章强调遵循App Review Guidelines,建立内部合规清单与保持账号独立,是预防违规、维护开发者账号安全的关键。

weixin_29214559的博客 272

为何有DAO与Service层?为何先搞Dao接口在搞DaoImpl实现?直接用不行吗?

转自 http://blog.sina.com.cn/s/blog_4b1452dd0102wvox.html 我们都知道有了Hibernate后,单独对数据的POJO封装以及XML文件要耗损掉一个类(Orz意思是你需要精力写一个类)。然后,在大部分的服务中,我们又需要单独写一个Dao接口,并加个DaoImpl实现来操作数据库(好吧,再耗损2个类)。紧接着,我们发现其实Service层也...

weixin_30678821的博客 1849

Claude Code Agents 进阶:多代理协作与任务委托

Agent 是一个独立运行的 Claude 实例,它有自己的上下文和任务焦点。│ 主 Claude ││ (协调者) ││ │ │▼ ▼ ▼│ 代码审查 │ │ 测试生成 │ │ 文档编写 ││ │ ││▼汇总结果,完成任务并行处理:多个 Agent 同时工作,提高效率任务隔离:每个 Agent 有独立的上下文专业分工:不同类型的 Agent 擅长不同任务灵活控制:可以指定运行模式、超时等参数。

gaoxiang_120的专栏 336

框架中的 dao层service层和controller层是怎么联系起来的

总的来说,通过依赖注入和依赖关系的建立,DAO 层、Service 层和 Controller 层在 Spring Boot 中形成了一个清晰的层次结构,实现了数据访问、业务逻辑处理和请求响应的协同工作。在 Controller 层中,使用依赖注入将需要的 Service 接口或类注入进来,以便在 Controller 层中调用 Service 层的方法来处理业务逻辑。通过这种依赖注入的方式,Service 层和 Controller 层可以直接使用相应的对象或接口,从而实现数据的传递和业务逻辑的处理。

m0_53071888的博客 1996

CARAFE轻量级上采样算子详解:从原理到YOLOv5/YOLOv8实战魔改全攻略

摘要: 本文探讨了CARAFE(内容感知特征重组)上采样算子在YOLOv5/YOLOv8目标检测模型中的应用。传统上采样方法(如最近邻插值)易丢失细节信息,而CARAFE通过内容自适应机制和大感受野特性,动态生成上采样核,显著提升小目标检测性能。文章详细解析了CARAFE的算法原理(核生成与特征重组两步),并提供了在YOLOv5/YOLOv8中集成的代码实现与配置修改方案。实验表明,引入CARAFE后模型mAP提升约0.6%,且保持轻量级优势。此外,文中还总结了训练调优技巧、部署优化方案及常见问题解决方法,

FJN110的博客 917

第01章 Hermes Agent 是什么

如果读者所在的开发团队已经引入了 Cursor、Claude Code 这类 AI IDE,可能会有一个困惑:写代码已经有 AI 帮忙了,还需要 Hermes Agent 做什么?这一章将给出答案。Hermes Agent 不是另一个写代码的 AI,而是一个常驻在团队里的"AI 协作成员",专门负责写代码之外的协作环节——讨论需求、审查代码、查日志、监控告警、生成报告。学完本章,读者将清楚 Hermes 的定位以及它在团队里的角色。

亢少军的博客 75

ssm项目-对于service层的学习

首先你一定要明白dao层写的只是sql的定义,而service层就是具体的业务 比如说:你之前的dao方法参数全是map,那么你真正业务的话肯定不能这么写,而是根据具体情况来:比如说按id查询... 那么问题来了,如果我们dao层参数与业务层参数不一致怎么办?比如一个是map,一个是对象或者id属性等...,最简单就是自定义一个转换map类就可以了 public static <T> Map<String,Object> beanToMap(T bean){ //.

weixin_57128596的博客 1111

读懂 ABAP CDS 注解的直接、继承与派生

本文系统梳理了ABAP CDS注解的评估逻辑,重点解析直接注解(Direct)、继承注解(Inherited)和派生注解(Derived)的差异及其在CL_DD_DDL_ANNOTATION_SERVICE中的处理方式。通过视图注解@Metadata.ignorePropagatedAnnotations可调控注解传播行为,避免下游语义影响上层视图。文章还提供了基于标准表的完整示例(包含底层视图、消费视图和ABAP报告程序),帮助开发者在实际系统中验证三层注解的叠加效果与阻断机制。关键点包括:派生注解的数据

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 244

SSM框架各层作用及其关系

SSM中各层作用及关系 1.持久层:DAO层(mapper层)(属于mybatis模块) List item DAO层:主要负责与数据库进行交互设计,用来处理数据的持久化工作。 DAO层的设计首先是设计DAO的接口,也就是项目中你看到的Dao包。 然后在Spring的xml配置文件中定义此接口的实现类,就可在其他模块中调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是哪个类,这里往往用到的就是反射机制,DAO层的jdbc.properties数据源配置,以及有 关数据库连接的参数都

qq_37293879的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SSM框架中 entity层,mapper层,service层,controller层等作用

这几天在学习 SSM 框架,对于几个文件夹中应该存放什么类,这些类有什么功能,还是有些迷糊。 通过网上资料现在大致已经了解了。记下来以后有了新的理解再加上去。 一、SSM SSM 是 Spring + SpringMVC + Mybatis集成的框架。 Spring   Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。   Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`n.

lxt_Lucia的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Dao层,Mapper层,controller层,service层,model层都有什么作用

SSM是sping+springMVC+mybatis集成的框架。 MVC即model view controller。 model层=entity层。存放我们的实体类,与数据库中的属性值基本保持一致。 service层。存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道...

呼卓宇的博客 3万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SSM框架下各个层的解释说明

持久层:DAO层(mapper) 业务层:Service层 表现层:Controller层(Handler层) View层 各层联系 SSM框架整合说明

lutianfei的专栏 10万+

SSM框架介绍

1、SSM框架简介 SSM框架是Spring MVC ,Spring和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,Controller层,Service层,DAO层四层,使用Spring MVC负责请求的转发和视图管理,Spring实现业务对象管理,Mybatis作为数据对象的持久化引擎。 ...

jack_xia_2018的博客 6万+

SSM框架下各层的解释说明(Controller等)

SSM框架 SSM框架是spring MVC ,Spring和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层(web),controller层,service层,dao层四层,使用spring MVC负责请求的转发和视图管理。Spring实现业务对象管理,Mybatis作为数据对象的持久化引擎。 表现层(web):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 业务逻辑层(service):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 数据

CJW的博客 2万+

SSM框架下的model层,Dao层,service层,controller层,view层等简单理解

首先SSM是sping+springMVC+mybatis集成的框架。 MVC即model view controller。 分层的目的 高内聚,低耦合 人话就是 首先就是结构更清晰了,分层分模块,就像把书籍分类处理一样,虽然对很对新人来说确实看起来很复杂。 然后可扩展性和适应性更加强,如果需要修改业务,你需要做的仅仅就是在service层中多调用一个方法即可。 最后就是可维护性,分层包括接口其实...

SafeVidulInfo的博客 6856

对SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层等层的理解

SSM 是 Spring + SpringMVC + Mybatis集成的框架。 MVC即model view controller。(模型,视图,控制器) 一、entity层(model层,domain层) 用于存放我们的实体类,类中定义了多个类属性,并与数据库表的字段保持一致,一张表对应一个类。 主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。 二、mapper层(dao层) 数据持久层,先设计接口,然后在配置文件中进行配置其实现的关联。对数

qq_43379465的博客 1万+

SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用

SSM是sping+springMVC+mybatis集成的框架。 MVC即model view controller。 model层=entity层。存放我们的实体类,与数据库中的属性值基本保持一致。 service层。存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方法。

会写Bug的攻城狮 1万+

SSM框架详解

SSM框架详解,实例解释

qq_45067481的博客 1万+

mybatis Dao层 Mapper层 controller层 service层 model层 entity层 简介

简介 SSM是sping+springMVC+mybatis集成的框架。 MVC即model view controller。 model层=entity层。存放我们的实体类,与数据库中的属性值基本保持一致。 service层。存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方法。

ljm_99的博客 1万+

【概念理解】SSM框架下,spring中service和dao层的关系

1、java web 中dao 层和service层都使用接口,是否是为使用接口而使用接口? 一个dao或者一个service都是一个接口,然后再一个类去实现,为什么不直接使用一个类呢?在入门级(单表)的SSM+maven代码里面,我们甚至可以看到dao和service的接口类中代码内容都是一样的,这个作何理解? java web中的三层架构: 其中,表示层一般是采用 MVC 架构模式,业务层有...

LMX_hello的博客 3315

ssm各层作用_SSM中各层作用及关系

SSM中各层作用及关系1.持久层:DAO层(mapper层)(属于mybatis模块)DAO层:主要负责与数据库进行交互设计,用来处理数据的持久化工作。DAO层的设计首先是设计DAO的接口,也就是项目中你看到的Dao包。然后在Spring的xml配置文件中定义此接口的实现类,就可在其他模块中调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是哪个类,这里往往用到的就是反射机制,DAO层的j...

weixin_39812039的博客 2865
上一篇: @Param注解的用法
下一篇: SCRIPT438: 对象不支持“ajaxSubmit”属性或方法
coco_____
博客等级 码龄10年 5粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值