【SpringBoot】数据访问技术spring Data、 JDBC、MyBatis、JSR-303校验
Spring Boot 数据访问技术及特性
目录标题
- Spring Boot 数据访问技术及特性
- 摘要
- 1. 引言
- 2. Spring Data架构与原理
- 2.1 Spring Data概述
- 2.2 Spring Data核心组件
- 2.3 Spring Boot与Spring Data的集成机制
- 3. Spring Boot与JDBC的整合
- 3.1 JDBC整合流程
- 3.2 数据源自动配置
- 3.3 JdbcTemplate的使用
- 4. Spring Boot与MyBatis的整合
- 4.1 MyBatis整合架构
- 4.2 MyBatis自动配置
- 4.3 MyBatis整合实现
- 5. JSR-303数据校验
- 5.1 数据校验简介
- 5.2 实现数据校验
- 5.3 常用校验注解
- 6. 多环境配置
- 6.1 多环境配置概述
- 6.2 多环境配置实现
- 6.3 激活指定环境
- 6.4 配置文件加载优先级
- 7. 结论与展望
- 7.1 研究结论
- 7.2 实践建议
- 7.3 未来研究方向
摘要
本文深入研究了Spring Boot框架中的数据访问技术体系及其特性。首先探讨了Spring Data作为统一数据访问层的架构设计,分析了其对关系型和非关系型数据库的抽象机制;然后详细阐述了Spring Boot与JDBC和MyBatis的整合实现原理及最佳实践;最后研究了数据校验机制和多环境配置特性。研究表明,Spring Boot通过自动配置、启动器依赖和统一的抽象接口,显著简化了数据访问层开发工作,提高了应用程序的可维护性和开发效率。本研究为企业级Java应用开发提供了理论基础和实践指导。
关键词:Spring Boot;数据访问;JDBC;MyBatis;数据校验;多环境配置
1. 引言
在现代企业级应用开发中,数据访问层作为连接业务逻辑和底层数据存储的桥梁,其设计质量直接影响系统的性能、可扩展性和可维护性。Spring Boot作为当前Java生态系统中最流行的应用开发框架,通过"约定优于配置"的理念,为开发者提供了简化的数据访问解决方案。
然而,当面对多样化的数据存储技术(如关系型数据库、NoSQL数据库和内存数据库等)时,开发者常常需要学习和使用不同的API和配置方式,这大大增加了学习成本和开发复杂度。Spring Boot通过Spring Data项目,提供了统一的数据访问抽象,极大地简化了这一过程。
本研究旨在系统性地分析Spring Boot的数据访问技术体系,包括:
- Spring Data作为统一抽象层的架构设计与实现机制
- Spring Boot与JDBC的无缝整合及其自动配置原理
- Spring Boot与MyBatis的集成方案及最佳实践
- 基于JSR-303的数据校验机制
- 基于profile的多环境配置策略
通过对这些技术的深入研究,本文将为企业级应用开发者提供理论指导和实践参考,帮助他们更高效地构建数据访问层,提升应用系统的整体质量。
2. Spring Data架构与原理
2.1 Spring Data概述
Spring Data项目是Spring生态系统的核心组成部分,与Spring Boot、Spring Cloud并列为Spring框架的三大核心项目。其设计目标是为不同类型的数据存储技术提供统一、一致的编程模型,简化数据访问层的开发工作。
如图1所示,Spring Data通过分层架构,实现了对多种数据存储技术的统一抽象:
图1:Spring Data架构图
2.2 Spring Data核心组件
Spring Data的核心组件包括:
-
Spring Data Commons:提供了跨数据存储技术的通用抽象,包括Repository接口、查询方法解析机制、审计支持等。
-
Repository接口层级:定义了从基础Repository到功能更丰富的CrudRepository、PagingAndSortingRepository等接口,提供标准数据操作方法。
-
特定数据存储模块:包括Spring Data JPA、Spring Data JDBC、Spring Data MongoDB等,它们实现了特定数据存储技术的适配。
2.3 Spring Boot与Spring Data的集成机制
Spring Boot通过启动器(Starter)和自动配置机制与Spring Data无缝集成:
-
数据访问启动器:提供特定数据存储技术所需的依赖集合,如spring-boot-starter-data-jpa、spring-boot-starter-data-mongodb等。
-
自动配置:根据类路径检测到的依赖和配置属性,自动配置数据源、事务管理器、模板类等组件。
-
统一配置属性:通过spring.datasource.*、spring.jpa.*等命名空间,提供一致的配置方式。
3. Spring Boot与JDBC的整合
3.1 JDBC整合流程
Spring Boot提供了对JDBC的一流支持,通过自动配置机制,极大地简化了JDBC的使用。图2展示了Spring Boot与JDBC的整合流程:
图2:Spring Boot JDBC集成流程
3.2 数据源自动配置
Spring Boot的DataSourceAutoConfiguration
类负责数据源的自动配置:
-
默认数据源类型:Spring Boot 2.x默认使用HikariCP作为连接池实现,这是目前性能最佳的Java数据库连接池。
-
配置属性:通过
spring.datasource.*
属性进行配置:spring:datasource:url: jdbc:mysql://localhost:3306/testdb?serverTimezone=UTCusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driver
-
自定义数据源:可以通过
spring.datasource.type
属性指定其他数据源实现,如Druid、C3P0等。
3.3 JdbcTemplate的使用
Spring Boot自动配置了JdbcTemplate
,使其可以直接注入到应用组件中使用:
@RestController
public class UserController {@Autowiredprivate JdbcTemplate jdbcTemplate;@GetMapping("/users")public List<Map<String, Object>> getUsers() {String sql = "SELECT * FROM users";return jdbcTemplate.queryForList(sql);}@GetMapping("/user/{id}")public Map<String, Object> getUser(@PathVariable Long id) {String sql = "SELECT * FROM users WHERE id = ?";return jdbcTemplate.queryForMap(sql, id);}@PostMapping("/user")public String addUser(@RequestBody User user) {String sql = "INSERT INTO users(name, email) VALUES(?, ?)";jdbcTemplate.update(sql, user.getName(), user.getEmail());return "User added successfully";}
}
JdbcTemplate提供了多种数据库操作方法:
- 查询方法:
query()
、queryForList()
、queryForMap()
、queryForObject()
等 - 更新方法:
update()
、batchUpdate()
等 - 执行方法:
execute()
用于DDL操作
4. Spring Boot与MyBatis的整合
4.1 MyBatis整合架构
MyBatis是一款优秀的持久层框架,专注于SQL与Java对象的映射。Spring Boot通过mybatis-spring-boot-starter提供了与MyBatis的自动配置集成。图3展示了Spring Boot与MyBatis的整合架构:
图3:Spring Boot与MyBatis整合架构
4.2 MyBatis自动配置
MyBatis与Spring Boot的整合基于以下组件:
-
mybatis-spring-boot-starter:提供MyBatis所需的依赖集合和自动配置支持。
-
@Mapper注解:标记接口为MyBatis映射器,Spring Boot将自动扫描并注册。
-
SqlSessionFactory和SqlSessionTemplate:由Spring Boot自动配置,负责SQL会话的创建和管理。
4.3 MyBatis整合实现
以下是MyBatis与Spring Boot整合的关键步骤:
-
添加依赖:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version> </dependency>
-
配置数据源:与JDBC配置相同,通过
spring.datasource.*
属性。 -
创建实体类:
@Data @AllArgsConstructor @NoArgsConstructor public class User {private Long id;private String username;private String password; }
-
定义Mapper接口:
@Mapper @Repository public interface UserMapper {List<User> findAll();User findById(Long id);int insert(User user);int update(User user);int delete(Long id); }
-
创建XML映射文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"><select id="findAll" resultType="User">SELECT * FROM users</select><select id="findById" resultType="User">SELECT * FROM users WHERE id = #{id}</select><insert id="insert" parameterType="User">INSERT INTO users (username, password) VALUES (#{username}, #{password})</insert><update id="update" parameterType="User">UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}</update><delete id="delete">DELETE FROM users WHERE id = #{id}</delete> </mapper>
-
配置MyBatis(可选):
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.entityconfiguration:map-underscore-to-camel-case: true
-
创建控制器:
@RestController @RequestMapping("/users") public class UserController {@Autowiredprivate UserMapper userMapper;@GetMappingpublic List<User> getAllUsers() {return userMapper.findAll();}@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userMapper.findById(id);}@PostMappingpublic String addUser(@RequestBody User user) {userMapper.insert(user);return "User added successfully";} }
5. JSR-303数据校验
5.1 数据校验简介
数据校验是确保应用数据完整性和有效性的重要机制。Spring Boot支持基于JSR-303(Bean Validation)标准的声明式数据校验。图4展示了JSR-303数据校验流程:
图4:JSR-303数据校验流程
5.2 实现数据校验
Spring Boot集成数据校验的步骤如下:
-
添加依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>
-
在实体类上添加校验注解:
@Data public class User {@NotNull(message = "ID不能为空")private Long id;@NotBlank(message = "用户名不能为空")@Size(min = 4, max = 20, message = "用户名长度必须在4-20之间")private String username;@Email(message = "邮箱格式不正确")private String email;@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,}$", message = "密码必须至少8位,包含大小写字母和数字")private String password; }
-
在控制器中启用校验:
@RestController @RequestMapping("/users") public class UserController {@PostMappingpublic ResponseEntity<Object> createUser(@Valid @RequestBody User user, BindingResult result) {if (result.hasErrors()) {Map<String, String> errors = new HashMap<>();result.getFieldErrors().forEach(error -> errors.put(error.getField(), error.getDefaultMessage()));return ResponseEntity.badRequest().body(errors);}// 处理有效请求return ResponseEntity.ok(user);} }
5.3 常用校验注解
JSR-303规范提供了丰富的校验注解,主要包括:
-
空值校验:
@Null
:必须为null@NotNull
:不能为null@NotEmpty
:不能为null且不能为空(适用于集合、数组、字符串)@NotBlank
:不能为null且不能为空白字符(仅适用于字符串)
-
布尔校验:
@AssertTrue
:必须为true@AssertFalse
:必须为false
-
范围校验:
@Min
:不能小于指定值@Max
:不能大于指定值@Size
:长度或大小必须在指定范围内@Digits
:数字的整数部分和小数部分的位数必须在指定范围内
-
正则表达式校验:
@Pattern
:必须匹配正则表达式
-
日期校验:
@Past
:必须是过去的日期@Future
:必须是将来的日期
-
其他校验:
@Email
:必须是有效的电子邮件地址@CreditCardNumber
:必须是有效的信用卡号码
6. 多环境配置
6.1 多环境配置概述
在软件开发生命周期中,应用通常需要在不同环境(开发、测试、生产等)中运行,每个环境可能需要不同的配置。Spring Boot通过profile机制提供了灵活的多环境配置支持,如图5所示:
图5:Spring Boot多环境配置
6.2 多环境配置实现
Spring Boot支持多种方式实现多环境配置:
-
多配置文件方式:
创建特定环境的配置文件,命名格式为application-{profile}.properties/yml
:application-dev.properties
:开发环境配置application-test.properties
:测试环境配置application-prod.properties
:生产环境配置
-
YAML多文档块方式:
在单个YAML文件中使用---
分隔不同环境的配置:# 默认配置 spring:application:name: myapp server:port: 8080--- # 开发环境配置 spring:profiles: devdatasource:url: jdbc:mysql://localhost:3306/devdbusername: devpassword: dev123--- # 测试环境配置 spring:profiles: testdatasource:url: jdbc:mysql://localhost:3306/testdbusername: testpassword: test123--- # 生产环境配置 spring:profiles: proddatasource:url: jdbc:mysql://prod-server:3306/proddbusername: prodpassword: prod123
6.3 激活指定环境
激活特定环境的配置有多种方式:
-
在主配置文件中指定:
# application.properties spring.profiles.active=dev
或YAML格式:
# application.yml spring:profiles:active: dev
-
通过命令行参数:
java -jar myapp.jar --spring.profiles.active=prod
-
通过环境变量:
export SPRING_PROFILES_ACTIVE=prod java -jar myapp.jar
-
通过JVM系统属性:
java -Dspring.profiles.active=prod -jar myapp.jar
6.4 配置文件加载优先级
Spring Boot按照以下优先级(从高到低)加载配置文件:
- 命令行参数
SPRING_APPLICATION_JSON
环境变量或系统属性java:comp/env
中的JNDI属性- 系统环境变量
- 随机生成的属性(
RandomValuePropertySource
) - 项目路径外的
application-{profile}.properties
或YAML文件 - 项目路径内的
application-{profile}.properties
或YAML文件 - 项目路径外的
application.properties
或YAML文件 - 项目路径内的
application.properties
或YAML文件 @Configuration
类上的@PropertySource
注解- 默认属性
7. 结论与展望
7.1 研究结论
本研究深入分析了Spring Boot数据访问技术体系及其特性,得出以下结论:
-
Spring Boot通过Spring Data提供了统一的数据访问抽象,有效解决了不同数据存储技术的集成问题。
-
Spring Boot与JDBC的整合采用自动配置方式,默认使用高性能的HikariCP连接池,并自动配置JdbcTemplate,极大简化了JDBC的使用。
-
Spring Boot与MyBatis的整合通过mybatis-spring-boot-starter实现,简化了MyBatis的配置和使用流程。
-
JSR-303数据校验机制提供了声明式的数据验证方式,确保了数据的完整性和有效性。
-
多环境配置支持使Spring Boot应用能够灵活适应不同的运行环境,提高了应用的可移植性和可维护性。
7.2 实践建议
基于本研究,我们提出以下实践建议:
-
选择适当的数据访问技术:根据项目需求选择合适的数据访问技术,对于简单CRUD操作,可以使用Spring Data JPA;对于复杂SQL查询,可以选择MyBatis或JDBC。
-
合理配置数据源:根据应用场景配置合适的连接池参数,如连接池大小、超时时间等,以优化性能。
-
实施严格的数据校验:在API边界处使用JSR-303校验,确保数据的有效性,提高系统稳定性。
-
优化多环境配置:将共享配置放在主配置文件中,环境特定配置放在profile配置文件中,避免配置冗余。
-
采用统一的命名约定:如使用
application-{env}.yml
命名配置文件,使配置更易于识别和管理。
7.3 未来研究方向
未来研究可以进一步探索以下方向:
-
Spring Boot与非关系型数据库(如MongoDB、Redis、Elasticsearch)的整合模式与最佳实践。
-
Spring Boot应用在云原生环境中的数据访问策略,如Kubernetes中的数据库连接管理。
-
响应式数据访问(如Spring Data R2DBC)在Spring Boot中的应用与性能分析。
-
Spring Boot数据访问层的安全防护措施,如SQL注入防御、敏感数据加密等。
相关文章:
【SpringBoot】数据访问技术spring Data、 JDBC、MyBatis、JSR-303校验
Spring Boot 数据访问技术及特性 目录标题 Spring Boot 数据访问技术及特性摘要1. 引言2. Spring Data架构与原理2.1 Spring Data概述2.2 Spring Data核心组件2.3 Spring Boot与Spring Data的集成机制 3. Spring Boot与JDBC的整合3.1 JDBC整合流程3.2 数据源自动配置3.3 JdbcTe…...
直装永久授权,最新专业版集成VB7
无论是学生、教师还是职场工作人员,办公软件在日常工作和学习中都是不可或缺的重要工具。在众多办公软件中,微软的Microsoft Office和金山软件的WPS Office最常用的选择。对于许多使用要求不高的小伙伴而言,WPS Office因其易用性和免费版本的…...
Ollama 框架本地部署教程:开源定制,为AI 项目打造专属解决方案!
Ollama 是一款开源的本地大语言模型(LLM)运行框架,用于管理和运行语言模型。具有以下核心特点: 开源可定制:采用 MIT 开源协议,开发者能自由使用、阅读源码并定制,可根据自身需求进行功能扩展和…...
【单片机项目】电源如何扩展、电源模块、电池模块如何接线
一、前言 解决2个关键问题: 【1】如果项目编号小于172之前的项目。 可能会遇到电源模块不够接,需要扩展电源的问题。 【2】如果项目编号是大于 172之后项目,部分项目用到了稳压电源模块或者是电池模块。 这篇文章单独讲解一下如何接线。 …...
汽车智能钥匙中PKE低频天线的作用
PKE(Passive Keyless Entry)即被动式无钥匙进入系统,汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用,以下是其具体作用: 信号交互与身份认证 低频信号接收:当车主靠近车辆时…...
mongodb安装教程以及mongodb的使用
MongoDB是由C语言编写的一种面向文档的NoSQL数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。与传统的关系型数据库(如 MySQL 或 PostgreSQL)不同,MongoDB 存储数据的方式是以 BSON(类似于 JSON 的二进制格式…...
SpringMVC学习(controller层加载控制与(业务、功能)bean加载控制、Web容器初始化配置类)(3)
目录 一、SpringMVC、Spring的bean加载控制。 (1)实际开发的包结构层次。 (2)如何"精准"控制两个容器分别加载各自bean。(分析) <1>SpringMVC相关bean加载控制。(方法) <2>Spring相关bean加载控制。(方法) …...
redis基础结构
title: redis基础结构 date: 2025-03-04 08:39:12 tags: redis categories: redis笔记 Redis入门 (NoSQL, Not Only SQL) 非关系型数据库 关系型数据库:以 表格 的形式存在,以 行和列 的形式存取数据,一系列的行和列被…...
树莓派学习(一)——3B+环境配置与多用户管理及编程实践
树莓派学习(一)——3B环境配置与多用户管理及编程实践 一、实验目的 掌握树莓派3B无显示器安装与配置方法。学习Linux系统下多用户账号的创建与管理。熟悉在树莓派上使用C语言和Python3编写简单程序的方法。 二、实验环境 硬件设备:树莓派…...
【音视频】ffplay播放控制
一、ffplay播放控制 1.1、ffplay打开视频 比如我当前目录下现在有一个1.mp4的视频,可以使用下面的命令用ffplay打开并播放它 ffplay 1.mp4输入后回车即可打开相应的视频 1.2 ffplay播放控制 使用q、ESC退出播放按f、双击切换全屏状态按m切换为静音按9减少音量&a…...
【智能体Agent】ReAct智能体的实现思路和关键技术
基于ReAct(Reasoning Acting)框架的自主智能体 import re from typing import List, Tuplefrom langchain_community.chat_message_histories.in_memory import ChatMessageHistory from langchain_core.language_models.chat_models import BaseChatM…...
Redis系列之慢查询分析与调优
Redis 慢查询分析与优化:提升性能的实战指南 Redis 作为一款高性能的内存数据库,因其快速的数据读写能力和灵活的数据结构,被广泛应用于缓存、消息队列、排行榜等多种业务场景。然而,随着业务规模的扩大和数据量的增加࿰…...
分布式锁—2.Redisson的可重入锁一
大纲 1.Redisson可重入锁RedissonLock概述 2.可重入锁源码之创建RedissonClient实例 3.可重入锁源码之lua脚本加锁逻辑 4.可重入锁源码之WatchDog维持加锁逻辑 5.可重入锁源码之可重入加锁逻辑 6.可重入锁源码之锁的互斥阻塞逻辑 7.可重入锁源码之释放锁逻辑 8.可重入锁…...
大模型巅峰对决:DeepSeek vs GPT-4/Claude/PaLM-2 全面对比与核心差异揭秘
文章目录 一、架构设计深度解剖1.1 核心架构对比图谱1.2 动态MoE架构实现架构差异分析表 二、训练策略全面对比2.1 训练数据工程对比2.2 分布式训练代码对比DeepSeek混合并行实现GPT-4 Megatron实现对比 2.3 关键训练参数对比 三、性能表现多维评测3.1 基准测试全景对比3.2 推理…...
解决各大浏览器中http地址无权限调用麦克风摄像头问题(包括谷歌,Edge,360,火狐)后续会陆续补充
项目场景: 在各大浏览器中http地址调用电脑麦克风摄像头会没有权限,http协议无法使用多媒体设备 原因分析: 为了用户的隐私安全,http协议无法使用多媒体设备。因为像摄像头和麦克风属于可能涉及重大隐私问题的API,ge…...
Linux - 网络套接字
一、网络编程 1)地址结构 1. IP地址结构 struct in_addr:是用于表示 IPv4 地址 的结构体,定义在头文件 <netinet/in.h> 中。它的主要作用是存储一个 32 位的 IPv4 地址,通常与 struct sockaddr_in 一起使用。 struct in_a…...
Oracle数据库监听学习
官方文档: Net Services Administrators Guide Net Services Reference 一、动态注册 1.实例启动后,LREG 进程每分钟自动将服务名(service_name)注册到监听器中 也可以通过 alter system register 命令实现立刻注册。&#x…...
利率债、信用债、可转债区别与优势
利率债、信用债、城投债和可转债是债券市场的主要品种,它们在发行主体、风险收益特征和投资优势上各有不同。以下是它们的区别和优势: 1. 利率债 定义:利率债是由政府或政府支持的机构发行的债券,主要包括国债、政策性金融债&…...
C语言番外篇(4)------------------>VS环境下源码的隐藏
假设你是一个优秀的程序员,开发了一款功能十分强大的计算器。现在有一家做计算器的公司看上了你的功能,想通过每一年给你几万块钱使用这个功能。那我们是只提供一个头文件和静态库给他们使用这个功能就行呢?还是连同源代码一起给这家公司呢&a…...
Java集合
写在前面 本人在学习JUC过程中学习到集合和并发时有许多稀碎知识点 需要总结梳理思路与知识点 本文内容会涉及到ArrayList,HashMap以及扩容机制,ConcurrentHashMap,Synchronized,Volatile,ReentrantLock,…...
el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头
光标上移 设置 el-input 的 typenumber后,只能输入数字,输入中文后会自动清空,但是会出现一个问题:【光标会上移,如下图】 解决方法:修改样式 注意:需要使用样式穿透 :deep( ) /*解决el-in…...
迷你世界脚本自定义UI接口:Customui
自定义UI接口:Customui 彼得兔 更新时间: 2024-11-07 15:12:42 具体函数名及描述如下:(除前两个,其余的目前只能在UI编辑器内部的脚本使用) 序号 函数名 函数描述 1 openUIView(...) 打开一个UI界面(注意…...
解决windows npm无法下载electron包的问题
1.将nsis.zip解压到C:\Users\XXX\AppData\Local\electron-builder\Cache 2.将winCodeSign.zip解压到C:\Users\XXX\AppData\Local\electron-builder\Cache 3.将electron-v20.3.8-win32-ia32.zip复制到C:\Users\XXX\AppData\Local\electron\Cache 4.将electron-v20.3.8-win32-…...
Notepad++ 8.6.7 安装与配置全攻略(Windows平台)
一、软件定位与核心优势 Notepad 是开源免费的代码/文本编辑器,支持超过80种编程语言的高亮显示,相比系统自带记事本具有以下优势: 轻量高效:启动速度比同类软件快30%插件扩展:支持NppExec、JSON Viewer等200插件跨文…...
Unity InputField + ScrollRect实现微信聊天输入框功能
1、实现动态高度尺寸的的InputField 通过这两个部件就可以实现inputField的动态改变尺寸。 将inputField放入到scrollview当中作为子类 将scrollview 链接到UIChatInputField脚本中。 2、实现UIChatInputField //聊天输入框(类似wechat) [RequireComp…...
Java-servlet(三)Java-servlet-Web环境搭建(下)详细讲解利用maven和tomcat搭建Java-servlet环境
Java-servlet(三)Java-servlet-Web环境搭建(下)利用maven和tomcat搭建Java-servlet环境 前言一、配置maven阿里镜像二、利用IDEA创建maven文件创建maven文件删除src文件创建新的src模版删除example以及org文件 三、在第二个xml文件…...
在 CLion 中使用 Boost.Test 进行 C++ 单元测试
1. 安装 Boost.Test Boost.Test 是 Boost C 库的一部分,因此需要安装完整的 Boost 库。 方法 1:使用包管理器安装(推荐) Windows(vcpkg) 直接使用 CLion 集成的 vcpkg安装 boost-test: 也可…...
极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
文本处理Bert面试内容整理-BERT的预训练任务是什么?
BERT的预训练任务主要有两个,分别是 Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。这两个任务帮助BERT学习从大规模未标注文本中提取深层次的语义和上下文信息。 1. Masked Language Model (MLM)(掩码语言模型)...
【蓝桥杯】每天一题,理解逻辑(3/90)【Leetcode 快乐数】
闲话系列:每日一题,秃头有我,Hello!!!!!,我是IF‘Maxue,欢迎大佬们来参观我写的蓝桥杯系列,我好久没有更新博客了,因为up猪我寒假用自己的劳动换了…...
“深入浅出”系列之Linux篇:(10)基于C++实现分布式网络通信RPC框架
分布式网络通信rpc框架 项目是分布式网络通信rpc框架, 文中提到单机服务器的缺点: 硬件资源的限制影响并发:受限于硬件资源,聊天服务器承受的用户的并发有限 模块的编译部署难:任何模块小的修改,都导致整…...
Python的那些事第四十一篇:简化数据库交互的利器Django ORM
Django ORM:简化数据库交互的利器 摘要 随着互联网技术的飞速发展,Web开发越来越受到重视。Django作为一款流行的Python Web框架,以其高效、安全、可扩展等特点受到了广大开发者的喜爱。其中,Django ORM(对象关系映射)是Django框架的核心组件之一,它为开发者提供了一种…...
[自动驾驶-传感器融合] 多激光雷达的外参标定
文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人,每个雷达的位置和姿态不同,需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系(…...
初学STM32之简单认识IO口配置(学习笔记)
在使用51单片机的时候基本上不需要额外的配置IO,不过在使用特定的IO的时候需要额外的设计外围电路,比如PO口它是没有内置上拉电阻的。因此若想P0输出高电平,它就需要外接上拉电平。(当然这不是说它输入不需要上拉电阻,…...
【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)
背景: 已经用这个脚本的记得设置Wifi时候,关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开,一天要重新连接,点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本,那样我就可以解放双手&…...
powermock,mock使用笔记
介于日本的形式主义junit4单体测试,特记笔记,以下纯用手机打出来,因为电脑禁止复制粘贴。 pom文件 powermock-module-junit1.7.4 powermock-api-mokcito 1.7.4 spring-test 8 1,测试类头部打注解 RunWith(PowerMockRunner.class…...
大模型微调实战指南
1. 引言 在人工智能领域,大模型(如GPT、BERT、DeepSeek等)已经展现出了强大的通用能力。然而,要让这些模型在特定任务或领域中发挥最佳性能,微调(Fine-tuning)是必不可少的一步。本文将带你从零…...
计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
HTML第四节
一.复合选择器 1.后代选择器 注:1.后代选择器会选中后代所有的要选择的标签 2.儿子选择器 3.并集选择器 注:1.注意换行,同时选中多种标签 4.交集选择器 注:1.标签选择器放在最前面,例如放在类选择器的前面 2.两个选择…...
Kubernetes 的正式安装
1.基础的网络结构说明 软件路由器 ikuai 当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的 为了防止出现问题 我们可以把第二块网卡临时关闭一下 2.准备路由器 ikuai 爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)…...
VS2022C#windows窗体应用程序调用DeepSeek API
目录 一、创建DeepSeek API Key 二、创建窗体应用程序 三、设计窗体 1、控件拖放布局 2、主窗体【Form1】设计 3、多行文本框【tbContent】 4、提交按钮【btnSubmit】 5、单行文字框 四、撰写程序 五、完整代码 六、运行效果 七、其它 一、创建DeepSeek API Ke…...
7. 机器人记录数据集(具身智能机器人套件)
1. 树莓派启动机器人 conda activate lerobotpython lerobot/scripts/control_robot.py \--robot.typelekiwi \--control.typeremote_robot2. huggingface平台配置 huggingface官网 注册登录申请token(要有写权限)安装客户端 # 安装 pip install -U …...
阿里云操作系统控制台——ECS操作与性能优化
引言:在数字化时代,云服务器作为强大的计算资源承载平台,为企业和开发者提供了灵活且高效的服务。本文将详细介绍如何一步步操作云服务器 ECS,从开通到组件安装,再到内存全景诊断,帮助快速上手,…...
在飞腾E2000Q开发板上,基于RT-Thread操作系统,实现DeepSeek语音交互
目录 一 ,简介 二 ,流程与结果分享 1. Phytium E2000q demo开发板连接 2. RT-Thread Kconfig 配置选择 (1)驱动 (2)软件包 3. 主要代码 (1)录音功能,将录音结果保存…...
navicat导出postgresql的数据库结构、字段名、备注等等
1、执行sql语句 SELECT A.attnum AS "序号",C.relname AS "表名",CAST ( obj_description ( relfilenode, pg_class ) AS VARCHAR ) AS "表名描述",A.attname AS "字段名称",A.attnotnull as "是否不为null",(case when A…...
K8s 1.27.1 实战系列(三)安装网络插件
Kubernetes 的网络插件常见的有 Flannel 和 Calico ,这是两种主流的 CNI(容器网络接口)解决方案,它们在设计理念、实现方式、性能特征及适用场景上有显著差异。以下是两者的综合对比分析: 一、Flannel 和 Calico 1. 技术基础与网络实现 Flannel 核心机制:基于 Overlay …...
Python实现鼠标点击获取窗口进程信息
最近遇到挺无解的一个问题:电脑上莫名其妙出现一个白色小方块,点击没有反应,关也关不掉,想知道它和哪个软件有关还是显卡出了问题,也找不到思路,就想着要不获取一下它的进程号看看。 于是写了一个Python脚本…...
文件解析:doc、docx、pdf
1.doc解析 ubuntu/debian系统应先安装工具 apt-get install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr \ flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig pip install textract解析: import te…...
JDBC 完全指南:掌握 Java 数据库交互的核心技术
JDBC 完全指南:掌握 Java 数据库交互的核心技术 一、JDBC 是什么?为什么它如此重要? JDBC(Java Database Connectivity)是 Java 语言中用于连接和操作关系型数据库的标准 API。它允许开发者通过统一的接口访问不同的数…...
【STM32】STM32系列产品以及新手入门的STM32F103
📢 STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU,适用于工业、汽车、消费电子等领域;基于 ARM Cortex-M3,主频最高 72MHz,支持 512KB Flash、64KB SRAM,适合复杂嵌入式应用,提供丰富的…...