Web 程序的经典三层架构(Controller 控制层、Service 业务层、DAO 持久层)三层架构是Web应用开发中常用的代码组织方式,分为控制层、业务层和持久层。控制层接收请求并返回响应,业

三层架构详解 三层架构是一种常见的软件架构模式,用于将应用程序划分为三个不同的层次:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),每个层次都有不同的职责和功能。Java三层架构实战:从数据库表到控制层的完整开发流程。 阅读详情

目录

1. 什么是三层架构?

2. 三层的职责

(1) Controller 控制层

(2) Service 业务层

(3) DAO 持久层

3. 三层架构调用流程

4. 三层架构的优点

5. 三层架构的不足

6. 小结


1. 什么是三层架构?

Web 应用常用 三层架构(Three-Tier Architecture) 来组织代码,核心思想是 分层解耦:

  • Controller 控制层
    接收用户请求(如 HTTP 请求),调用业务逻辑,返回响应。

  • Service 业务层
    处理业务逻辑(计算、规则判断、事务控制等)。

  • DAO 持久层(Data Access Object)
    负责数据库的操作,封装 增删改查,只和数据库打交道。

三层架构 = 请求进入 → Controller → Service → DAO → 数据库 → 返回。


2. 三层的职责

(1) Controller 控制层

  • 主要职责:接收请求、调用 Service、返回结果。

  • 不应该写复杂逻辑,只做 调度。

  • 框架:Spring MVC 的 @RestController。

示例:

@RestController
@RequestMapping("/user")
public class UserController {
    
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findUserById(id);
    }

    @PostMapping
    public String addUser(@RequestBody User user) {
        userService.saveUser(user);
        return "新增成功";
    }
}

(2) Service 业务层

  • 主要职责:

    • 实现业务逻辑(例如注册用户要校验用户名、加密密码等)。

    • 控制事务。

    • 组合多个 DAO 的方法完成复杂业务。

  • 框架:Spring 的 @Service。

示例:

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public User findUserById(Long id) {
        return userDao.findById(id);
    }

    public void saveUser(User user) {
        // 业务逻辑:例如加密密码
        user.setPassword(MD5Util.encrypt(user.getPassword()));
        userDao.insert(user);
    }
}

(3) DAO 持久层

  • 主要职责:操作数据库,封装 SQL。

  • 不包含业务逻辑,只做数据访问。

  • 框架:MyBatis、Hibernate、JPA 等。

示例(MyBatis):

@Mapper
public interface UserDao {

    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Long id);

    @Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
    void insert(User user);
}

3. 三层架构调用流程

用户 → Controller → Service → DAO → 数据库

比如一个 查询用户 的过程:

  1. 浏览器请求 /user/1

  2. Controller 收到请求,调用 UserService.findUserById(1)

  3. Service 里可能校验参数、做缓存处理,然后调用 UserDao.findById(1)

  4. DAO 执行 SQL,返回 User 对象

  5. Service 可能加工数据,再返回 Controller

  6. Controller 返回 JSON 响应给前端


4. 三层架构的优点

✅ 分层解耦:每层职责清晰,修改互不影响。
✅ 易于维护:业务逻辑和数据库访问分开,代码清晰。
✅ 可扩展性强:方便做分布式、微服务。
✅ 利于测试:单元测试时可以 Mock DAO 层,测试 Service。


5. 三层架构的不足

❌ 代码稍显复杂:小项目可能显得繁琐。
❌ 层次过多:一些简单 CRUD 业务需要写很多文件。
❌ 性能开销:调用链长于简单架构。


6. 小结

  • Controller:只管请求和响应。

  • Service:专注业务逻辑和事务。

  • DAO:专门做数据操作。

ptrade量化策略之沪深300指数增强 本策略的核心是在沪深300股票池中选股,选择的股票都是市值比较大,业绩比较好的白马股,根据市场相对位置以及基本面因子来选择股票 阅读详情

相关推荐

Windows10系统添加虚拟网卡(Microsoft Loopback Adapter)的方法

1、按下win + R键,在其中输入:hdwwiz,然后 (enter) 2、点击下一步即可 3、其次选择【网络适配器】,然后点击【下一步】。 4、在厂商处选择Microsoft,网络适配器处选择【Microsoft Loopback Adapter】选项 ,点击【下一步】。 5、通过上面几个步骤的设置后,一块虚拟网卡的安装设置就算是完成了。 ...

一个懒鬼的博客 2万+

三层架构介绍

了解三层架构的概念、优势与应用

TestXzing的博客 1万+

STM32低功耗模式下ADC采样抖动的5个隐藏陷阱及解决方案(实测避坑)

本文深入探讨了STM32低功耗模式下ADC采样抖动的5个常见陷阱及解决方案,包括多通道采样电压跃迁、外设开关信号稳定、低功耗模式与ADC时钟同步、输入阻抗失配以及基准电压稳定性问题。通过实测数据和优化代码示例,帮助工程师有效规避ADC采样数据抖动问题,提升物联网设备的测量精度和稳定性。

weixin_30316097的博客 382

理解java三层架构:持久层、业务层、表现层

java三层架构最简单的介绍。

一壶一天地 4万+

C#图表开发避坑指南:Chart控件的Series和Points属性详解

本文深入解析C#图表开发中Chart控件的Series和Points核心属性,提供避坑指南。详细阐述了Series的数据序列管理、Points的高效操作与空值处理,以及多Series与ChartArea的协同配置,帮助开发者避免常见错误,实现稳定、高性能的数据可视化应用。

weixin_29313239的博客 365

CAD文件转换避坑指南:Inventor导出STP时这些设置千万别忽略

本文深入解析了使用Autodesk Inventor导出STP文件时的关键设置与避坑指南。重点探讨了应用协议选择、样条曲线拟合精度对几何保真度的影响,以及装配体结构和元数据的保全策略,旨在帮助用户实现高质量、零误差的CAD数据交付,避免下游软件打开时出现特征丢失或曲面破碎等问题。

weixin_29214559的博客 518

什么是三层架构?

三层架构 三层架构来源于后端开发的一种分层的思想。 引用自百科的解释: 三层架构(3-tier architecture)通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。 区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(

weixin_49066399的博客 4万+

避坑指南:麒麟系统ARM架构下PostGIS离线安装常见问题解析

本文深度解析了在国产麒麟系统ARM64架构下进行PostGIS离线安装的完整路径与核心避坑点。通过对比Docker容器化与源码编译两种部署方式的优劣,详细阐述了离线Docker环境搭建、ARM64镜像获取验证、容器化配置及常见故障排查的全流程,为在特殊环境下稳定部署空间数据库提供了一套可靠的实践指南。

Python的专栏 287

三层架构 详解

文章目录前言什么是三层架构?为什么要用三层架构?优缺点:怎么用三层架构?实例演练: 前言 当看到一个陌生的名词时你会怎么想?what?way?how? 现在就按照这个思维框架走进“三层架构”。 什么是三层架构? 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。 1、表示层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 2、业务逻辑层(BLL):针对具体问题的

潘小蓝的博客 5303

Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

Geant4是由欧洲核子研究组织基于C++面向对象技术开发的蒙特卡罗应用软件包,用于模拟粒子在物质中输运的物理过程。由于具有良好的通用性和扩展能力,Geant4在涉及微观粒子与物质相互作用的诸多领域获得了广泛应用。 第一部分 Geant4的基本概念 HEP中的模拟是“虚拟现实”。仿真既可用于在研发阶段帮助设计探测器,又可用于物理研究中了解探测器的响应。为了创建这样的虚拟现实,我们需要对粒子间的相互作用,几何形状和材料进行建模,以便将基本粒子传播到检测器中。我们还需要描述检测器生成原始数据的灵敏度。 Gea

M_M-铭的博客 2万+

YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如今各种网络模型更新迭代越来越快,计算机视觉相关的文章也越来越多,多到一些普通,通用的改进点无法达到发表的要求。本专栏正是解决这个问题!如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 6万+

代码分层设计,三层架构Controller、Service和Dao的区别与联系

文章目录1 三层架构概览2 控制层 Controller3 服务层 Service4 数据访问层 DAO5 三层架构与MVC的区别和联系 1 三层架构概览 如果去饭店吃饭,不可能找厨师点菜吧? 小工负责食材存取,洗菜切肉;厨师负责烹饪;跑堂负责接待食客并与后厨沟通。这就是精典的分层体现。 如果一个厨师既负责跑堂,又负责烹饪。那这个饭店的管理一定非常混乱吧。 小工就是DAO,从食材库里(数据源)取出食材(原始数据),进行简单处理(数据对象化)。 厨师就是Service,找到小工(DAO),获取各

小哈里的博客 8834

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

java为什么要分为service层,dao层,controller层和Entity层等?

在Java中,通常将一个应用程序分为控制层(Controller)、服务层(Service)、实体Entity层和数据访问层(DAO)。这种分层结构的主要目的在于实现应用程序的模块化和解耦,便于团队协作和维护。

tigerhhzz的博客 7984

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

三层:控制层(Controller) 服务层(Service) 持久层(Repository 或 DAO)的理解

持久层的主要作用是执行数据的持久化和检索,以及管理数据的事务。控制器负责接收和处理用户请求,服务层负责实现业务逻辑,持久层负责与数据存储交互,三者共同协作完成应用程序的功能。`@Controller`、`@Service` 和持久层(通常使用 `@Repository` 或者 `@DAO`)就是这种划分的一部分。在这个例子中,`UserRepository` 是一个持久层接口,它继承了 Spring Data 提供的 `CrudRepository` 接口,用于对用户数据进行 CRUD 操作。

m0_59281987的博客 7478

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Controller,Service和DAO

初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。接下来说你感觉service的意义,其实因为你现在做东西分层次不是那么严格,在一个你们做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。

m0_62179412的博客 1795

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JavaWeb——分层解耦(1/5):三层架构(架构层次、请求流程,DAO 层、Service 层、Controller 层,总结)

层操作文件(或其他数据源)中的数据并将数据返回给。拿到数据后进行逻辑处理,再将结果返回给。学习自:黑马程序员——JavaWeb课程。处理逻辑前需获取数据,所以会调用。前端发起请求后,先到达。最后响应数据给前端。代码复用性和拓展性差。

li13437542099的博客 1645

Java三层架构(涉及三层架构及分层解耦,IOC和DI纯知识记录与分享)

注解,把程序运行时,给依赖的资源进行“依赖注入”。程序运行中,ioc容器会提供当前类型的Bean对象,并给变量赋值。b.依赖注入:(dependency injection)简称:“Di”,应用为程序运行时,所依赖的资源成为,”3.分层解耦:IOC&DI---IOC详解和IOC&DI---DI详解。2.为Controller层和Service层注入运行时,依赖的对象。1.Service层为Dao层实现的类,交给Ioc容器来管理。尊重原创及尊重Java黑马视频教程!2.分层解耦:IOC&DI入门和认识。

ggdgvibe的博客 2932

JavaEE的三层架构MVC

持久层:用于与数据库这种可以将数据持久保存的程序做交互,完成数据的CRUD,将持久层与数据库交互后的结果反馈给服务层,服务层处理完相应的业务后,反馈给控制层,控制层就会根据实际需求将获取到的结果回传给客户端或浏览器。业务层:用于处理业务,通过控制层获取请求参数后传递给业务层,业务层执行完对应的业务后传递数据给控制层,再由控制层反馈给客户端。控制层:也称作Web层或视图层,用于获取浏览器请求,并反馈响应信息的一层。为lib目录创建依赖,成为jar依赖目录。web目录下创建lib目录。方法一:Maven配置。

杰尼龟的小龟壳的博客 1334

控制层,服务层,数据持久层Dao,视图层记录一下它们的关系

在软件开发中,尤其是Web应用程序开发过程中,采用分层架构是一种常见的实践。这种做法有助于提高代码的可维护性、扩展性和复用性。SSM(Spring + SpringMVC + MyBatis)架构就是一个典型的例子,它将应用分为几个清晰的层次:控制层、服务层、数据持久层(DAO层)、以及视图层。

weixin_42930616的博客 635

B/S 三层架构(含MVC架构)

B/S 三层架构 MVC架构

大龄烤红薯的博客 5252

基于Spring框架的分层解耦详解

在开发过程中,我们要朝着高内聚低耦合的方向实施,最好可以让层与层之间解除耦合,让他们不产生依赖,这样我们程序的灵活性和可扩展性会更佳。

窗外风景随心变幻 1412

java开发的三层架构

三层架构让“接待(Controller)→ 决策(Service)→ 搬运(Mapper)”各自专注,系统更清晰、可维护、可测试。数据库搬运工与翻译官。

2504_93605592的博客 533

SpringBoot项目中各层介绍总结

业务逻辑层,完成功能的设计 和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。model是模型的意思,与entity、domain、pojo类似,是存放实体的类,类中定义了多个类属性,并与数据库表的字段保持一致,一张表对应一个model类。控制层,控制业务逻辑service,控制请求和响应,负责前后端交互 controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行。

lijianhua的博客 6367

【SpringBoot 快速开发】Spring Boot 分层架构设计:Controller / Service / DAO 分层与解耦实践

本文介绍了三层架构的设计思想和Spring框架实现解耦的核心技术。主要内容包括:1)三层架构的分层设计(Controller控制层、Service业务逻辑层、Dao数据访问层)及其优势;2)单一职责原则和高内聚低耦合的设计理念;3)IOC控制反转和DI依赖注入的原理;4)Spring注解(@Component、@Controller等)声明Bean的方法;5)依赖注入的三种方式(属性、构造器、setter)及@Autowired与@Resource的区别。通过代码示例展示了如何将程序改造为三层架构,实现各层

懿轩的技术小窝 696

全网最强JavaWeb笔记 | 万字长文爆肝JavaWeb开发——day05_SpringBootWeb请求响应

万字长文爆肝黑马程序员2023最新版JavaWeb教程。这套教程打破常规,不再局限于过时的老套JavaWeb技术,而是与时俱进,运用的都是企业中流行的前沿技术。笔者认真跟着这个教程,再一次认真学习一遍JavaWeb教程,温故而知新,对JavaWeb开发也有了更加深入细致的了解。因此笔者做了全网最全面详细的学习笔记,通篇图文并茂,

qq_45832461的博客 1598
上一篇: 这是一份从 0 到 1 的「前端拖拽排序实现详解」——覆盖原理、数据结构、事件系统、碰撞算法、动画(FLIP)、自动滚动、可访问性(A11y)、移动端兼容(Pointer Events)、等
下一篇: HikariCP vs Druid 的性能对比
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值