Spring 系列
SpringBoot
实体类(Entity)层
实体类(Entity)通常属于模型层(Model Layer)或领域层(Domain Layer)。它们代表应用程序中的核心业务数据结构,与数据库表结构紧密对应。在 DDD(领域驱动设计)中,实体类也是领域模型的一部分,表示业务对象及其行为和关系。
Mapper 层和实体类的关系
Mapper 层或DAO 层(Data Access Object)确实是基于实体类来创建的。Mapper 层的主要职责是将数据库中的数据转换为实体类对象或者将实体类对象的数据保存到数据库中。换句话说,Mapper 层充当了数据库和实体类之间的桥梁。
架构示例
一个典型的应用分层架构可能是这样的:
- Controller 层:处理 HTTP 请求和响应。
- Service 层:包含业务逻辑。
- Mapper/DAO 层:与数据库交互,执行 CRUD 操作。
- Model/Entity 层:包含业务对象的定义。
让我们举一个完整的示例,展示这些层之间如何协作。
扩展: 为什么有的框架里没有Mapping/Repository层/文件夹(DAO 数据访问对象)? 例如nest里面, 使用typeorm库,直接在service里进行数据访问操作 。
这里就跟springboot的 JPA的 @Repository 与区别较大的 MyBatis 的 @Mapping层 有所不同
// 链接 --- 新的文章
JPA 和 mybatity 、 mybatity plus 使用及区别
@Autowired
注入的是 接口
为什么注入的是接口,而不是实现类 ?
@Configuration:
配置类注解 @Configuration 是用于定义和管理 Spring 容器中 Bean 的配置,特别是通过 Java 代码来替代传统的 XML 配置文件。而其他类注解(如 @Component, @Service, @Repository, @Controller)主要是用于标识和自动注册 Bean,分层管理业务逻辑和数据访问。
-
@Configuration特殊之处:- 提供配置和管理 Bean 的能力。
- 利用 CGLIB 代理机制确保单例 Bean。
- 用于整体配置和组织应用程序的配置。
-
其他类注解的用途:
- 标识不同层次(业务层、数据访问层、控制器层等)的 Bean。
- 自动注册和管理这些 Bean,但不直接参与 Bean 的配置过程。
这种分工明确的设计使得 Spring 框架在配置和管理应用程序组件时更加灵活和强大。
Spring Session
Spring Session 和标准的 HTTP Session 在功能和特点上有许多不同,虽然它们解决的问题领域有很多重叠之处。以下是他们的一些主要区别:
1. 存储位置
标准 HTTP Session:通常存储在单个应用服务器的内存中。这意味着,如果您的应用程序在多个服务器(如在负载均衡环境中)之间分布,每个服务器都有自己的独立的会话存储。这样会导致会话数据在不同服务器之间不共享。
Spring Session:支持将会话数据存储在外部存储中,如 Redis、MongoDB、JDBC 数据库等。这使得会话数据能够在多个服务器之间共享,从而支持分布式会话管理。
2. 失效和过期
标准 HTTP Session:会话在应用服务器重启或者会话超时后失效。会话通常是由容器(如 Tomcat、Jetty 等)管理的。
Spring Session:会话可以存储在持久化存储中(如 Redis),即使应用服务器重启,会话数据仍然可以保留。此外,通过 Spring 会话配置,可以精细化地控制会话的过期和失效策略。
3. 集群支持
标准 HTTP Session:在集群环境下,需要借助以下几种机制来解决会话共享问题:
- 会话粘连(Sticky Sessions):基于会话 ID 将请求定向到同一个服务器。
- 会话复制(Session Replication):在集群中的每个服务器之间复制会话数据。
- 共享会话存储(如 Redis、数据库等)。
Spring Session:天然支持集群环境,通过外部存储共享会话数据,无需额外的集群配置。只需要配置相应的存储策略,即可实现会话数据的跨服务器共享。
4. 安全和扩展性
标准 HTTP Session:提供基本的会话管理功能,但在安全性和可扩展性方面可能较为有限。
Spring Session:通过集成 Spring Security,可以进一步增强会话管理的安全性。此外,Spring Session 的模块化设计也使其更易于扩展和定制。
5. 简单配置
标准 HTTP Session:不需要额外配置,只需要在 web.xml 中进行基本配置。
Spring Session:需要进行 Spring 配置,但提供了更灵活和强大的功能,例如,可以通过注解和配置文件来简化配置过程。
使用示例
标准 HTTP Session
标准的 HTTP Session 使用是很简单的,它是由 Servlet 容器管理的。示例代码:
标准 HTTP Session
标准的 HTTP Session 使用是很简单的,它是由 Servlet 容器管理的。示例代码:HttpSession session = request.getSession();
session.setAttribute("key", "value");
Object value = session.getAttribute("key");Spring Session
Spring Session 更加灵活,下面是如何配置和使用 Spring Session(以 Redis 为存储示例):添加依赖:<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>配置 Redis:@Configuration@EnableRedisHttpSessionpublic class HttpSessionConfig {@Beanpublic LettuceConnectionFactory connectionFactory() {return new LettuceConnectionFactory();}}使用:@Autowiredprivate HttpSession session;session.setAttribute("key", "value");Object value = session.getAttribute("key");
简而言之,Spring Session 提供了更高级和灵活的会话管理功能,特别在分布式和集群环境下,更能体现其优势。
相关文章:
Spring 系列
SpringBoot 实体类(Entity)层 实体类(Entity)通常属于模型层(Model Layer)或领域层(Domain Layer)。它们代表应用程序中的核心业务数据结构,与数据库表结构紧密对应。在…...
基于opencv[python]的人脸检测
1 图片爬虫 这里的代码转载自:http://t.csdnimg.cn/T4R4F # 获取图片数据 import os.path import fake_useragent import requests from lxml import etree# UA伪装 head {"User-Agent": fake_useragent.UserAgent().random}pic_name 0 def request_pic…...
配置SSH公钥互信
目录 第一台主机:servera(172.25.250.101) 第一步:查看 . ssh目录下面是否为空 第二步:输入命令ssh-keygen 第三步: 再看查看一下. ssh目录 第四步: 输入命令 ssh-copy-id root172.25.250…...
WEB渗透Web突破篇-SQL注入(MSSQL)
注释符 -- 注释 /* 注释 */用户 SELECT CURRENT_USER SELECT user_name(); SELECT system_user; SELECT user;版本 SELECT version主机名 SELECT HOST_NAME() SELECT hostname;列数据库 SELECT name FROM master..sysdatabases; SELECT DB_NAME(N); — for N 0, 1, 2, ……...
DAY15
数组 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知 我们看到嵌套循环,应该马上就可以得到这个算法的…...
pytest结合allure-pytest插件生成测试报告
目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压,解压之后还要配置环境变量(把allure目录下bin目录配置到系统变量的path路径),下…...
详细解析用户提交咨询
上一篇文章中写到了使用Server-Sent Events (SSE),并获取message里面的内容。 本篇文章主要是写,具体该如何实现的具体代码,代码见下方,可直接拿 async submitConsult() {this.scrollToBottom();if (!this.$checkLogin()) return;…...
UDP/TCP协议解析
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
力扣94题(java语言)
题目 思路 使用一个栈来模拟递归的过程,以非递归的方式完成中序遍历(使用栈可以避免递归调用的空间消耗)。 遍历顺序步骤: 遍历左子树访问根节点遍历右子树 package algorithm_leetcode;import java.util.ArrayList; import java.util.List; import…...
JavaScript基础入门:构建动态Web世界的基石
简要介绍JavaScript作为互联网上最流行的编程语言之一,它在构建交互式网页、动态Web应用及服务器后端(通过Node.js)中的重要性。强调学习JS对于任何想要进入Web开发领域的人来说是不可或缺的。 1. JavaScript是什么? 定义JavaSc…...
01-client-go
想学习K8S源码,可以加 :mkjnnm 1、介绍 client-go 是用来和 k8s 集群交互的go语言客户端库,地址为:https://github.com/kubernetes/client-go client-go 的版本有两种标识方式: v0.x.y (For each v1.x.y Kubernetes…...
WebRTC QoS方法十三.2(Jitter延时的计算)
一、背景介绍 一些报文在网络传输中,会存在丢包重传和延时的情况。渲染时需要进行适当缓存,等待丢失被重传的报文或者正在路上传输的报文。 jitter延时计算是确认需要缓存的时间 另外,在检测到帧有重传情况时,也可适当在渲染时…...
PHP进阶:前后端交互、cookie验证、sql与php
单词:construct 构造 destruct 摧毁 empty 空的 trim 修剪 strip 清除 slash 斜线 special 特殊 char 字符 query 询问 构造方法(魔术方法) 构造方法是一种特殊的函数࿰…...
优思学院|ANOVA方差分析是什么?如何用EXCEL进行计算?
在数据分析、六西格玛管理领域中,ANOVA(方差分析)是一种基本的统计工具,广泛用于确定三组或三组以上的独立群体之间的平均值是否存在统计学上的显着差异。ANOVA的主要目的在于评估一个或多个因素的影响,通过比较不同样…...
Mindspore框架循环神经网络RNN模型实现情感分类|(三)RNN模型构建
Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|(二)预训练词向量 Mindspore框架循环神经网络RNN模型实现…...
深度解读大语言模型中的Transformer架构
一、Transformer的诞生背景 传统的循环神经网络(RNN)和长短期记忆网络(LSTM)在处理自然语言时存在诸多局限性。RNN 由于其递归的结构,在处理长序列时容易出现梯度消失和梯度爆炸的问题。这导致模型难以捕捉长距离的依…...
安装好anaconda,打开jupyter notebook,新建 报500错
解决办法: 打开anaconda prompt 输入 jupyter --version 重新进入jupyter notebook: 可以成功进入进行代码编辑...
C++20之设计模式:状态模式
状态模式 状态模式状态驱动的状态机手工状态机Boost.MSM 中的状态机总结 状态模式 我必须承认:我的行为是由我的状态支配的。如果我没有足够的睡眠,我会有点累。如果我喝了酒,我就不会开车了。所有这些都是状态(states),它们支配着我的行为:…...
数据库安全综合治理方案(可编辑54页PPT)
引言:数据库安全综合治理方案是一个系统性的工作,需要从多个方面入手,综合运用各种技术和管理手段,确保数据库系统的安全稳定运行。 方案介绍: 数据库安全综合治理方案是一个综合性的策略,旨在确保数据库系…...
人工智能:大语言模型提示注入攻击安全风险分析报告下载
大语言模型提示注入攻击安全风险分析报告下载 今天分享的是人工智能AI研究报告:《大语言模型提示注入攻击安全风险分析报告》。(报告出品方:大数据协同安全技术国家工程研究中心安全大脑国家新一代人工智能开放创新平台) 研究报告…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
