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

【Mybatis】XML映射文件

目录

 11.3XML映射文件

        1.select

         2.insert、update、delete

        3.Sql 

        4.parameters(参数) 

        5.resultMap

        6.resultMap 使用示例 

        (1)在先前创建的数据库stu中创建表student 2,并插入若干条数据,代码如下:

        (2)创建工程mybatis_ResultMap_demo。 

        (3)创建实体对象映射数据库表。 

        (4)创建映射接口和映射文件。

        (5)测试。


 11.3XML映射文件

        

        xml和dtd 部分是必须填写且不需要配置的部分每次使用时,只需要将这部分复制到文件顶部即可。

        mapper 元素是整个映射文件的容器,所有的SQL映射都包含在这个元素中,mapper本身有一个参数namespace,即命名空间这个命名空间就是文件所对应的接口文件的Java类只有当这个命名空间被配置时,才可以直接通过访问Java接口的方法实现SOL调用。

        映射器是MyBatis最复杂且最重要的组件它由一个接口加上XML文件(或者注解)组成。在映射器中可以配置参数、SOL 语句、存储过程、缓存等内容,并且通过简易的映射规则映射到指定的POJO或者其他对象上,映射器能有效消除JDBC底层的代码。

        MyBatis的映射器也可以使用注解完成,但可读性较差,企业中应用不广,官方亦不推荐使用。

        1.select

        

查询语句是 MyBatis 中最常用的元素之一,多数应用也都是查询比修改要频繁。对每个插入、更新或删除操作,通常对应多个查询操作。这是 MyBatis 的基本原则之一,也是将焦点和精力放到查询和结果映射的原因。对简单类别的查询元素是非常简单的。例如:

<select id="selectPerson" parameterType="int" resultType="hashmap">

        SELECT *FROM PERSON WHERE ID=#{id}

</select>

        这个语句被称为selectPerson,使用一个int(或Integer)类型的参数,并返回一个HashMap类型的对象,其中的键是列名,值是列对应的值。

        注意参数标识 #{id},其告诉 MyBatis创建一个PreparedStatement (预处理语)参数使用JDBC,这样的一个参数在SOL中会由一个“?”来标识,并被传递到一个新的预处理语句中,类似于以下的JDBC代码(不是MyBatis的代码):

String selectPerson ="SELECT* FROM PERSON WHEREID=?";

PreparedStatement ps = conn.prepareStatement(selectPerson); ps.setInt(1,id);

        当然,这需要很多单独的JDBC 的代码来提取结果并将它们映射到对象实例中,这就是MyBatis 节省时间的原因。我们需要深入了解参数和结果映射。select 元素有很多属性允许用户配置,以决定每条语句的作用细节。关于select元素主要属性的描述参见表11-2。

                                        表11-2select元素的主要属性描述

属性

描述

id

在命名空间中唯一的标识符,可以被用来引用这条语句

parameterType

将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过TypeHandler 推断出具体传入语句的参数,默认值为unset

resultMap

外部resultMap的命名引用。结果集的映射是MyBatis 最强大的特性若能对其有一个很好地理解则许多复杂映射的情形都能迎刃而解。可以使用resultMap或resultType,但不能同时使用

flushCache

如果设置为true,则任何时候只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值为false

useCache

如果设置为true,则将会导致本条语句的结果被二级缓存,select元素默认值为true

timeout

这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为unset(依赖驱动)

fetchSize

这是尝试影响驱动程序每次批量返回的结果行数和这个设置值相等。默认值为 unset(依赖驱动)

statementType

值为STATEMENT、PREPARED或CALLABLE之一。这会让MyBatis分别使用JDBC中的

Statement、PreparedStatement 或CallableStatement,默认值为PREPARED

resultSetType

值为FORWARDONLY、SCROLL SENSITIVE 或SCROLL INSENSITIVE 之一默认值为 umset(依赖驱动),是结果集的类型

databaseld

如果配置了databaseIdProvider,则MyBatis会加载所有的不带databaseId 或匹配当前databaseId语句;如果带或者不带databaseId的语句都有,则不带的会被忽略

         2.insert、update、delete

        数据操纵语句 insert、update 和 delete 在它们的实现中非常相似。

        

<insert Id=“insertAuthor” parameterType=“domain.blogAuthor” flushCache=“true” 

statementType=“PREPARED”keyProperty=“”keyColumn=“”useGeneratedKeys=“”

utimeout=“20”>

<update id=“updateAuthor” parameterType=“domain.blog.Author” flushCache=“true”

statementType=“PREPARED” timeout=“20”>

<delete id=“deleteAuthorr” parameterType=“domain.blog.Author” flushCache=“true”

statementType=“PREPARED” timeout=“20”>

         

        insert、update和delete元素的主要属性描述如表11-3所示

        表11-3 insert、update和delete 元素的主要属性描述

        下面是insert、update和delete语句的示例

属性

描述

id

命名空间中的唯一标识符,可被用来代表这条语句

parameterType

将要传入语句的参数的完全限定类名或别名。这个属性是可选的,因为 MyBatis 可以通过TypeHandler推断出具体传入语句的参数,默认值为unset

parameterMap

STATEMENT、PREPARED或CALLABLE之一。这会让MyBatis分别使用StatementPreparedStatement或CallableStatement,默认值为PREPARED

flushCache

将其设置为 tue,任何时候只要语句被调用,都会导致本地缓存和二级缓存都被清空,默认值为true(对应插入、更新和删除语句)

statementType

STATEMENT、PREPARED或CALLABLE之一。这会让MyBatis 分别使用 Statement PreparedStatement或CallableStatement,默认值为PREPARED

useGeneratedKeys

(仅对insert和update 有用)这会令MyBatis 使用JDBC的getGeneratedKeys 方法来获取由数据库内部生成的主键(如像MySOL和SOLServer 这样的关系数据管理系统的自动递增字段),默认值为false

keyProperty

(仅对insert 和update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys的返回值或者通过 insert 语的 selectKey 子元素设置其键值,默认为 unset。如果希望得到多个生成的列,则也可以是逗号分隔的属性名称列表

keyColumn

(仅对msert和update 有用)通过生成的键值设置表中的列名这个设置在某些数据库(如PostgreSQL)中是必需的,当主键列不是表中的第一列时需要设置。如果希望得到多个生成的列,则也可以是逗号分隔的属性名称列表

        下面是insert、update和delete语句的示例。

        

<insert id=“addStudent” parameterType=“student”

insert into

student(sno,name,sex,age,deptno)

values(#{sno}#{name},#{sex},#{age},#{dept_no})

</insert>

<update id=“updateStudent” parameterType=“student”>

update student set name

=#{name},sex=#{sex},age=#{lage},dept_no=#{dept_no}

where sno=#{sno}

</update>

<delete id=“deletestudent” uparameterType=“String”>

delete from student

where sno=#{sno}

</delete>

        3.Sql 

        这个元素可以被用来定义可重用的 SOL代码段,可以包含在其他语句中。例如:

        

<sql id=“userColumns”>

${alias}.id,${alias}.username,${alias}.password

</sq1>

        这个SQL片段可以被包含在其他语句中。例如:

        

<select id=“selectUsers” resultType=“map”>

Select

<include>refid=“userColumns”><property name=“alias” value=“t1”/></include>,

</select>

        4.parameters(参数) 

        在MyBatis中,参数是非常强大的元素。类似于之前的语句,简单参数示例如下。

       

<select id=“selectUsers” parameterType=“int”resultType="User”>

select id,username,password from users where id= #{id}

</select>

        这个示例说明了一个非常简单的命名参数映射。参数类型被设置为int,这里的参数名是id,也可以是其他名称。参数为简单数据类型的,都与此类似。以下示例中参数类型是一个对象,MyBatis的处理方式不同于简单数据类型。

<insert id="insertUser"parameterType="User">

Insert into users(id,username,password)

values(#{id},#{username},#{password})

</insert>

        如果User类型的参数对象传递到了语句中,则id、userame和password 属性将会被查找,它们的值就会被传递到预处理语句的参数中。 

        5.resultMap

       resultMap是映射中最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。resultMap 定义的主要是一个结果集的映射关系,也就是SOL到Java Bean 的映射关系定义。

        下面是简单映射语句的示例,但没有明确的resultMap。例如:

        

<select id=“selectUsers” resultType=“map”>

select id,username, hashedPassword from some_table where id = #{id}

</select>

        resultType=“map”表示返回的数据是一个Map集合(使用列名作为key列值作为value)。虽然数据被封装成Map集合返回,但是Map ”集合并不能很好地描述一个领域模型。可以使用JavaBeans或POJOs来作为领域模型描述数据MyBatis对两者都支持来看下面这个JavaBean:

        


public class User {private int id;private String username;private String hashedPassword;public int setId(int id) {This.id=id;}public void getUsername() {return username;}public void setUsername(String username) {this.username=username;}public String getHashedPassword() {return hashedPassword;}public void setHashedPassword(String hashedPassword) {this.hashedPassword=hashedPassword;}
}

         基于JavaBean的规范,上面这个类有3个属性:id、username和hashedPassword。这些在select语句中会精确匹配到列名。

        这样的一个JavaBean可以被映射到结果集,就像映射到HashMap一样简单。

        

<select id=“selectUsers” parameterType=“int” resultType=“com.someapp.model.User”>

select id,username,hashedPassword from some table where id = #{id}

</select>

        以下使用了类型别名,使用它们时可以不输入类的全路径。例如:

         

<!--在XML配置文件中-->

<typeAlias type=“com.someapp,model.User” alias=“User”/>

<!--在SOL映射的XML文件中-->

<select id=“selectUsers” parameterType=“int”resultType=“User”>

select id,username hashedPassword from some table where id = #{id}

</select>

         在这些情况下,MyBatis会在幕后自动创建一个resultMap,基于属性名来映射列到JavaBean 的属性上。如果列名没有精确匹配,则可以在列名上使用 select 字句的别名(一个标准的SOL特性)来匹配标签。例如:

        

<select id=“selectUsers” parameterType=“int” resultType=“User”>

select

  user_id as “id”,

  user_name as “userName”,

  hashed_password as “hashedPassword”

from some_table

where id = #{id}

</select>

        resultMap最常见的使用方式如下所示,这也是解决列名不匹配的另外一种方式。

        

<resultMap id=“userResultMap” type= “User”>

<id property= “id” column= “user_id” />

<result property= “username” column= “user_name” />

<result property= “password” column= “hashed_password” />

</resultMap>

        引用此语句时使用resultMap 属性即可(注意,这里去了resultType属性)。例如:

        

<select id= “selectUsers” parameterType= “int” resultMap= “userResultMap”>

select user_id, user_name, hashed_password from some_table where id=#{id}

</select>

        6.resultMap 使用示例 

        (1)在先前创建的数据库stu中创建表student 2,并插入若干条数据,代码如下:

        

DROP TABLE IF EXISTS `student_2`;CREATE TABLE `student_2` (`stu_sno` varchar(100) NOT NULL DEFAULT '',`stu_name` varchar(100) NOT NULL,`stu_sex` varchar(8) DEFAULT NULL,`stu_age` int(3) DEFAULT NULL,`stu_dept_no` varchar(60) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `student_2` VALUES ('20231505', 'Marry', '女', '18', '260');INSERT INTO `student_2` VALUES ('20231506', '王宝宝', '男', '22', '2602');INSERT INTO `student_2` VALUES ('20231508', '李勇', '男', '20', '2605');INSERT INTO `student_2` VALUES ('20231509', '刘娟', '女', '19', '2605');

        (2)创建工程mybatis_ResultMap_demo。 

        在idea 中创建Maven Project,在“GroupID”文本框中输入“com.mialab”,在“ArtifactID”文本框中输入“mybatis_ResultMap_demo”。最终完成的mybatis_ResultMap_demo工程目录及文件如图11-4所示,student2初始表数据如图11-5所示。

        

                                                 图11-4 mybatis_ResultMap_demo工程目录及文件

        

                                                        图11-5 student2表中的数据

        (3)创建实体对象映射数据库表。 

        Student对象用于映射student _2 表,Student.java 主要代码如下(此处get方法、set方法和toString方法略:

        

public class Student {private String sno;private String name;private String sex;private int age;private String dept_no;...
}

        (4)创建映射接口和映射文件。

        接口StudentMapper.java的主要代码如下:

        

public interface StudentMapper {public List<Student> getSudentAll();
}

        映射文件StudentMapper.xml的主要代码如下:

        

<mapper namespace="com.mialab.mybatis_ResultMap_demo.mapper.StudentMapper"><resultMap id="studentResultMap" type="student"><id property="sno" column="stu_sno" /><result property="name" column="stu_name" /><result property="sex" column="stu_sex" /><result property="age" column="stu_age" /><result property="dept_no" column="stu_dept_no" /></resultMap><select id="getSudentAll" resultMap="studentResultMap">select * from student_2</select>
</mapper>

        

        这里column属性表示数据库表的列名,property 表示数据库列映射到返回类型的属性。<resultMap id=“studentResultMap”type=“student”>中的id 是resultMap 的唯一标识符,type则表示 resultMap的实际返回类型。“student”是类型别名,表示的是“com.mialab.mybatis_ResultMap_demo.domain.Student", 在mybatis-config.xml中有声明。

        <id property="sno" column="stu_ sno" />中的id表示这个对象的主键(或者唯一标识),property表示POJO的属性名称,column 表示数据库表的列名。这样,POJO就和数据库SQL的结果一一对应起来了 。

        (5)测试。

        main方法的主要测试代码如下:

StudentMapper mapper = session.getMapper(StudentMapper.class);
List<Student> stu_list = mapper.getSudentAll();
for(Student stu:stu_list) {//System.out.println(stu);log.info(stu);
}

        运行ResultMap_ Main 的main方法,控制台显示内容如下:

        

DEBUG [main] - ==>  Preparing: select * from student_2 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 4INFO [main] - Student [sno=20231505, name=Marry, sex=女, age=18, dept_no=260]INFO [main] - Student [sno=20231506, name=王宝宝, sex=男, age=22, dept_no=2602]INFO [main] - Student [sno=20231508, name=李勇, sex=男, age=20, dept_no=2605]INFO [main] - Student [sno=20231509, name=刘娟, sex=女, age=19, dept_no=2605]

相关文章:

【Mybatis】XML映射文件

目录 11.3XML映射文件 1.select 2.insert、update、delete 3.Sql 4.parameters(参数) 5.resultMap 6.resultMap 使用示例 (1)在先前创建的数据库stu中创建表student 2&#xff0c;并插入若干条数据&#xff0c;代码如下&#xff1a; (2)创建工程mybatis_ResultMap_demo。 (…...

11.2【MyBatis】主配置文件

目录 11.2【MyBatis】主配置文件 1.properties&#xff08;属性&#xff09; 2.settings(设置) 3.typeAliases(别名) 4.typeHandlers类型处理器 5.objectFactory 对象工厂 6.plugins(插件) 7.environments (配置环境) 8.mappers (映射器) 11.2【MyBatis】主配置文件 MyBatis的 …...

linuxARM裸机学习笔记(2)----汇编LED灯实验

MX6ULL 的 IO IO的复用功能 这里的只使用了低五位&#xff0c;用来配置io口&#xff0c;其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的&#xff0c;GPIO1_IO00 一共可以复用为 9种功能 IO&#xff0c;分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…...

用C语言实现插入排序算法

1.设计思路 用插入排序对长度为n的待排序数组A进行排序的伪代码&#xff08;在代码中&#xff0c;A中元素的数目n用A.length来表示&#xff09;。 伪代码如下&#xff1a; INSERTION-SORT(A) for j2 to A.length:keyA[j] //将A[j]插入已排序序列A[1..j-1]ij-1while i>0…...

2023 电赛E题--可能会出现的问题以及解决方法

2023年电赛E题报告模板&#xff08;K210版&#xff09;--可直接使用 本文链接&#xff1a;2023年电赛E题报告模板&#xff08;K210版&#xff09;--可直接使用_皓悦编程记的博客-CSDN博客 解决激光笔在黑色区域无法识别 本文链接&#xff1a; 2023 电赛 E 题 激光笔识别有误-…...

Demystifying Prompts in Language Models via Perplexity Estimation

Demystifying Prompts in Language Models via Perplexity Estimation 原文链接 Gonen H, Iyer S, Blevins T, et al. Demystifying prompts in language models via perplexity estimation[J]. arXiv preprint arXiv:2212.04037, 2022. 简单来说就是作者通过在不同LLM和不同…...

WEB集群——http、tomcat

1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 1. 简述静态网页和动态网页的区别。 1&#xff09;、静态网页 &#xff08;1&#xff09;、什么是静态网页 请求响应信息&…...

Socks5代理:网络安全与爬虫之利器

一、Socks5代理&#xff1a;简介与工作原理 Socks5代理&#xff0c;全称为Socket Secure 5代理&#xff0c;是一种允许用户通过代理服务器进行网络连接的技术。它是Socks协议的最新版本&#xff0c;在网络安全和数据传输方面有着显著的优势。 Socks5代理与其他代理的不同之处在…...

如何兼容低版本浏览器

如何兼容低版本浏览器 分为三个部分来说 HTML 低版本浏览器无法识别新增的HTML5元素&#xff0c;如果要兼容这部分浏览器&#xff0c;需要做以下处理&#xff1a; 对于非可替换元素&#xff0c;比如article、section、header、footer等&#xff0c;这种元素虽然低版本浏览器不识…...

【雕爷学编程】MicroPython动手做(39)——机器视觉之图像基础2

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…...

gitlab搭建

回到目录 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 Web 服务。 Gitlab 是被广泛使用的基于 git 的开源代码管理平台, 基于 Ruby on Rails 构建, 主要针对软件开发过程中产生的代码和文档进行管理,…...

JMeter 的使用

文章目录 1. JMeter下载2. JMeter的使用2.1 JMeter中文设置2.2 JMeter的使用2.2.1 创建线程组2.2.2 HTTP请求2.2.3 监听器 1. JMeter下载 官网地址 https://jmeter.apache.org/download_jmeter.cgi https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.2.zip 下载解…...

Java语言 Iterator 如何装换成 List

迭代器如何逆向转换成List集合 在 Java 中&#xff0c;迭代器&#xff08;Iterator&#xff09;是一种用于遍历集合中元素的对象&#xff0c;它提供了一种简单而一致的方式来访问集合中的元素&#xff0c;而不需要暴露集合内部的结构。如果我们需要将一个迭代器逆向转换成 Lis…...

国产GOWIN实现低成本实现CSI MIPI转换DVP

CSI MIPI转换DVP&#xff0c;要么就是通用IC操作&#xff0c;如龙讯芯片和索尼芯片&#xff0c;但是复杂的寄存器控制器实在开发太累。对于FPGA操作&#xff0c;大部分都是用xilinx的方案&#xff0c;xilinx方案成本太高&#xff0c;IP复杂。 而用国产GOWIN已经实现了直接mipi …...

Typescript第六章 类型进阶(类型之间的关系,全面性检查,对象类型进阶,函数类型进阶,条件类型等)

文章目录 第六章 类型进阶6.1 类型之间的关系6.1.1 子类型和超类型6.1.2 型变结构和数组型变函数型变 6.1.3 可赋值性6.1.4 类型拓宽const类型多余属性检查 6.1.5 细化辨别并集类型 6.2 全面性检查6.3对象类型进阶6.3.1 对象类型的类型运算符“键入”运算符keyof运算符 6.3.2 R…...

kernel32.dll如何修复,快速解决kernel32.dll缺失的方法

Kernel32.dll是Windows操作系统中一个重要的系统文件&#xff0c;对于系统的正常运行至关重要。然而&#xff0c;由于各种原因&#xff0c;用户可能会遇到kernel32.dll文件的缺失问题。今天小编就来给大家详细的介绍一下kernel32.dll这个文件&#xff0c;并且详细的介绍一下ker…...

初始化前端项目配置 eslint、prettier、husky 等等

每次新项目都要重新配置一遍&#xff0c;有点麻烦&#xff0c;记录一下。 一、配置 ESLint 1.1 核心配置 执行 npm init eslint/config 命令进行初始化&#xff0c;根据提示一路下一步即可&#xff0c;完成后会自动生成 eslintrc 文件并安装相关依赖。 1.2 React 编译模式配…...

嵌入式存储器为AI的实现提供了实现架构

近年来&#xff0c;大脑启发式计算机领域的研究活动获得了巨大的发展。主要原因是试图超越传统的冯诺依曼架构的局限性&#xff0c;后者越来越受存储器-逻辑通信的带宽和等待时间的局限性的影响。在神经形态架构中&#xff0c;内存是分布式的&#xff0c;可以与逻辑共定位。鉴于…...

iOS开发-格式化时间显示刚刚几分钟前几小时前等

iOS开发-格式化时间显示刚刚几分钟前几小时前等 在开发中经常遇到从服务端获取的时间戳&#xff0c;需要转换显示刚刚、几分钟前、几小时前、几天前、年月日等格式。 主要用到了NSCalendar、NSDateComponents这两个类 NSString *result nil;NSCalendarUnit components (NSC…...

ffmpeg视频音频命令

视频音频合并 视频音频合并&#xff0c;以视频时间为主&#xff0c;音频短了循环 方法1&#xff1a;混音&#xff0c;视频权重0&#xff0c;volume调节音量&#xff0c;aloop无限循环&#xff0c;duration:first为第一个素材的长度 ffmpeg -i video.mp4 -i audio.mp3 -filter_…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...