当前位置: 首页 > news >正文

每日面经分享(Spring Boot: part3 Service层)

  1. SpringBoot Service层的作用
    a. 封装业务逻辑:Service层负责封装应用程序的业务逻辑。Service层是控制器(Controller)和数据访问对象(DAO)之间的中间层,负责处理业务规则和业务流程。通过将业务逻辑封装在Service层中,可以保持控制器的简洁性,提高代码的可维护性和可复用性。
    b. 事务管理:Service层涉及到与数据库的交互和数据的修改。通过在Service层的方法上使用@Transactional注解,可以实现对数据库操作的事务管理。这样,在多个数据库操作中,如果其中一个操作失败,整个事务可以回滚,确保数据的一致性。
    c. 协调多个DAO操作:在业务逻辑中,需要对多个实体进行操作,涉及到多个DAO的调用。Service层可以协调这些DAO操作,确保它们按照正确的顺序和方式执行。优点:保持DAO的单一职责,提高代码的可读性和可维护性。
    d. 数据转换和验证:Service层负责对输入数据进行验证和转换。验证输入数据的有效性、完整性和一致性,以及进行数据格式转换和数据清洗等操作。确保数据的质量和正确性,避免在后续的处理过程中出现问题。
    e. 提供业务接口:Service层可以定义一组接口,用于提供对业务逻辑的访问。这些接口可以被其他组件(如控制器、其他服务等)调用,实现对业务逻辑的封装和复用。优点:提高代码的可测试性和可扩展性。
  2. SpringBoot Service层搭建过程
    a. 创建Service接口:创建一个名为UserService的接口,定义一些用户相关的方法。
public interface UserService {User getUserById(Long id);List<User> getAllUsers();void saveUser(User user);void updateUser(User user);void deleteUser(Long id);
}

b. 创建Service实现类:创建UserService接口的实现类UserServiceImpl,并添加@Service注解进行标识。

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserRepository userRepository;@Overridepublic User getUserById(Long id) {return userRepository.findById(id).orElse(null);}@Overridepublic List<User> getAllUsers() {return userRepository.findAll();}@Overridepublic void saveUser(User user) {userRepository.save(user);}@Overridepublic void updateUser(User user) {userRepository.save(user);}@Overridepublic void deleteUser(Long id) {userRepository.deleteById(id);}
}

c. 创建Repository接口:在DAO层中创建一个名为UserRepository的接口,继承自Spring Data JPA的CrudRepository接口。

public interface UserRepository extends CrudRepository<User, Long> {// 可以根据需要添加自定义的查询方法
}

d. 使用Service层:在Controller层中使用UserService,通过依赖注入的方式将其注入到Control

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userService.getUserById(id);}@GetMapping("/")public List<User> getAllUsers() {return userService.getAllUsers();}@PostMapping("/")public void saveUser(@RequestBody User user) {userService.saveUser(user);}@PutMapping("/")public void updateUser(@RequestBody User user) {userService.updateUser(user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable Long id) {userService.deleteUser(id);}
}

互联网大厂测开经历,目前担任测试开发负责人,每天分享互联网面经,如果你有测试相关的问题,欢迎咨询,海鲜市场【简历优化】、【就业指导】、【模拟/辅导面试】,已辅导20位以上同学拿到心仪offer

海鲜市场

相关文章:

每日面经分享(Spring Boot: part3 Service层)

SpringBoot Service层的作用 a. 封装业务逻辑&#xff1a;Service层负责封装应用程序的业务逻辑。Service层是控制器&#xff08;Controller&#xff09;和数据访问对象&#xff08;DAO&#xff09;之间的中间层&#xff0c;负责处理业务规则和业务流程。通过将业务逻辑封装在S…...

k8s的pod访问service的方式

背景 在k8s中容器访问某个service服务时有两种方式&#xff0c;一种是把每个要访问的service的ip注入到客户端pod的环境变量中&#xff0c;另一种是客户端pod先通过DNS服务器查找对应service的ip地址&#xff0c;然后在通过这个service ip地址访问对应的service服务 pod客户端…...

shell脚本发布docker-nginx vue2 项目示例

docker、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 nginx安装在docker容器里面&#xff0c;参见&#xff1a;https://blog.csdn.net/HSJ0170/article/details/128631155 姊妹篇&#xff08;宿主机nginx&#xff0c;非docker-nginx&#xff09;&am…...

【THM】Nmap Basic Port Scans(基本端口扫描)-初级渗透测试

介绍 本房间是Nmap系列的第二个房间(网络安全简介模块的一部分)。 1.Nmap实时主机发现 2.Nmap基本端口扫描 3.Nmap高级端口扫描 4.Nmap后端口扫描 在之前的房间里,我们专注于发现在线系统。到目前为止,我们已经介绍了Nmap扫描的三个步骤: 枚举目标发现活动主机反向-…...

Groovy结合Java在生产中的落地实战

Groovy简介 Groovy是用于Java虚拟机的一种敏捷的动态语言&#xff0c;是一种成熟的面向对象编程语言&#xff0c;又是一种纯粹的脚本语言。Groovy运行在JVM环境上&#xff0c;在语法上兼具java 语言和脚本语言特点&#xff0c;大大简化了语法。同时又具有闭包和动态语言中的其…...

达梦数据库 创建外部表 [-7082]:外部表数据错误.

1&#xff1a;定义 外部表&#xff0c;是指不存在于数据库中的表。通过向达梦提供描述外部表的元数据&#xff0c;可以把一 个操作系统文件当成一个只读的数据库表&#xff0c;就像这些数据存储在一个普通数据库表中一样来 进行访问。 外部表的数据存储在操作系统中&#xff0…...

XUbuntu22.04之激活Linux最新Typora版本(二百二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

JavaScript简介

目录 概要&#xff1a; 说明&#xff1a; 学习JS的原因&#xff1a; JS可以干什么&#xff1a; 了解JavaScript&#xff1a; 前言&#xff1a; JavaScript的历史&#xff1a; JavaScript与ECMAScript&#xff1a; 如何运行JavaScript以及JavaScrip的特点&#xff1a; …...

使用PaddleX实现的智慧农业病虫检测项目

目录 1. 数据集解压 2.检查数据集的图片是否均可读取 3. 查看数据集的类别信息...

算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特…...

【IP组播】PIM-SM的RP、RPF校验

目录 一&#xff1a;PIM-SM的RP 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-SM和静态RP 4.配置动态RP 5.配置Anycast RP 二&#xff1a; RPF校验 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-DM 4.RPF校…...

前端代码规范-命名规范

命名规则 camelCase&#xff08;小驼峰式命名法 —— 首字母小写&#xff09;PascalCase&#xff08;大驼峰式命名法 —— 首字母大写&#xff09;kebab-case&#xff08;短横线连接式&#xff09;Snake&#xff08;下划线连接式&#xff09; 项目名称 项目名 全部采用小写方…...

移动端APP测试常见面试题精析

现在面试测试职位&#xff0c;要求非常全面&#xff0c;那么APP测试一般需要哪些技术呢&#xff1f;下面总结了APP测试常见面试题&#xff1a; 1.Android四大组件? Activity:描述UI&#xff0c;并且处理用户与机器屏幕的交互。应用程序中&#xff0c;一个Activity就相当于手…...

报错[Vue warn]: $listeners is readonly. $attrs is readonly.怎么解决?

代码也没有逻辑错误&#xff0c;但是报错 [Vue warn]: $listeners is readonly. $attrs is readonly. 情况1&#xff1a;多处声明了new Vue&#xff0c;解决方案&#xff1a;删除一个&#xff0c;用全局变量引用同一个Vue 情况2&#xff1a;import Vue from Vue;第二个Vue首字…...

android 14 apexd分析(1)apexd bootstrap

Apex的由来,我们都知道普通的apk我们可以通过应用商店playstore等进行更新,apex的引入是google希望也能通过playstore更新bin文件.so etc配置文件等类型文件. 这些文件的安装实际通过apexd来进行,现在我们来解析一下apexd, apexd的启动分为两个阶段,bootstrap和普通apexd启…...

C++ 中的 vector 的模拟实现【代码纯享】

文章目录 C 中的 vector 模拟实现1. vector 的基本概念2. vector 的基本操作3. vector 的模拟实现4.代码纯享5. 总结 C 中的 vector 模拟实现 在 C 中&#xff0c;vector 是一个非常重要的容器&#xff0c;它提供了动态数组的功能。在本篇博客中&#xff0c;我们将尝试模拟实现…...

UE4 方块排序动画

【动画效果】 入动画&#xff1a; 出动画&#xff1a; 【分析】 入动画&#xff1a;方块动画排序方式为Z字形&#xff0c;堆砌方向为X和Y轴向 出动画&#xff1a;方块动画排序方式为随机 【关键蓝图】 1.构建方块砌体 2.入/出动画...

网络与并发编程(一)

并发编程介绍_串行_并行_并发的区别 串行、并行与并发的区别 串行(serial)&#xff1a;一个CPU上&#xff0c;按顺序完成多个任务并行(parallelism)&#xff1a;指的是任务数小于等于cpu核数&#xff0c;即任务真的是一起执行的并发(concurrency)&#xff1a;一个CPU采用时间…...

超详细工具Navicat安装教程

Navicat是一款功能强大的数据库管理工具&#xff0c;可用于管理多种类型的数据库&#xff0c;包括MySQL、MariaDB、SQL Server、SQLite、Oracle和PostgreSQL等。以下是Navicat工具的一些主要特点和功能&#xff1a; 一.功能介绍 跨平台支持 多种数据库支持 直观的用户界面 数据…...

RN在android/ios手机剪切图片的操作

之前写过一个React Native调用摄像头画面及拍照和保存图片到相册全流程但是这个仅限于调用摄像头拍照并保存图片,今天再写一个版本的操作,这个博客目前实现的有三点操作: 调用摄像头拍照对照片进行剪切从相册选取图片 功能上面来说有两点: 点击按钮可以对摄像头进行拍照,拍完照…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...