快速学习使用Spring MVC的注解及三层架构

Spring MVC 是一个非常流行的 Java Web 框架,它允许开发人员快速构建高效且可扩展的 Web 应用程序。下面我将为您简要介绍 Spring MVC 的核心注解和三层架构,并提供一个简单的代码示例来展示这些概念的实际应用。

Spring MVC 核心注解

  1. @Controller: 标记一个类为 Controller,Spring 会扫描这个类并识别其中的方法,与前端发来的请求进行匹配。
  2. @RequestMapping: 用于定义 URL 映射。它可以作用在类或者方法上,用于指定请求的 URL、请求方法(GET、POST 等)、请求参数等。
  3. @ResponseBody : 指示方法的返回值应该直接写入 HTTP 响应体,而不是作为视图名称解析为视图页面。通常与 @RestController 注解(该注解是 @Controller@ResponseBody 的组合)一起使用,用于构建 RESTful Web 服务。
  4. @ModelAttribute: 用于绑定方法参数到命名的模型属性,或者将方法返回值添加到模型中。它也可以用于在 Controller 中定义一个全局的模型属性。
  5. @Autowired: 自动装配 Spring Bean。它可以用在字段、构造器或者 setter 方法上,让 Spring 自动注入依赖。

三层架构

在 Spring MVC 中,常见的三层架构包括:表示层(Controller 层)、业务逻辑层(Service 层)和数据访问层(DAO 层或 Repository 层)。

  1. 表示层(Controller 层): 负责接收用户的请求,调用业务逻辑层进行处理,并返回处理结果给用户。这一层主要处理 HTTP 请求和响应。
  2. 业务逻辑层(Service 层): 负责处理核心的业务逻辑,通常会调用数据访问层来获取或存储数据。
  3. 数据访问层(DAO 层或 Repository 层): 负责与数据库进行交互,执行 SQL 查询或更新操作。在 Spring 中,可以使用 Spring Data JPA、MyBatis 等框架来简化数据访问层的开发。

示例代码

下面是一个简单的 Spring MVC 项目结构示例,包括 Controller、Service 和 DAO 层的代码。

1. Controller 层

java 复制代码
@Controller
@RequestMapping("/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

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

2. Service 层

java 复制代码
@Service
public class UserService {
    private final UserDao userDao;

    @Autowired
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

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

3. DAO 层(使用 Spring Data JPA)

java 复制代码
@Repository
public interface UserDao extends JpaRepository<User, Long> {
    // 这里继承了 JpaRepository,因此可以直接使用其提供的方法来操作数据库,例如 findById() 等。
}

在这个示例中,UserController 负责处理与 /users 路径相关的 HTTP 请求。当用户发送 GET 请求到 /users/{id} 时,getUser() 方法会被调用,并通过 UserServiceUserDao 来获取指定 ID 的用户信息。最后,获取到的用户信息会被直接写入 HTTP 响应体返回给客户端。

相关推荐
slomay1 小时前
关于对比学习(简单整理
经验分享·深度学习·学习·机器学习
hengzhepa1 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
编程、小哥哥2 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
小小洋洋3 小时前
BLE MESH学习1-基于沁恒CH582学习
学习
Ace'4 小时前
每日一题&&学习笔记
笔记·学习
IM_DALLA4 小时前
【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL25
学习·fpga开发·verilog学习
丶Darling.5 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
z樾6 小时前
Github界面学习
学习
道爷我悟了7 小时前
Vue入门-指令学习-v-html
vue.js·学习·html
wxin_VXbishe7 小时前
springboot合肥师范学院实习实训管理系统-计算机毕业设计源码31290
java·spring boot·python·spring·servlet·django·php