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

MyBatis动态代理和映射器

目录

1、映射器简介

(1)什么是mapper动态代理?

(2)动态代理的规范

(3)如何使用动态代理

(4)为什么学映射器

(5)映射器与接口

(6)映射器的引入

(7)映射器的组成

2、select元素

(1)select元素结构

(2)示例代码

(3)输出pojo对象,简单参数,pojo参数

(4)多个参数传递

3、insert元素

(1)insert元素结构

(2)主键回填

4、update元素和delete元素

(1)update元素

(2)delete元素

5、resultMap元素

(1)为什么要使用resultMap元素

(2)resultMap元素的结构

(3)使用POJO存储结果集

6、多表联查

(1)什么是联查

(2)一对一级联步骤

(3)一对一级联映射

(4)一对多级联步骤

(5)一对多级联

(6)级联的缺陷


1、映射器简介

(1)什么是mapper动态代理?

        在接口中有方法的返回值定义,参数的定义,方法名,在sqlMapper.xml中也对应这接口给予了赋值,这时候dao的实现类就显得多余,这是Mybatis可以帮助我们自动产生实现类,并可以调取方法得到结果,这就是Mybatis的mapper动态代理。

(2)动态代理的规范

        Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

        相当于是你在Mapper层声明方法,在xml中去实现sql代码逻辑。

        相当于是一个接口文件对应一个xml文件,而且必须名字相同

        也就是方法名和id名也必须相同才能映射到,Mapper接口开发需要遵循以下规范:

  • Mapper.xml文件中的namespace与mapper接口的类路径相同
  • Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
  • Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
  • Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

(3)如何使用动态代理

        使用SqlSession的方法getMapper()让Mybatis自动生成对应接口的实现对象。

        首先是DaoUtil层,它封装了一些加载配置文件、构建工厂、创建SqlSession对象等操作和关闭资源等操作。

public class DaoUtil {private static SqlSessionFactory factory;static {try {// 1.加载配置文件// 加载 MyBatis 配置文件 mybatis-config.xml。配置文件中包含了数据库连接信息和 MyBatis 的各种设置InputStream stream = Resources.getResourceAsStream("mybatis-config.xml");// 2.构建工厂factory = new SqlSessionFactoryBuilder().build(stream);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession() {// 从 SqlSessionFactory 中打开一个新的 SqlSession。SqlSession 是 MyBatis 的核心接口之一,用于执行 SQL 命令、获取映射器以及管理事务。return factory.openSession();}public static void closeResource(SqlSession sqlSession) {// 释放资源sqlSession.close();}}

        然后是测试类中,调用DaoUtil方法来实现动态代理的使用。

public static void main(String[] args) {SqlSession sqlSession = DaoUtil.getSqlSession();StudentMapper stuMapper = sqlSession.getMapper(StudentMapper.class);List<Student> blist = stuMapper.findAllStudentAndClassOneTable(2);for(Student s : blist) {System.out.println(s);}DaoUtil.closeResource(sqlSession);}

        其中包含的方法有:

        selectOne和selectList:动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用 selectList方法,如果返回单个对象则调用selectOne方法。如果是返回学生列表List则调用selectList(),如果是返回学生单个则调用selectOne()。

        namespace:mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。

(4)为什么学映射器

        半自动化的体现:配置 SQL 语句,体现了半自动化和灵活性。

        ORM的体现:对象关系映射的实现,数据库表和POJO类的映射关系。

(5)映射器与接口

         映射器配置文件和接口绑定:配置文件名对应接口名,id属性值对应方法名。

(6)映射器的引入

        文件路径:用相对路径引入映射器

<mapper resource = ”com/codeup/dao/Mapper.xml”/>

        XML:用文件定位符引入映射器

<mapper url = ”file:///var/mappers/Mapper.xml”/>

        包名:用包名引入映射器

<package name = ”com.codeup.dao.Mapper”/>

        类注册:用类名引入映射器

<mapper class = ”com.codeup.mapper.NewsMapper”/>

(7)映射器的组成

2、select元素

(1)select元素结构

属性说明
id唯一标识,接口中的方法名;
parameterType参数的类型;
resultType结果的类型;
resultMap复杂的结果集映射关系;
(2)示例代码

        通过班级编号来查询一个学生:

        StudentMapper接口封装的抽象方法:

public Student findStudentBySid(int sid);

        StudentMapperXML对应的映射器XML代码中:

<select id = "findStudentByClassid" parameterType="int" resultType="student"> select * from student where classid = #{v}
</select>

        这里的id就是接口抽象方法的方法名,parameterType对应的就是传进来的参数(要查找几班的学生),resultType就是返回的类型(查询到的具体学生)。

        #{v}是用来处理参数占位符的。它会将传入的参数值安全地替换到 SQL 语句中,防止 SQL 注入攻击。在XML文件中,配置文件中利用 parameterType 属性设置参数类型,利用 #{}设置参数的使用及位置。在接口中,接口中,按照方法的入参方式指定参数类型和参数名称。

(3)输出pojo对象,简单参数,pojo参数

        在使用 MyBatis 或 Hibernate 等 ORM 框架时,POJO 类通常表示数据库中的表记录

        在我们写XML映射器代码时会有一些逻辑的判断,但是在XML中不能用java中的常规条件符号来写,需要用替换符号来完成逻辑的判断。

        如果条件有 > < >= <= 可以使用转义字符进行代替:

         示例代码:

<select id="findStudentBigSid" parameterType="int" resultType="student">select * from student where sid &lt; #{v}
</select>

        例如这段代码用&lt就可以实现查找小于指定sid的学生信息。

(4)多个参数传递

        方法1:Map方式(不推荐 耦合度太高

        比如说现在我们有一个对学生进行查询并且以表联查的方式对应着学生班级一对一查询,再对其结果进行分页,但是我们的映射器parameterType只能传入一个参数,呢该怎么办呢,这时候就可以传入一个Map集合,把我们想要传进入的值都放在Map里面。

        接口代码:

public List<Student> findStudentByClassidAndSsexLimit(Map<String, Object> map);

        XML代码:

<select id="findStudentByClassidAndSsexLimit" parameterType="map" resultType="student">select * from student where classid = #{bj} and ssex = #{xb} limit #{wz},#{bc}
</select>

        这里就将map传递进入,按照map传进去的不同的类型,对应着完成sql语句的拼接。但是如果表结构发生变化,或者参数名称改变都会要重新维护代码,所以耦合度很高

        

        方法2:JavaBean方式(推荐,但只能查看实体类所有属性值)

        如果你要通过班级id和性别来查看一个学生的信息,呢我们完全可以实例化一个学生对象,通过给里面的参数赋值来传入映射其中,完成查询。

        接口代码:

public List<Student> findStudentByClassidAndSsex(Student s);

        XML代码:

<select id = "findStudentByClassidAndSsex" parameterType="student" resultType="student">select * from student where classid = #{classid} and ssex = #{ssex}
</select>

        方法3:param数 (推荐,Map和key固定)

        可以通过param数来进行传递多参,param相当于Map但是它的key是固定的,值不是固定的,key从1开始往后递增。

        接口代码:

public List<Student> findStudentByClassidAndSsexlimitParam(int classid, String sex, int weizhi, int buchang);

        XML代码:

<select id="findStudentByClassidAndSsexlimitParam">select * from student where classid = #{param1} and ssex = #{param2} limit #{param3},#{param4}
</select>

        方法4:arg数(不推荐)

        可以通过arg数来进行传递多参,从0开始依次递增。

        接口代码:

public List<Student> findStudentByClassidAndSsexlimitArg(int classid, String sex, int weizhi, int buchang);

        XML代码:

<select id="findStudentByClassidAndSsexlimitArg" resultType="student">select * from student where classid = #{arg0} and ssex = #{arg1} limit #{arg2},#{arg3}
</select>

3、insert元素

(1)insert元素结构

属性说明
id唯一标识,接口中的方法名;
parameterType参数的类型;
keyProperty表示以哪个列作为属性的主键,不能和 keyColumn 同时使用;
keyColumn指明哪一列是主键,不能和 keyProperty同时使用;
useGeneratedKeys使用 JDBC 的 getGeneratedKeys 方式来取有数据库内部生成的主键;
(2)主键回填

        主键回填就是当主键在数据库中为自增字段时,新增成功后,回填主键。相当于有把主键值返回给了当前的实体类对象。

        两个属性:useGeneratedKeys="true" 开启主键回填,keyProperty="sid" 回填的主键给哪个属性。

        自定义主键生成规则:

        <selectKey>:用来预先设定主键值。自定义主键生成规则时,可以使用该标签;

        order属性:取值 BEFORE,AFTER ;

4、update元素和delete元素

(1)update元素

属性说明
id唯一标识,接口中的方法名;
parameterType参数的类型;

(2)delete元素

属性说明
id唯一标识,接口中的方法名;
parameterType参数的类型;

5、resultMap元素

        当我们给数据库中的表字段创建实体类时,因为java和数据库的命名规范不同,所以有时候可能会导致字段名和属性不一致的问题。

        其中属性smname和字段名sm_name不一致,会导致映射不上的问题。

(1)为什么要使用resultMap元素

        定义映射规则:ORM的特性,POJO 类和数据库的映射关系;

        级联操作:多表存在主外键关系时,主表和从表之间的关联操作;

        类型转换:数据库字段的类型和 POJO类属性的类型转换。

(2)resultMap元素的结构

(3)使用POJO存储结果集

属性说明
property映射到列结果的字段或者属性,通常是指 POJO 的属性;
column对应的数据库字段;
javaTypeJava 类型,可以是基本数据类型,也可以是类完全限定名;
jdbcTypeJDBC 的类型,基本支持所有常用的数据库类型;

        通常来讲property传入的时java中的属性,而colum代表的是对应的表中的字段名称。

        如果没有做映射处理的话,POJO属性和数据库字段不对应的属性就会显示为null。

        示例代码(错误):

<select id="findAllSMaster" resultType="SMaster">select * from schoolmaster
</select>

        查询结果:

        查询的结果smname为null,因为属性名和字段名不对应。

        示例代码(正确):

<resultMap type="smaster" id="sm_map"><result column="sm_name" property="smname"></result>
</resultMap><select id="findAllSMaster" resultMap="sm_map">select * from schoolmaster
</select>

        查询结果:

6、多表联查

(1)什么是联查

        级联(cascade),是指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率。

        一对一:一个对象对应唯一的对象,举例:中国公民和身份证;

        一对多:一个对象对应多个对象,举例:班级和学生;

        多对多:多个对象对应多个对象,举例:公司角色和公司员工;

(2)一对一级联步骤

(3)一对一级联映射

        以一个学生为例,一个学生最多对应一个班级,所以一个学生对应一个班级,这就是一对一级联。

        示例代码:

        接口代码:

public List<Student> findAllStudent();

        XML代码:

<resultMap type="student" id="stu_class_Map"><result column="sid" property="sid" /><result column="sname" property="sname" /><result column="birthday" property="birthday" /><result column="ssex" property="ssex" /><result column="classid" property="classid" /><!-- 一对一 --><association property="bj" javaType="Banji"><result column="classid" property="classid" /><result column="classname" property="classname" /></association>
</resultMap><select id="findAllStudent" resultMap="stu_class_Map">select * from studentleft join class on student.classid = class.classid
</select>

        这样查询就可以实现一个学生对应一个班级的查询。<association property="bj">代表的是java中属性名为bj,javaType="Banji"这个代码意思是bj的类型为Banji。这一句用于定义一对一关联关系。

(4)一对多级联步骤

 
(5)一对多级联

        以一个班级为例,一个班级中可以有很多的学生,所以如果要以班级为主表来联查,就得在实体类中创建一个学生列表来存放学生。但是如果单独用映射器来映射的话,只能映射出班级的属性,所以要用一对多的步骤来完成对班级内的所有学生的映射操作。

        示例代码:

        接口代码:

public List<Banji> findAllBanjiAndStu();

        XML代码:

<resultMap type="Banji" id="bj_class_Map"><result column="classid" property="classid"/><result column="classname" property="classname"/><!-- 1对多 --><collection property="stulist" ofType="Student"><result column="sid" property="sid"/><result column="sname" property="sname"/><result column="birthday" property="birthday"/><result column="ssex" property="ssex"/><result column="classid" property="classid"/></collection>
</resultMap><select id="findAllBanjiAndStu" resultMap = "bj_class_Map">select * from classleft join student on class.classid = student.classid
</select>

        这段代码property是对应java中的属性stulist学生集合,映射的对应属性是student的实体类。

(6)级联的缺陷

        使用建议: 

        根据实际情况增加级联关系;

        多层关联式,建议超过三层关联时尽量少用级联

相关文章:

MyBatis动态代理和映射器

目录 1、映射器简介 &#xff08;1&#xff09;什么是mapper动态代理&#xff1f; &#xff08;2&#xff09;动态代理的规范 &#xff08;3&#xff09;如何使用动态代理 &#xff08;4&#xff09;为什么学映射器 &#xff08;5&#xff09;映射器与接口 &#xff08;…...

ShardingSphere中的ShardingJDBC常见分片算法的实现

文章目录 ShardingJDBC快速入门修改雪花算法和分表策略核心概念分片算法简单INLINE分片算法STANDARD标准分片算法COMPLEX_INLINE复杂分片算法CLASS_BASED自定义分片算法HINT_INLINE强制分片算法 注意事项 ShardingJDBC Git地址 快速入门 现在我存在两个数据库&#xff0c;并…...

SpringBoot整合Flink CDC实时同步postgresql变更数据,基于WAL日志

SpringBoot整合Flink CDC实时同步postgresql变更数据&#xff0c;基于WAL日志 一、前言二、技术介绍&#xff08;Flink CDC&#xff09;1、Flink CDC2、Postgres CDC 三、准备工作四、代码示例五、总结 一、前言 在工作中经常会遇到要实时获取数据库&#xff08;postgresql、m…...

ThinkPHP事件的使用

技术说明 1.ThinkPHP版本&#xff1a;支持6.0、8.0 2.使用场景&#xff1a;用户登陆后日志记录、通知消息发送等主流程、次流程分离等场景 3.说明&#xff1a;网上很多帖子说的不明不白的&#xff0c;建议大家自己手动尝试总结一下 4.事件手动绑定的时候&#xff0c;一定要…...

【Nuxt】服务端渲染 SSR

SSR 概述 服务器端渲染全称是&#xff1a;Server Side Render&#xff0c;在服务器端渲染页面&#xff0c;并将渲染好HTML返回给浏览器呈现。 SSR应用的页面是在服务端渲染的&#xff0c;用户每请求一个SSR页面都会先在服务端进行渲染&#xff0c;然后将渲染好的页面&#xf…...

Spring Boot整合WebSocket

说明&#xff1a;本文介绍如何在Spirng Boot中整合WebSocket&#xff0c;WebSocket介绍&#xff0c;参考下面这篇文章&#xff1a; WebSocket 原始方式 原始方式&#xff0c;指的是使用Spring Boot自己整合的方式&#xff0c;导入的是下面这个依赖 <dependency><g…...

《LeetCode热题100》---<5.③普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 第五道&#xff1a;缺失的第一个正数&#xff08;困难&#xff09; 方法一&#xff1a;将数组视为哈希表 class Solution {public int firstMissingPosi…...

Cocos Creator文档学习记录

Cocos Creator文档学习记录 一、什么是Cocos Creator 官方文档链接&#xff1a;Hello World | Cocos Creator 百度百科&#xff1a;Cocos Creator_百度百科 Cocos Creator包括开发和调试、商业化 SDK 的集成、多平台发布、测试、上线这一整套工作流程&#xff0c;可多次的迭…...

插入数据优化 ---大批量数据插入建议使用load

一.insert优化 1.批量插入 2.手动提交事务 3.主键顺序插入 二.大批量插入数据 如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。操作如下 1.客户端连接服务端时,加入参数 --local-infine mysql --local-infine…...

【Linux】一篇总结!什么是重定向?输出重定向的作用是什么?什么又是追加重定向?

欢迎来到 CILMY23 的博客 &#x1f3c6;本篇主题为&#xff1a;一篇总结&#xff01;什么是重定向&#xff1f;输出重定向的作用是什么&#xff1f;什么又是追加重定向&#xff1f; &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Py…...

svn软件总成全内容

SVN软件总成 概述&#xff1a;本文为经验型文档 目录 D:\安装包\svn软件总成 的目录D:\安装包\svn软件总成\svn-base添加 的目录D:\安装包\svn软件总成\tools 的目录D:\安装包\svn软件总成\tools\sqlite-tools-win32-x86-3360000 的目录D:\安装包\svn软件总成\安装包-----bt lo…...

[激光原理与应用-118]:电源系统的接地详解:小信号的噪声干扰优化,从良好外壳接地开始

目录 一、电路的基本原理&#xff1a;电流回路 1、电流回路的基本概念 2、电流回路的特性 3、电流回路的类型 4、电流回路的应用 五、电流回路的注意事项 二、交流设备的接地 1.1 概述 1、交流工作接地的定义 2、交流工作接地的作用 3、交流工作接地的规范要求 4、…...

回测本身就是一种过度拟合?

这也许是一个絮絮叨叨的专题&#xff0c;跟大伙儿唠一唠量化相关的小问题&#xff0c;有感而发写到哪算哪&#xff0c;这是第一期&#xff0c;先唠个10块钱的~ 前段时间在某乎上看到这样一个问题『您怎么理解回测本身就是一种过度拟合&#xff1f;』 个人看来&#xff0c;回测本…...

什么是Arduino?

Arduino是一款便捷灵活、方便上手的开源电子原型平台&#xff0c;由欧洲的一个开发团队于2005年冬季开发。以下是关于Arduino的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Arduino是一个基于开放源代码的软硬件平台&#xff0c;它让电子设计更加简单快捷。通过Arduin…...

【机器学习基础】Scikit-learn主要用法

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…...

python-素数回文数的个数(赛氪OJ)

[题目描述] 求 11 到 n 之间&#xff08;包括 n&#xff09;&#xff0c;既是素数又是回文数的整数有多少个。输入&#xff1a; 一个大于 11 小于 10000 的整数 n。输出&#xff1a; 11 到 n 之间的素数回文数个数。样例输入1 23 样例输出1 1 提示&#xff1a; 回文数指左右对…...

OCC 网格化(二)-网格划分算法

目录 一、概述 二、详解 1. 线性偏转 (Linear Deflection) 2. 角偏转 (Angular Deflection) 三、示例 3.1 示例1 3.2 示例2 一、概述 在 Open CASCADE Technology (OCC) 中默认的网格划分算法BRepMesh_IncrementalMesh有两个主要的选项来定义三角剖分—线性和角偏转。 …...

pyecharts模块

PyEcharts 一个基于ECharts库的Python封装库&#xff0c;它使得开发者可以方便地在Python环境中创建交互式的图表&#xff0c;包括折线图、柱状图、饼图、地图等多种可视化效果。 优点&#xff1a; 易用性&#xff1a;PyEcharts提供了简单易懂的API&#xff0c;通过链式调用…...

深⼊理解指针(3)

1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. 函数指针数组 6. 转移表 1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 ⼀般使⽤: char* 这两种方式都是把字符串中的首字符的地址赋值给pc。 在这串代码中 str1内容的地…...

黑马头条vue2.0项目实战(四)——首页—文章列表

目录 1. 头部导航栏 1.1 页面布局 1.2 样式调整中遇到的问题 2. 频道列表 2.1 页面布局 2.2 样式调整 2.3 展示频道列表 3. 文章列表 3.1 思路分析 3.2 使用 List 列表组件 3.3 加载文章列表数据 3.4 下拉刷新 3.5 设置上下padding固定头部和频道列表 3.6 记住列…...

UE5.4内容示例(4)UI_UMG - 学习笔记

https://www.unrealengine.com/marketplace/zh-CN/product/content-examples 《内容示例》是学习UE5的基础示例&#xff0c;可以用此熟悉一遍UE5的功能 UI示例 UI_UMG &#xff1a;基本UMGUI_CommonUI &#xff1a;UMG多层应用UI_SlatePostBuffer UI &#xff1a;FX的示例&…...

C#实现数据采集系统-配置文件化

系统优化-配置 配置信息ip端口,还有点位信息,什么的都是直接在代码里直接写死,添加点位,修改配置,比较麻烦,每次修改都需要重新生成打包。 所以将这些配置都改成配置文件,这样只需要修改配置文件,程序无须修改,即可更新。 配置代码: 如果我们有100个采集,一个个去…...

Java面试题 -- 为什么重写equals就一定要重写hashcode方法

在回答这个问题之前我们先要了解equals与hascode方法的本质是做什么的 1. equals方法 public boolean equals(Object obj) {return (this obj);}我们可以看到equals在不重写的情况下是使用判断地址值是否相同 所以默认的 equals 的逻辑就是判断的双方是否引用了一个对象&am…...

J031_使用TCP协议支持与多个客户端同时通信

一、需求文档 使用TCP协议支持与多个客户端同时通信。 1.1 Client package com.itheima.tcp2;import java.io.DataOutputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void main(String[] a…...

二分查找(精确查找、范围搜索)

目录 1. 二分查找概述2. 精确查找2.1 【left&#xff0c;right】2. 2 【left&#xff0c;right&#xff09; 3. 范围查找总结 1. 二分查找概述 二分查找法&#xff0c;也称为二分搜索法或折半查找法&#xff0c;是一种在有序数组中查找特定元素的搜索算法。其基本思想是&#x…...

软件工程简记

文章目录 一、软件工程要点之软件设计二、UML(Unified Modeling Language,统一建模语言)(一)UML 的整体分类与部分功能(二)UML 各类图的具体内容三、开发模型(一)多种开发模型的特点与问题四、设计模式(一)设计模式的总体概念与原则(二)软件结构设计原则(三)常见…...

【深度学习】【语音TTS】OpenVoice v2,测评,中英文语料,Docker镜像,对比GPT-SoVITS、FishAudio、BertVITS2

https://github.com/myshell-ai/OpenVoice/blob/main/docs/USAGE.md 实际体验OpenVoice v2的TTS效果。 文章目录 环境启动 jupyter代码代码分析主要模块和功能测试一些别的中文和中英文混合总结优点缺点对比GPT-SoVITS、FishAudio、BertVITS2使用我的Docker镜像快速体验OpenVo…...

Kotlin OpenCV 图像图像50 Haar 级联分类器模型

Kotlin OpenCV 图像图像50 Haar 级联分类器模型 1 OpenCV Haar 级联分类器模型2 Kotlin OpenCV Haar 测试代码 1 OpenCV Haar 级联分类器模型 Haar级联分类器是一种用于对象检测&#xff08;如人脸检测&#xff09;的机器学习算法。它由Paul Viola和Michael Jones在2001年提出…...

嗖嗖移动业务大厅(Java版)

首先对此项目说明一下&#xff0c;我只完成了项目的基本需求&#xff0c;另外增加了一个用户反馈的功能&#xff0c;但是可能项目中间使用嗖嗖这个功能还有一些需要完善的地方&#xff0c;或者还有一些小bug&#xff0c;就当给大家参考一下了&#xff0c;希望谅解。代码我也上传…...

hcia复习笔记

一、OSI 七层模型 应用层&#xff1a;为应用程序提供服务&#xff0c;如文件传输、电子邮件等。 表示层&#xff1a;数据格式转换、加密解密、压缩解压缩。 会话层&#xff1a;建立、维护和管理会话。 传输层&#xff1a;提供端到端的可靠或不可靠的数据传输服务&#xff0…...

哈尔滨做网站电话/小时seo

2019独角兽企业重金招聘Python工程师标准>>> SAP HANA SPS 08新特性资料汇总 HANA(High-Performance Analytic Appliance)高性能分析设备。那么SAP HANA SPS 08针对07版本又有哪些改进呢&#xff1f;本文集将为大家汇总和持续更新这一系列的资料。 详细解读 和小伙伴…...

wordpress显示图片/如何免费做视频二维码永久

Transaction Flow 本文概述了在标准资产交换过程中发生的事务机制。这个场景包括两个客户&#xff0c;A和B&#xff0c;他们在购买和销售萝卜&#xff08;产品&#xff09;。他们每个人在网络上都有一个peer&#xff0c;通过这个网络&#xff0c;他们发送自己的交易&#xff0c…...

vps做电影网站/国际军事新闻

Go专栏目录 1.Go语言环境配置 2.Go语言基础...

介绍自己的做的网站/设计本网站

HTML中的JavaScript脚本必须位于<script>与</script>标签之间&#xff0c;JavaScript脚本可被放置在HTML页面的 <body>标签和<head>标签中&#xff0c;这种视情况而定&#xff0c;一般放在<head>标签内。 一<script> 标签 如需在HTML页面…...

做网站着用什么软件/免费找客户软件

1.vs code直接打开 这个没有问题&#xff0c;但是无法批量操作。我希望通过程序。 2.scanpy 总是给我报错ValueError: not enough values to unpack (expected 5, got 1) 3.scipy import scipy as scp mtx scp.io.mmread(F:\jiaoben\Angle_place\ELEMENTMATRIXOUTPT.mtx)…...

无锡网站建设公司排名/重庆网站建设推广

开发移动应用是一项非常复杂的工作&#xff0c;但作为开发者&#xff0c;我们就是来解决这个复杂的。状态机&#xff08;state machine&#xff09;是一个很好的工具&#xff0c;它可以帮助我们简化开发中的复杂问题。因此&#xff0c;在本篇基于Swift语言的Xcode教程中&#x…...