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

【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的数据访问技术体系,包括:

  1. Spring Data作为统一抽象层的架构设计与实现机制
  2. Spring Boot与JDBC的无缝整合及其自动配置原理
  3. Spring Boot与MyBatis的集成方案及最佳实践
  4. 基于JSR-303的数据校验机制
  5. 基于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的核心组件包括:

  1. Spring Data Commons:提供了跨数据存储技术的通用抽象,包括Repository接口、查询方法解析机制、审计支持等。

  2. Repository接口层级:定义了从基础Repository到功能更丰富的CrudRepository、PagingAndSortingRepository等接口,提供标准数据操作方法。

  3. 特定数据存储模块:包括Spring Data JPA、Spring Data JDBC、Spring Data MongoDB等,它们实现了特定数据存储技术的适配。

2.3 Spring Boot与Spring Data的集成机制

Spring Boot通过启动器(Starter)和自动配置机制与Spring Data无缝集成:

  1. 数据访问启动器:提供特定数据存储技术所需的依赖集合,如spring-boot-starter-data-jpa、spring-boot-starter-data-mongodb等。

  2. 自动配置:根据类路径检测到的依赖和配置属性,自动配置数据源、事务管理器、模板类等组件。

  3. 统一配置属性:通过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类负责数据源的自动配置:

  1. 默认数据源类型:Spring Boot 2.x默认使用HikariCP作为连接池实现,这是目前性能最佳的Java数据库连接池。

  2. 配置属性:通过spring.datasource.*属性进行配置:

    spring:datasource:url: jdbc:mysql://localhost:3306/testdb?serverTimezone=UTCusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driver
    
  3. 自定义数据源:可以通过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的整合基于以下组件:

  1. mybatis-spring-boot-starter:提供MyBatis所需的依赖集合和自动配置支持。

  2. @Mapper注解:标记接口为MyBatis映射器,Spring Boot将自动扫描并注册。

  3. SqlSessionFactory和SqlSessionTemplate:由Spring Boot自动配置,负责SQL会话的创建和管理。

4.3 MyBatis整合实现

以下是MyBatis与Spring Boot整合的关键步骤:

  1. 添加依赖

    <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version>
    </dependency>
    
  2. 配置数据源:与JDBC配置相同,通过spring.datasource.*属性。

  3. 创建实体类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {private Long id;private String username;private String password;
    }
    
  4. 定义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);
    }
    
  5. 创建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>
    
  6. 配置MyBatis(可选):

    mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.entityconfiguration:map-underscore-to-camel-case: true
    
  7. 创建控制器

    @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集成数据校验的步骤如下:

  1. 添加依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    
  2. 在实体类上添加校验注解

    @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;
    }
    
  3. 在控制器中启用校验

    @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规范提供了丰富的校验注解,主要包括:

  1. 空值校验

    • @Null:必须为null
    • @NotNull:不能为null
    • @NotEmpty:不能为null且不能为空(适用于集合、数组、字符串)
    • @NotBlank:不能为null且不能为空白字符(仅适用于字符串)
  2. 布尔校验

    • @AssertTrue:必须为true
    • @AssertFalse:必须为false
  3. 范围校验

    • @Min:不能小于指定值
    • @Max:不能大于指定值
    • @Size:长度或大小必须在指定范围内
    • @Digits:数字的整数部分和小数部分的位数必须在指定范围内
  4. 正则表达式校验

    • @Pattern:必须匹配正则表达式
  5. 日期校验

    • @Past:必须是过去的日期
    • @Future:必须是将来的日期
  6. 其他校验

    • @Email:必须是有效的电子邮件地址
    • @CreditCardNumber:必须是有效的信用卡号码

6. 多环境配置

6.1 多环境配置概述

在软件开发生命周期中,应用通常需要在不同环境(开发、测试、生产等)中运行,每个环境可能需要不同的配置。Spring Boot通过profile机制提供了灵活的多环境配置支持,如图5所示:

在这里插入图片描述

图5:Spring Boot多环境配置

6.2 多环境配置实现

Spring Boot支持多种方式实现多环境配置:

  1. 多配置文件方式
    创建特定环境的配置文件,命名格式为application-{profile}.properties/yml

    • application-dev.properties:开发环境配置
    • application-test.properties:测试环境配置
    • application-prod.properties:生产环境配置
  2. 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 激活指定环境

激活特定环境的配置有多种方式:

  1. 在主配置文件中指定

    # application.properties
    spring.profiles.active=dev
    

    或YAML格式:

    # application.yml
    spring:profiles:active: dev
    
  2. 通过命令行参数

    java -jar myapp.jar --spring.profiles.active=prod
    
  3. 通过环境变量

    export SPRING_PROFILES_ACTIVE=prod
    java -jar myapp.jar
    
  4. 通过JVM系统属性

    java -Dspring.profiles.active=prod -jar myapp.jar
    

6.4 配置文件加载优先级

Spring Boot按照以下优先级(从高到低)加载配置文件:

  1. 命令行参数
  2. SPRING_APPLICATION_JSON环境变量或系统属性
  3. java:comp/env中的JNDI属性
  4. 系统环境变量
  5. 随机生成的属性(RandomValuePropertySource
  6. 项目路径外的application-{profile}.properties或YAML文件
  7. 项目路径内的application-{profile}.properties或YAML文件
  8. 项目路径外的application.properties或YAML文件
  9. 项目路径内的application.properties或YAML文件
  10. @Configuration类上的@PropertySource注解
  11. 默认属性

7. 结论与展望

7.1 研究结论

本研究深入分析了Spring Boot数据访问技术体系及其特性,得出以下结论:

  1. Spring Boot通过Spring Data提供了统一的数据访问抽象,有效解决了不同数据存储技术的集成问题。

  2. Spring Boot与JDBC的整合采用自动配置方式,默认使用高性能的HikariCP连接池,并自动配置JdbcTemplate,极大简化了JDBC的使用。

  3. Spring Boot与MyBatis的整合通过mybatis-spring-boot-starter实现,简化了MyBatis的配置和使用流程。

  4. JSR-303数据校验机制提供了声明式的数据验证方式,确保了数据的完整性和有效性。

  5. 多环境配置支持使Spring Boot应用能够灵活适应不同的运行环境,提高了应用的可移植性和可维护性。

7.2 实践建议

基于本研究,我们提出以下实践建议:

  1. 选择适当的数据访问技术:根据项目需求选择合适的数据访问技术,对于简单CRUD操作,可以使用Spring Data JPA;对于复杂SQL查询,可以选择MyBatis或JDBC。

  2. 合理配置数据源:根据应用场景配置合适的连接池参数,如连接池大小、超时时间等,以优化性能。

  3. 实施严格的数据校验:在API边界处使用JSR-303校验,确保数据的有效性,提高系统稳定性。

  4. 优化多环境配置:将共享配置放在主配置文件中,环境特定配置放在profile配置文件中,避免配置冗余。

  5. 采用统一的命名约定:如使用application-{env}.yml命名配置文件,使配置更易于识别和管理。

7.3 未来研究方向

未来研究可以进一步探索以下方向:

  1. Spring Boot与非关系型数据库(如MongoDB、Redis、Elasticsearch)的整合模式与最佳实践。

  2. Spring Boot应用在云原生环境中的数据访问策略,如Kubernetes中的数据库连接管理。

  3. 响应式数据访问(如Spring Data R2DBC)在Spring Boot中的应用与性能分析。

  4. 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…...

手机放兜里,支付宝“碰一下”被盗刷?

大家好&#xff0c;我是小悟。 近期&#xff0c;网络上关于“支付宝‘碰一下’支付易被盗刷”的传言甚嚣尘上&#xff0c;不少用户对此心生疑虑。 首先&#xff0c;要明确一点&#xff1a;“碰一下”支付并不会像某些传言中所描述的那样容易被隔空盗刷。这一观点已经得到了支付…...

Java Web应用中获取客户端的真实IP地址

Java Web应用中获取客户端的真实IP地址,尤其在存在代理服务器的情况下。 代码示例: public static String getClientIP(HttpServletRequest request) {String ip = parseCommaSeparatedIPs(request.getHeader("X-Forwarded-For"));if (isInvalid(ip)) {ip = pars…...

vue框架后遗症∶被遗忘的dom操作

用多了vue、react等前端框架&#xff0c;不得不说用数据驱动视图来开发真的很香&#xff0c;但是也免不了会有不用这些框架的项目&#xff0c;dom操作还是很有必要的&#xff0c;一开始学习网页设计的时候就教过&#xff0c;后面一直开发项目基本上用框架。虽然有些想不起来了&…...

基于深度学习+NLP豆瓣电影数据爬虫可视化推荐系统

博主介绍&#xff1a;资深开发工程师&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有…...

8. 示例:对32位数据总线实现位宽和值域覆盖

文章目录 前言示例一&#xff1a;示例二&#xff1a;示例三&#xff1a;仿真与覆盖率分析覆盖点详细说明覆盖率提升技巧常见错误排查 示例四&#xff1a;仿真步骤 前言 针对32位数据总线实现位宽和值域的覆盖&#xff0c;并且能够用xrun运行&#xff0c;查看日志和波形。cover…...

深度剖析Seata源码:解锁分布式事务处理的核心逻辑

文章目录 写在文章开头如何使用源码(配置转掉)基于AT模式详解Seata全链路流程Seata服务端启动本地服务如何基于GlobalTransaction注解开启事务客户端如何开启分布式事务RM和TC如何协调处理分支事务RM生成回滚日志事务全局提交与回滚小结参考写在文章开头 在当今分布式系统日益…...

快速列出MS Word中所有可用字体

Word中有很多字体&#xff0c;虽然在字体下拉列表中提供了字体的样例&#xff0c;但是并不全面&#xff0c;例如使用Batang字体的话&#xff0c;数字会显示成什么效果&#xff0c;就无法直观的看到。 打开Word应用程序&#xff0c;新建一个空白文档&#xff0c;按AltF11打开VBE…...

SpringDataJPA使用deleteAllInBatch方法逻辑删除失效

概述 在使用Spring Boot JPA时&#xff0c;执行批量删除操作时&#xff0c;遇到逻辑删除失效的问题。具体而言&#xff0c;当使用deleteAllInBatch方法时&#xff0c;数据会被物理删除&#xff0c;而不是进行逻辑删除&#xff1b;但是当使用deleteAll时&#xff0c;逻辑删除操…...

【密码学实战】Java 实现 SM2 国密算法(签名带id、验签及 C1C3C2 加密解密)

前言 SM2是中国国家密码管理局发布的椭圆曲线公钥密码算法标准&#xff08;GB/T 32918&#xff09;&#xff0c;属于国密算法体系。与RSA和ECDSA相比&#xff0c;SM2在相同安全强度下密钥更短、计算效率更高。本文将介绍如何在Java中实现SM2的密钥生成、数字签名、验签、加密及…...

flex布局自定义一行几栏,靠左对齐===grid布局

模板 <div class"content"><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"…...

Harmony os next~鸿蒙应用开发入门教程

鸿蒙应用开发入门教程 基础准备与环境搭建 1. 了解鸿蒙系统 1.1 核心理念学习 HarmonyOS&#xff08;鸿蒙系统&#xff09;是华为推出的全场景分布式操作系统&#xff0c;其核心特点如下&#xff1a; 分布式能力 设备协同&#xff1a;手机、平板、智能手表、IoT设备等可无…...

使用 Ansys Discovery 高效创建角焊缝

概括 Ansys Discovery 2024R1 中的焊缝功能是一项重大改进&#xff0c;旨在简化和精简工程模拟中焊缝的分配过程。此功能集成了间歇焊缝等高级工具和功能&#xff0c;以更直观、更高效的方式促进焊缝的准备和分配。 该功能为工程师提供了无缝的工作流程&#xff0c;以准备和分…...

Rk3568驱动开发_新字符设备驱动原理_7

1.申请设备号&#xff1a; 之前用的是register_chrdev(LED_MAJOR, LED_NAME, &led_fops);手动申请很不方便 使用alloc_chrdev_region函数申请设备号&#xff0c;手动申请的话要先查询是否有空余的设备号&#xff0c;很不方便&#xff0c;用此函数内核会自动将将空余设备号…...

ESP32-S3 42引脚 语音控制模块、设备运转展示 GOOUUU TECH 果云科技S3-N16R8 控制舵机 LED开关 直流电机

最近还是想玩了下esp32&#xff0c;基于原来的开发板&#xff0c;看见佬做了一个语音识别的项目&#xff0c;通过这个语音识别可以控制LED开关和直流电机这些&#xff0c;详情可见视频&#xff08;推荐&#xff09;具体硬件就在下方。 信泰微】ESP32-S3 42引脚 语音控制模块、…...

2025年光电科学与智能传感国际学术会议(ICOIS 2025)

重要信息 官网&#xff1a;www.ic-icois.org 时间&#xff1a;2025年3月14-16日 地点&#xff1a;中国-长春 简介 2025年光电科学与智能传感国际学术会议&#xff08;ICOIS 2025&#xff09;将于2025年3月14-16日在中国-长春隆重召开。会议将围绕“光学光电”、“智能传感”…...

高性能PHP框架webman爬虫引擎插件,如何爬取数据

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

三大主流负载均衡器之对比(Comparison of the Three Mainstream Load balancers)

【 Linux 】三大主流软件负载均衡器对比(LVS、Nginx、HAproxy) 三大主流软件负载均衡器对比(LVS、Nginx、HAproxy) &#xff08;资料来自网络&#xff0c;做了部分的补充说明&#xff09; LVS: 1. 抗负载能力强&#xff0c;性能高&#xff0c;能达到F5的60%&#xff0c;对…...

深入探索Python机器学习算法:监督学习(线性回归,逻辑回归,决策树与随机森林,支持向量机,K近邻算法)

文章目录 深入探索Python机器学习算法&#xff1a;监督学习一、线性回归二、逻辑回归三、决策树与随机森林四、支持向量机五、K近邻算法 深入探索Python机器学习算法&#xff1a;监督学习 在机器学习领域&#xff0c;Python凭借其丰富的库和简洁的语法成为了众多数据科学家和机…...

Qt跨线程信号槽调用:为什么信号不能像普通函数那样调用

1. 信号与槽机制的基本原理 在 Qt 中&#xff0c;信号与槽机制是一种事件驱动的通信方式&#xff0c;用于对象之间的解耦交互。其关键特点如下&#xff1a; 信号不能直接调用 信号只是一个声明&#xff0c;并没有实际的函数实现。它们通过 emit 关键字在对象内部被触发&…...

Ubuntu+deepseek+Dify本地部署

1.deepseek本地部署 在Ollama官网下载 需要魔法下载 curl -fsSL https://ollama.com/install.sh | sh 在官网找到需要下载的deepseek模型版本 复制命令到终端 ollama run deepseek-r1:7b 停止ollama服务 sudo systemctl stop ollama # sudo systemctl stop ollama.servi…...

【LLM】DeepSeek开源技术汇总

note 一、FlashMLA&#xff1a;MLA解码内核 二、DeepEP&#xff1a;针对MoE和EP的通信库 三、DeepGEMM&#xff1a;FP8 通用矩阵乘法&#xff08;GEMM&#xff09;库 四、DualPipe、EPLB&#xff1a;双向管道并行算法 五、3FS&#xff1a;一种高性能分布式文件系统 文章目录 n…...

PostgreSQL10 逻辑复制实战:构建高可用数据同步架构!

PostgreSQL10 逻辑复制实战&#xff1a;打造高可用数据同步架构&#xff01; 概述 PostgreSQL 10 引入了逻辑复制&#xff08;Logical Replication&#xff09;&#xff0c;为数据库高可用和数据同步提供了更灵活的选择。PostgreSQL 复制机制主要分为物理复制和逻辑复制两种&…...

springboot之HTML与图片生成

背景 后台需要根据字段动态生成HTML&#xff0c;并生成图片&#xff0c;发送邮件到给定邮箱 依赖 <!-- freemarker模板引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifa…...

455. 分发饼干(LeetCode)

题目来源&#xff1a; 455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 题目内容&#xff1a; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xf…...

go设计模式

刘&#xff1a;https://www.bilibili.com/video/BV1kG411g7h4 https://www.bilibili.com/video/BV1jyreYKE8z 1. 单例模式 2. 简单工厂模式 代码逻辑&#xff1a; 原始&#xff1a;业务逻辑层 —> 基础类模块工厂&#xff1a;业务逻辑层 —> 工厂模块 —> 基础类模块…...

基于STM32的智能家居能源管理系统

1. 引言 传统家庭能源管理存在能耗监控粗放、设备联动不足等问题&#xff0c;难以适应绿色低碳发展需求。本文设计了一款基于STM32的智能家居能源管理系统&#xff0c;通过多源能耗监测、负荷预测与优化调度技术&#xff0c;实现家庭能源的精细化管理与智能优化&#xff0c;提…...

win11编译pytorchaudio cuda128版本流程

1. 前置条件 本篇续接自 win11编译pytorch cuda128版本流程&#xff0c;阅读前请先参考上一篇配置环境。 访问https://kkgithub.com/pytorch/audio/archive/refs/tags/v2.6.0.tar.gz下载源码&#xff0c;下载后解压&#xff1b; 2. 编译 在visual studio 2022安装目录下查找…...

Rust学习总结之-match

Rust 有一个叫做 match 的极为强大的控制流运算符&#xff0c;它允许我们将一个值与一系列的模式相比较&#xff0c;并根据相匹配的模式执行相应代码。模式可由字面量、变量、通配符和许多其他内容构成。 一&#xff1a;match定义 可以把 match 表达式想象成某种硬币分类器&a…...

基于Three.js的3D赛车游戏开发实战详解

目录 一、项目效果预览二、核心技术架构2.1 三维场景构建2.2 赛道与车辆模型2.3 光照系统三、核心运动系统3.1 车辆运动控制3.2 物理模拟公式3.3 边界限制四、摄像机控制系统4.1 第三人称视角数学原理4.2 鼠标交互实现五、星空背景特效5.1 点云生成算法5.2 动态闪烁效果六、性能…...