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

MyBatis:简化数据库操作的持久层框架

1、什么是Mybatis?

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由

apachesoftwarefoundation 迁移到了google code,由谷歌托管,并且改名为MyBatis 。

2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS

提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

MyBatis是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java POJO到数据库中的记录。

Object Relational Mapping,简称ORM,翻译过来是对象关系映射。一般用于实现面向对象编程语言里的对象和数据库中的之间的转换。

Mybatis官方文档:MyBatis中文网

2、Mybatis的优点

  1. 简化数据库操作:MyBatis可以通过XML或注解配置来映射Java对象与数据库表之间的关系,从而避免了手动编写大量的JDBC代码。这使得数据库操作变得简单、直观,并且易于维护。
  2. 灵活的SQL控制: MyBatis允许开发者直接编写SQL语句,而不是像一些ORM框架那样自动生成SQL语句。这使得开发者可以更灵活地优化和调整SQL语句,以满足特定的性能需求。
  3. 高度可定制化:MyBatis的插件机制和丰富的配置选项,使得它非常灵活且高度可定制化。开发者可以根据项目需求来选择和配置功能,从而实现个性化的数据访问层。
  4. 轻量级: MyBatis是一个轻量级的框架,它不依赖于其他复杂的框架,只需引入MyBatis的相关依赖即可。这使得项目部署和运行时的资源消耗较小。
  5. 优秀的性能: MyBatis的直接SQL控制和缓存支持,使得它在处理大量数据时表现出色,具有很好的性能。
  6. 一级和二级缓存: MyBatis支持一级缓存(默认开启)和二级缓存(可配置),这些缓存可以减少数据库的访问次数,提高查询性能。
  7. 支持原生SQL: MyBatis允许开发者在XML文件中直接编写原生的SQL语句,这样对于一些复杂的查询或特殊需求,可以更容易地实现。
  8. 与现有项目集成:MyBatis不会强制你按照特定的开发模式或架构来进行开发,它可以与现有的Java项目很好地集成,适用于各种场景。

3、Mybatis的缺点

  1. 繁琐的配置:MyBatis需要通过XML或注解来配置SQL映射和数据库连接等信息,这可能导致配置文件变得庞大而复杂,特别是对于大型项目而言。
  2. SQL维护: 直接编写SQL语句可以提供更大的灵活性,但也可能导致SQL的维护问题。当数据库模式发生变化时,可能需要手动修改大量的SQL语句,这可能会增加开发和维护的工作量。
  3. 缺乏全面的ORM支持:MyBatis在对象关系映射(ORM)方面相对较弱。与一些全面的ORM框架相比,MyBatis在处理复杂关系和对象图时可能需要更多的手动操作。
  4. 依赖于SQL:MyBatis的灵活性使得开发者可以直接编写SQL语句,但也可能导致开发者过度依赖于SQL,而忽略了一些ORM框架所提供的便利功能。
  5. 缓存管理:尽管MyBatis支持缓存,但对于复杂的分布式环境或大规模系统,缓存管理可能变得复杂,需要开发者注意缓存的清理和更新机制。

4、Mybatis和Hibernate比较

Hibernate和Mybatis都是ORM框架,都支持JDBC和JTA事务处理,它们创建的目的都是为了简化Java原生程序操作数据库的步骤,增加开发者的开发效率。

不同点有以下几点

1、Hibernate是全自动的,Mybatis是半自动的。 在Hibernate当中,开发者只需要定义好数据库的表字段和Java DO的映射关系和规则即可,Hibernate会开放出来接口自动去处理数据库表的CURD,并按照规定好的规则映射到DO对象中,这个过程中操作者完全不需要感知Sql逻辑的。但是在Mybatis中则完全不是这样,Mybatis不会帮助开发者编写sql逻辑,Mybatis只会按照定义好的规则将数据库字段映射到Java的DO中,但是具体的sql逻辑还是需要开发者自己编写的。

2、正是因为Mybatis需要自己编写Sql逻辑,这是一个包袱,因为开发者需要根据不同的DB,选择不同的SQL语句(DB移植性不高),而且正是因为要自己写SQL,项目初期的开发工作量要比Hibernate大一点。但是这也是优点,通过Mybatis开发者就可以定制sql,譬如多表join、sql优化等操作是Hibernate不具备的。

3、Hibernate的缓存系统要优于Mybatis,如果二级缓存出现数据,Hibernate会及时报错,但是Mybatis就需要开发者自己去感知。

总的来说,MyBatis是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,Hibernate是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。

5、Mybatis的功能架构

1) API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2) 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3) 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

6、Mybatis的运行原理

(1)加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。

(3)SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。

(4)结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。

7、Mybatis运行总体流程

(1)加载配置并初始化

触发条件:加载配置文件

处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

触发条件:调用Mybatis提供的API

传入参数:为SQL的ID和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求

触发条件:API接口层传递请求过来

传入参数:为SQL的ID和传入参数对象

处理过程:

(A)根据SQL的ID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回。

8、Mybatis的缓存

1、一级缓存: 基于PerpetualCache的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close之后,该Session中的所有 Cache 就将清空。

SqlSession级别的缓存,缓存数据存储在HashMap中,在进行第一次查询时,首先会从数据库中查询出结果,然后将结果存在一级缓存中;当我们第二次查询时,首先会查询一级缓存,如果一级缓存没有在查询数据库。在进行CUD操作并执行了commit或关闭Sqlsession后会将缓存清空,如果二级缓存是开启的那么会将数据缓存到二级缓存中。默认一级缓存是开启的

2、二级缓存:是在应用级别上工作的,这意味着它跨越多个 SqlSession实例。当一个查询被执行时,MyBatis首先检查这个查询的结果是否已经存在于二级缓存中。如果存在,则直接从缓存返回结果,而不必执行实际的数据库查询。这可以显著减少数据库负载和提高查询性能。默认二级缓存未开启

MyBatis 二级缓存的默认状态

MyBatis 的二级缓存默认是「全局可用但局部未启用」的状态,具体表现为:

  1. 全局开关 (cacheEnabled) 默认是 true
    • <setting name="cacheEnabled" value="true"/> 是默认行为
    • 这个配置项只是表示「允许」使用二级缓存,而不是「强制启用」
  1. 但单个 Mapper 默认不缓存
    • 即使全局允许缓存,每个 Mapper 仍需要 显式声明 <cache/>@CacheNamespace 才会真正启用缓存
<!-- 推荐显式声明而非依赖默认值 -->
<settings><setting name="cacheEnabled" value="true"/> <!-- 其实可省略 -->
</settings>
<!-- 按需启用缓存 -->
<mapper namespace="com.example.UserMapper"><!-- 只有添加这行才会真正缓存 --><cache eviction="LRU" size="1024"/>
</mapper>
<!-- 关键场景禁用缓存 -->
<select id="getRealTimeData" useCache="false">SELECT * FROM realtime_table
</select>

9、Mybatis标签

1. 基本映射标签

1、<mapper>

根元素,定义XML映射文件的命名空间

namespace 属性:对应Mapper接口的全限定名

<mapper namespace="com.mybatis.mybatisdemo.mapper.UserMapper">
2、<resultMap>

定义数据库结果集到Java对象的映射关系

属性

id:唯一标识符

type:映射的Java类型

extends:继承其他resultMap

子元素

<id>:主键字段映射

<result>:普通字段映射

<collection>:一对多关联

<association>:一对一关联

<!-- 基本结果映射 -->
<resultMap id="BaseResultMap" type="com.mybatis.mybatisdemo.entity.User"><id column="id" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="email" property="email"/><result column="phone" property="phone"/><result column="create_time" property="createTime"/><result column="update_time" property="updateTime"/><result column="status" property="status"/>
</resultMap><!-- 包含订单的映射 extends="BaseResultMap"表示该结果映射继承自另一个名为 BaseResultMap 的结果映射 -->
<resultMap id="WithOrdersResultMap" type="com.mybatis.mybatisdemo.entity.User" extends="BaseResultMap"><collection property="orders" ofType="com.mybatis.mybatisdemo.entity.Order" columnPrefix="order_"><id column="id" property="id"/><result column="user_id" property="userId"/><result column="order_no" property="orderNo"/><result column="amount" property="amount"/><result column="status" property="status"/><result column="create_time" property="createTime"/><result column="update_time" property="updateTime"/><result column="remark" property="remark"/></collection>
</resultMap><!-- 基本结果映射 -->
<resultMap id="BaseResultMap" type="com.mybatis.mybatisdemo.entity.Order"><id column="id" property="id"/><result column="user_id" property="userId"/><result column="order_no" property="orderNo"/><result column="amount" property="amount"/><result column="status" property="status"/><result column="create_time" property="createTime"/><result column="update_time" property="updateTime"/><result column="remark" property="remark"/>
</resultMap><!-- 包含用户信息的映射 -->
<resultMap id="WithUserResultMap" type="com.mybatis.mybatisdemo.entity.Order" extends="BaseResultMap"><association property="user" javaType="com.mybatis.mybatisdemo.entity.User"><id column="user_id" property="id"/><result column="username" property="username"/><result column="email" property="email"/><result column="phone" property="phone"/></association>
</resultMap>
3、<select>
  • 定义查询语句
  • 关键属性:
    • id:方法名
    • parameterType:参数类型
    • resultMap/resultType:返回类型
    • useCache:是否使用二级缓存
<!-- 根据ID查询用户 -->
<select id="selectById" parameterType="int" resultMap="BaseResultMap">SELECT * FROM user WHERE id = #{id}
</select>

4、<insert>

  • 定义插入语句
  • 特殊属性:
    • useGeneratedKeys:是否使用自增主键
    • keyProperty:指定将生成的主键值赋给参数对象的哪个属性
    <!-- 插入用户 --><insert id="insert" parameterType="com.mybatis.mybatisdemo.entity.User" useGeneratedKeys="true" keyProperty="id">INSERT INTO user (username, password, email, phone, status)VALUES (#{username}, #{password}, #{email}, #{phone}, #{status})</insert>
5、<update>

定义更新操作

    <update id="update" parameterType="com.mybatis.mybatisdemo.entity.User">UPDATE userSET username = #{username},password = #{password},email = #{email},phone = #{phone},status = #{status}WHERE id = #{id}</update>
6、<delete>

定义删除操作

    <!-- 根据ID删除用户 --><delete id="deleteById" parameterType="int">

相关文章:

MyBatis:简化数据库操作的持久层框架

1、什么是Mybatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由 apachesoftwarefoundation 迁移到了google code,由谷歌托管,并且改名为MyBatis 。 2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框…...

Spring Boot集成Spring AI与Milvus实现智能问答系统

在Spring Boot中集成Spring AI与Milvus实现智能问答系统 引言 随着人工智能技术的快速发展&#xff0c;越来越多的企业开始探索如何将AI能力集成到现有系统中。本文将介绍如何在Spring Boot项目中集成Spring AI和向量数据库Milvus&#xff0c;构建一个高效的智能问答系统。 …...

软件工程(六):一致性哈希算法

哈希算法 定义 哈希算法是一种将任意长度的输入&#xff08;如字符串、文件等&#xff09;转换为固定长度输出的算法&#xff0c;这个输出称为“哈希值”或“摘要”。 常见的哈希算法 哈希算法哈希位数特点MD5128位快速&#xff0c;但已不安全SHA-1160位安全性提高&#xf…...

Linux内存分页管理详解

Linux内存分页管理详解:原理、实现与实际应用 目录 Linux内存分页管理详解:原理、实现与实际应用 一、引言 二、内存分页机制概述 1. 虚拟地址与物理地址的划分 2. 分页的基本原理 三、虚拟地址到物理地址的转换 1. 地址转换流程 2. 多级页表的遍历 四、多级页表的…...

work-platform阅读

Redis存储的是字节数据&#xff0c;所以任何对象想要存进redis&#xff0c;都要转化成字节。对象转化为字节流的过程&#xff0c;叫序列化&#xff0c;反之&#xff0c;叫反序列化 Redis 序列化详解及高性能实践-CSDN博客https://blog.csdn.net/zhangkunls/article/details/14…...

在 Excel xll 自动注册操作 中使用东方仙盟软件————仙盟创梦IDE

windows 命令 "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /X "C:\Path\To\仙盟.xll" excel 注册 Application.RegisterXLL "XLMAPI.XLL" 重点代码解析 excel 命令模式 [ExcelCommand(Description "使用参数")] …...

微调后的模型保存与加载

在Hugging Face Transformers库中&#xff0c;微调后的模型保存与加载方式因微调方法&#xff08;如常规微调或参数高效微调&#xff09;而异。 一、常规微调模型的保存与加载 1、 保存完整模型 使用 save_pretrained() 方法可将整个模型&#xff08;包含权重、配置、分词器…...

PostgreSQL 日常维护

目录 一、基本使用 1、登录数据库 2、数据库操作 &#xff08;1&#xff09;列出库 &#xff08;2&#xff09;创建库 &#xff08;3&#xff09;删除库 &#xff08;4&#xff09;切换库 &#xff08;5&#xff09;查看库大小 3、数据表操作 &#xff08;1&#xff…...

Ntfs!ATTRIBUTE_RECORD_HEADER结构$INDEX_ROOT=0x90的一个例子

Ntfs!ATTRIBUTE_RECORD_HEADER结构$INDEX_ROOT0x90的一个例子 1: kd> dx -id 0,0,899a2278 -r1 ((Ntfs!_FILE_RECORD_SEGMENT_HEADER *)0xc431a400) ((Ntfs!_FILE_RECORD_SEGMENT_HEADER *)0xc431a400) : 0xc431a400 [Type: _FILE_RECORD_SEGMENT_HEADER …...

leetcode hot100刷题日记——7.最大子数组和

class Solution { public:int maxSubArray(vector<int>& nums) {//方法一&#xff1a;动态规划//dp[i]表示以i下标结尾的数组的最大子数组和//那么在i0时&#xff0c;dp[0]nums[0]//之后要考虑的就是我们要不要把下一个数加进来&#xff0c;如果下一个数加进来会使结…...

LlamaIndex

1、大语言模型开发框架的价值是什么? SDK:Software Development Kit,它是一组软件工具和资源的集合,旨在帮助开发者创建、测试、部署和维护应用程序或软件。 所有开发框架(SDK)的核心价值,都是降低开发、维护成本。 大语言模型开发框架的价值,是让开发者可以更方便地…...

下一代电子电气架构(EEA)的关键技术

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

CSDN gitcode代码推送

当我使用用户名密码时一直无法推送&#xff0c;报下面这个错误 找了半天才知道&#xff0c; 他这个git不能用账号密码推送代码&#xff0c;idea弹出来的用户名&#xff0c;就是你头像旁边这个&#xff0c;没有符号 密码需要你创建一个令牌 这个令牌才是你要填写的密码&#x…...

中级统计师-统计学基础知识-第五章 相关分析

第一节 相关关系 1. 函数关系 vs 相关关系 函数关系 定义&#xff1a;变量间存在严格确定性的对应关系&#xff08;如 y f ( x ) y f(x) yf(x)&#xff09;例子&#xff1a;本金 x x x 与利息收入 y x 0.027 x y x 0.027x yx0.027x特点&#xff1a;一一对应&#xff…...

OpenCV CUDA模块图像过滤------用于创建一个最大值盒式滤波器(Max Box Filter)函数createBoxMaxFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 createBoxMaxFilter()函数创建的是一个 最大值滤波器&#xff08;Maximum Filter&#xff09;&#xff0c;它对图像中每个像素邻域内的像素值取最…...

OpenCv高阶(十五)——EigenFace人脸识别

文章目录 前言一、EigenFace人脸识别原理二、EigenFace人脸识别代码1、导入OpenCV和NumPy库2、数据加载与预处理部分3、创建与训练EigenFace模型部分4、预测与结果输出部分5、可视化部分&#xff1a;在测试图像上叠加识别结果 总结 前言 人脸识别作为生物特征识别技术的重要分…...

Linux系统下nslookup命令的基本使用

Linux系统下 nslookup命令的基本使用 引言一、nslookup介绍二、使用帮助三、 基本使用方法1. 查询域名对应的IP地址2. 查询特定的DNS记录类型3. 使用特定的DNS服务器进行查询4. 交互模式 四、注意事项五、总结 引言 在网络管理中&#xff0c;DNS&#xff08;域名系统&#xff…...

【笔记】PyCharm 中创建Poetry解释器

#工作记录 在使用 PyCharm 进行 Python 项目开发时&#xff0c;为项目配置合适的 Python 解释器至关重要。Poetry 作为一款强大的依赖管理和打包工具&#xff0c;能帮助我们更便捷地管理项目的依赖项与虚拟环境。下面将详细记录在 PyCharm 中创建 Poetry 解释器的步骤。 前提条…...

Qwen 3技术报告详细解读

近日&#xff0c;Qwen 3系列大模型正式发布&#xff0c;涵盖从0.6B到235B参数的多个规模版本&#xff0c;包括6个Dense模型和2个混合专家&#xff08;MoE&#xff09;模型。本文将从模型架构、预训练策略、后训练优化等方面进行全面解读&#xff0c;帮助读者深入理解Qwen 3的技…...

leetcode 螺旋矩阵 java

官方还得是官方&#xff01; class Solution {public List<Integer> spiralOrder(int[][] matrix) {int l 0, r matrix[0].length - 1;int t 0, b matrix.length - 1;int x 0;List<Integer> res new ArrayList<>();while (true) {for (int i l; i …...

Spring Boot 项目中 Redis 存储 Session 对象序列化处理

目录 一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1 添加依赖2.2 配置 Redis 三、自定义序列化和反序列化3.1 创建序列化配置类3.2 测试序列化和反序列化 四、其他序列化方式4.1 使用 JdkSerializationRedisSerializer4.2 使用 StringRedisSerializer 五…...

军工与航空航天特种PCB精密制造:猎板如何定义行业技术新标准?

一、军工与航空航天PCB的极限挑战 在低轨卫星载荷、战机航电系统等场景中&#xff0c;特种PCB需同时满足三大核心指标&#xff1a; ​​极端环境耐受性​​&#xff1a;工作温度横跨-55℃至200℃&#xff0c;承受20G机械振动与100krad辐射剂量&#xff0c;盐雾腐蚀测试超过50…...

springboot+vue实现鲜花商城系统源码(带用户协同过滤个性化推荐算法)

今天教大家如何设计一个 鲜花商城 , 基于目前主流的技术&#xff1a;前端vue3&#xff0c;后端springboot。学习完这个项目&#xff0c;你将来找工作开发实际项目都会又很大帮助。文章最后部分还带来的项目的部署教程。 系统有着基于用户的协同过滤推荐算法&#xff0c;还有保证…...

MyBatis 关联映射与多表查询实战教程

一、关联查询基础 1. 连接类型与选择 LEFT JOIN(左连接)SELECT u.*, r.role_name FROM User u LEFT JOIN user_role ur ON u.id = ur.uid LEFT JOIN Role r ON ur.rid = r.id;- **规则**:以左表为主,保留左表所有记录,右表无匹配时填充`NULL`。 - **场景**:查询主体…...

【AI流程应用】智能知识库搭建与实战应用

JeecgBoot 平台的 AIGC 功能模块&#xff0c;是一套类似 Dify 的 AIGC应用开发平台 知识库问答 子系统&#xff0c;是一款基于 LLM 大语言模型 AI 应用平台和 RAG 的知识库问答系统。 其直观的界面结合了 AI 流程编排、RAG 管道、知识库管理、模型管理、对接向量库、实时运行可…...

微店平台店铺商品接口开发指南

微店API获取店铺所有商品实现方案 以下是使用微店开放平台API获取店铺所有商品的完整实现代码&#xff0c;包含请求封装、分页处理和错误处理机制。 点击获取key和secret from weidian_api import WeidianAPI # 配置你的微店应用凭证 APP_KEY "your_app_key" APP_…...

springboot3+vue3融合项目实战-大事件文章管理系统-更新文章分类和增加文章分类优化-分组校验

因为我们之前在category实体类里面增加了notnull注解&#xff0c;而之前新增文章分类模块新增文章是不需要id的&#xff0c;而id是由数据库自动分配的&#xff0c;这就导致不能新增文章了&#xff0c;所以我们要进行分组校验 思路如下&#xff1a; 我们更改category代码&…...

Vue.js教学第九章:Vue动态与异步组件,高效开发全攻略

Vue 组件的动态与异步:探索高效开发路径 在 Vue.js 开发领域中,组件的动态与异步加载机制是构建复杂且高性能前端应用的关键策略。本研究深入探究 Vue 中动态组件与异步组件的原理、用法及性能优化实践,旨在为开发者提供全面且深入的技术指引,助力其在实际项目中高效运用。…...

CVE-2018-1270源码分析与漏洞复现(spring-messaging 表达式注入)

漏洞概述 CVE-2018-1270 是 Spring 框架中的一个高危远程代码执行&#xff08;RCE&#xff09;漏洞&#xff0c;影响版本为 Spring Framework 5.0–5.0.4 和 4.3–4.3.14。攻击者通过构造包含恶意 SpEL&#xff08;Spring Expression Language&#xff09;表达式的 STOMP&…...

DevOps学习回顾03-ops三部曲之配置管理(CM)

快速回顾 Ops 中配置管理的一些常见的方式&#xff0c;以及一些配置文件常见的组织形式 参考来源 极客时间-全栈工程师修炼指南-OPS三部曲之配置管理 什么是配置管理&#xff1f;–IBM 五大最流行的配置管理工具 为啥需要配置管理&#xff1f; CM 的主要目标是控制复杂系统…...

二进制编码、定点数与浮点数

1. 二进制编码 1.1. 字符串的表示&#xff0c;从编码到数字 不仅数值可以用二进制表示&#xff0c;字符乃至更多的信息都能用二进制表示。最典型的例子就是字符串&#xff08;Character String&#xff09;。最早计算机只需要使用英文字符&#xff0c;加上数字和一些特殊符号…...

CentOS:搭建国内软件repository,以实现自动yum网络安装

centosgit仓库_寂寞沙冷州的技术博客_51CTO博客 yum 很慢 centos yum安装慢_mob64ca1417b0c6的技术博客_51CTO博客 yum配置&#xff0c;文件&#xff0c;命令详解-CSDN博客 yum仓库简介_yum库是什么-CSDN博客 rootwww:/etc/yum.repos.d# pwd /etc/yum.repos.d ###创建下面这个.…...

C# AOP编程

AOP(面向切片编程的概念我这里就不介绍了&#xff0c;这里先介绍一下C#中的AOP编程框架。 1.AOP的分类 .net下支持AOP的框架很多&#xff0c;搜了一下有&#xff1a;PostSharp、AspectInjector、Fody 、Castle Windsor、Spring.NET、Ninject、Unity等&#xff0c;实现的方式主要…...

【Element UI排序】JavaScript 的表格排序sortable=“custom“和 @sort-change

目录 一、elementUI排序功能实际案例二、 实例2三、 实例3 Sortable — 是一个 JavaScript 库&#xff0c;用于在现代浏览器和触摸设备上对拖放列表进行重新排序。 一、elementUI排序功能实际案例 表格每一项中加上sortable&#xff0c;可以展示排序的小图标。 在列中设置so…...

使用Jenkins部署nodejs前端项目

1. 安装node环境 1.1 下载 https://nodejs.org/zh-cn/download 1.2 解压到安装目录 tar -xJvf node-v22.15.1-linux-x64.tar.xz mv node-v22.15.1-linux-x64 /home/soft/ mv node-v22.15.1-linux-x64/ node22原本计划安装 node22和node18&#xff0c;但是CentOS7.9 GLIBCXX …...

阿里云域名 绑定 华为云服务器ip

阿里云&#xff08;万网&#xff09;域名转入华为云域名图文教程 上-云社区-华为云 阿里云&#xff08;万网&#xff09;域名转入华为云域名图文教程-云社区-华为云 在阿里云备案了域名&#xff0c;解析到华为云服务器&#xff0c;不在同一个服务商这样可以使用么&#xff1f…...

在局域网(LAN)中查看设备的 IP 地址

在局域网&#xff08;LAN&#xff09;中查看设备的 IP 地址&#xff0c;可以使用以下几种方法&#xff1a; 方法 1&#xff1a;使用 ipconfig&#xff08;Windows&#xff09; 1. 打开 CMD&#xff1a; 按 Win R&#xff0c;输入 cmd&#xff0c;回车。 2. 输入命令&#…...

第3周作业-1层隐藏层的神经网络分类二维数据

文章目录 ***1层隐藏层的神经网络分类二维数据***1. 导入包2. 数据集2.1 导入数据集2.2 查看数据集图案2.3 查看数据集维度 3. Logistic回归3.1 Logistic回归简介3.2 Logistic回归模型3.3 绘制边界 4. 神经网络模型4.1 神经网络简介4.2 神经网络数学模型4.3 建立神经网络方法4.…...

中天智能装备科技有限公司:智能仓储领域的卓越之选​

在仓储智能化转型的时代浪潮中&#xff0c;中天智能装备科技有限公司以深厚的技术积淀与创新实力&#xff0c;成为众多企业迈向高效仓储的理想合作伙伴。无论是自动化立体库的精准搭建&#xff0c;还是 AGV 系统的智能部署&#xff0c;中天都以专业姿态为行业树立标杆。​ 硬核…...

Linux nbd 网络块设备(2)-内核实现

Linux nbd网络块设备(2)-内核实现 关注我&#xff0c;一起学习吧&#xff0c;后续持续更新内核相关 1. 概述&#xff1a; 内核linux/drivers/block/nbd.c 是nbd 网络设备的底层驱动实现逻辑。本文主要介绍nbd 设备注册及I/O请求的处理逻辑。 2. nbd 设备的初始化&#xff1…...

Python输出与输入

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:吟怀未许老重阳&#xff0c;霜雪无端入鬓长&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…...

【C语言】复习~数组和指针

数组和指针 1.字符指针 char* 使用方法一&#xff1a; 使用方法二&#xff1a; 这里本质上是把常量字符串的首地址放到了指针变量pstr里面 看下面的面试题 str3和str4指向的是同一个常量字符串&#xff0c;c/c会把常量字符串存储到一个单独的内存区域&#xff0c; 当几…...

rocketmq优先级控制 + 并发度控制

背景 最近在做大模型的项目&#xff0c;算法部门提供的文档解析接口&#xff0c; 并发度为1&#xff0c; 业务这边需要在ai问答和上传文档时进行解析和向量化&#xff0c;文档解析只能单线程跑&#xff0c;问答的文档解析需要高优先级处理。 采用 rocketmq 做文档上传和解析的…...

从0开始学linux韦东山教程第四章问题小结(2)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。说实在的越看视频越感觉他讲的有点乱后续将以他的新版PDF手册为中心&#xff0c;视频作为辅助理解的工具。参考手册为嵌入式Linux应用开发…...

洛谷P1226 【模板】快速幂

题目来源 P1226 【模板】快速幂 - 洛谷 题目描述 给你三个整数 a,b,p&#xff0c;求 abmodp。 输入格式 输入只有一行三个整数&#xff0c;分别代表 a,b,p。 输出格式 输出一行一个字符串 a^b mod ps&#xff0c;其中 a,b,p 分别为题目给定的值&#xff0c; s 为运算结果…...

自动点焊机:在多类电池生产中筑牢质量与效率根基

在电池制造产业飞速发展的当下&#xff0c;焊接作为电池组装的关键环节&#xff0c;其质量与效率直接影响着电池的性能与安全性。自动点焊机凭借其高效、精准、稳定的特性&#xff0c;在电动工具电池、扭扭车电池、储能电池包、滑板车电池以及电动车电池等多个电池制造领域大放…...

信息系统项目管理师考前练习1

以下是结合《信息系统项目管理师教程》(第5版)核心考点和当前行业热点的20道选择题押题,涵盖重点知识和新兴趋势,供考前冲刺练习: 项目生命周期模型选择 在敏捷开发项目中,客户需求频繁变更,且团队希望快速交付最小可行产品(MVP),最适合采用的生命周期模型是: A. …...

C++ for QWidget:正则表达式和QRegExp

正则表达式 正则表达式&#xff0c;又称规则表达式&#xff0c;&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是计算机科学的一个概念。以下是对正则表达式的详细介绍&#xff1a; 一、定义与作用 正则表达式是一种文…...

day019-特殊符号、正则表达式与三剑客

文章目录 1. 磁盘空间不足-排查流程2. 李导推荐书籍2.1 大话存储2.2 性能之巅 3. 特殊符号3.1 引号系列&#xff08;面试题&#xff09;3.2 重定向符号3.2.1 cat与重定向3.2.2 tr命令&#xff1a;替换字符3.2.3 xargs&#xff1a;参数转换3.2.4 标准全量追加重定向 4. 正则表达…...

学习黑客了解5分钟了解中间人攻击(MITM)

5分钟了解中间人攻击&#xff08;MITM&#xff09;&#x1f575;️‍♂️ 什么是中间人攻击&#xff08;Man-in-the-Middle, MITM&#xff09;&#xff1f; 中间人攻击是一种网络攻击方式&#xff0c;攻击者悄无声息地“夹在”通信两端之间&#xff0c;偷偷读取、篡改、伪造或…...