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

MyBatis操作数据库-XML实现

目录

1.MyBatis的简单介绍

2.MyBatis操作数据库的步骤

2.1 添加依赖

2.2 配置文件

2.3 写持久层代码

2.4 方法测试

3.MyBatis操作数据库(增删查改)

3.1 CRUD标签

3.2 参数传递

3.3 Insert-新增

3.4 Delete-删除

3.5 Update-修改

3.6 Select-查询(映射问题) 


1.MyBatis的简单介绍

MyBatis是一款持久层框架(持久层指持久化操作的层,通常指数据访问层dao),简单来说,使用MyBatis能够更简单地完成程序和数据库之间的交互

2.MyBatis操作数据库的步骤

2.1 添加依赖

首先需要导入MyBatis依赖和MySQL驱动依赖(添加到pom.xml文件中)

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>

2.2 配置文件

我们需要配置Mysql数据库信息,MyBatis日志打印和MyBatis XML的文件路径,数据库信息用于和指定数据库进行连接,MyBatis日志用于查看SQL语句的执行,传递的参数以及执行结果(MyBatis日志打印的配置不是必须的,如果不需要,在配置文件中删除相关配置信息即可),MyBatis XML文件路径(以下面的配置内容为例)用于声明在resources/mapper下创建所有的XML文件

如果是application.yml文件,配置以下内容

# 配置Mysql数据库信息
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false# url中的mybatis_test替换为自己的数据库名username: root    #数据库用户名password: root   #数据库密码(如果没设置密码,默认为root,如果有的话需要修改,例如'123456')driver-class-name: com.mysql.cj.jdbc.Driver
# 配置打印 MyBatis⽇志
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 配置MyBatis XML文件路径mapper-locations: classpath:mapper/**Mapper.xml

如果是application.properties文件,配置以下内容

# 配置Mysql数据库信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
# 上面url中的mybatis_test替换为自己的数据库名
spring.datasource.username=root #数据库用户名
spring.datasource.password=root #数据库密码(如果没设置密码,默认为root,如果有的话需要修改,例如'123456')
# 配置MyBatis日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 配置MyBatis XML文件路径
mybatis.mapper-locations=classpath:mapper/**Mapper.xml

2.3 写持久层代码

持久层代码分为两个部分,分别是方法定义(接口interface)和方法实现(**.xml)

(1)方法定义(UserInfoXMLMapper接口)

  • @Mapper:表示MyBatis中的Mapper接口,程序运行时会自动生成接口的代理对象,并交给Spring的IoC容器管理
package org.example.mybatisdemo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.example.mybatisdemo.model.UserInfo;
import java.util.List;
@Mapper
public interface UserInfoXMLMapper {List<UserInfo> queryUserInfos();
}

(2)方法实现(UserInfoXMLMapper.xml,根据MyBatis XML文件路径,创建路径为resources/mapper/UserInfoXMLMapper.xml)

  • <mapper>标签:表示命名空间,需要指定namespace属性,值为Mapper接口的全限定名(全包名.类名)
<?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="org.example.mybatisdemo.mapper.UserInfoXMLMapper">
<!--    sql语句的具体实现-->
</mapper>

2.4 方法测试

package org.example.mybatisdemo.mapper;
import org.example.mybatisdemo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest //在Spring的运行环境下进行测试
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid queryUserInfos() {//具体测试代码}
}

3.MyBatis操作数据库(增删查改)

3.1 CRUD标签

CRUD标签即<insert>,<delete>,<select>,<update>四个标签,用于在方法实现的<mapper>标签中实现具体的SQL语句,以<select>为例

  • <select>:执行数据库的查询操作
  • id:与接口中的定义的方法名称相同,表示对接口的具体实现方法
  • resultType:返回的数据类型,值为该类型的全限定名
<?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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><select id="queryUserInfos" resultType="org.example.mybatisdemo.model.UserInfo">select * from userinfo</select>
</mapper>

3.2 参数传递

当我们执行条件查询时等SQL语句时,需要在SQL语句中对表指定属性赋值,这时可以使用#{ }的方式来获取方法中的参数,拼接到SQL语句中从而得到完整的SQL语句,括号中的参数名称与方法中的参数名称最好相同(当然也可以不相同,下面会说到)

//UserInfoXMLMapper.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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><select id="queryUserInfos" resultType="org.example.mybatisdemo.model.UserInfo">select * from userinfo where id=#{id} and age=#{age}
--获取id和age参数,分别赋值->最终执行SQL语句为select * from userinfo where id=1 and age=18</select>
</mapper>//UserInfoXMLMapper接口
package org.example.mybatisdemo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.example.mybatisdemo.model.UserInfo;
import java.util.List;
@Mapper
public interface UserInfoXMLMapper {List<UserInfo> queryUserInfos(UserInfo userInfo);
}//方法测试代码
package org.example.mybatisdemo.mapper;
import org.example.mybatisdemo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid queryUserInfos() {UserInfo userInfo=new UserInfo();userInfo.setId(1);userInfo.setAge(18);userInfoXMLMapper.queryUserInfos(userInfo).forEach(System.out::println);}
}

如果需要使括号中的参数名称与方法中的参数名称不相同,可以通过@Param设置参数的别名,同时使用#{ }获取参数时括号中的参数名称要与别名相同

//UserInfoXMLMapper接口
package org.example.mybatisdemo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.example.mybatisdemo.model.UserInfo;
import java.util.List;
@Mapper
public interface UserInfoXMLMapper {List<UserInfo> queryUserInfos(@Param("userid") Integer id);
}//UserInfoXMLMapper.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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><select id="queryUserInfos" resultType="org.example.mybatisdemo.model.UserInfo">select * from userinfo where id=#{userid} </select>
</mapper>

3.3 Insert-新增

//UserInfoXMLMapper.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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><insert id="insertUserInfo">insert into userinfo (username,password,age) values (#{userName},#{password},#{age})</insert>
</mapper>//UserInfoXMLMapper接口
package org.example.mybatisdemo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.example.mybatisdemo.model.UserInfo;
@Mapper
public interface UserInfoXMLMapper {Integer insertUserInfo(UserInfo userInfo);
}//方法测试代码
package org.example.mybatisdemo.mapper;
import org.example.mybatisdemo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid insertUserInfo() {UserInfo userInfo = new UserInfo();userInfo.setUserName("wangliu");userInfo.setPassword("123456");userInfo.setAge(18);userInfoXMLMapper.insertUserInfo(userInfo);}
}

接口定义不变时,在XML文件设置useGeneratedKeys和keyProperty属性可以返回自增的表属性

<?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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><insert id="insertUserInfo" useGeneratedKeys="true" keyProperty="id">--返回自增的id属性insert into userinfo (username,password,age) values (#{userName},#{password},#{age})</insert>
</mapper>

3.4 Delete-删除

//UserInfoXMLMapper.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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><delete id="deleteUserInfo">delete from userinfo where id=#{id}</delete>
</mapper>//UserInfoXMLMapper接口
package org.example.mybatisdemo.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserInfoXMLMapper {Integer deleteUserInfo(Integer id);
}//方法测试代码
package org.example.mybatisdemo.mapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid deleteUserInfo() {userInfoXMLMapper.deleteUserInfo(10);}
}

3.5 Update-修改

//UserInfoXMLMapper.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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><update id="updateUserInfo">update userinfo set username=#{userName} where id=#{id}</update>
</mapper>//UserInfoXMLMapper类
package org.example.mybatisdemo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.example.mybatisdemo.model.UserInfo;
@Mapper
public interface UserInfoXMLMapper {Integer updateUserInfo(UserInfo userInfo);
}//方法测试代码
package org.example.mybatisdemo.mapper;
import org.example.mybatisdemo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class UserInfoXMLMapperTest {@Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;@Testvoid updateUserInfo() {UserInfo userInfo = new UserInfo();userInfo.setUserName("zhangliu");userInfo.setId(9);userInfoXMLMapper.updateUserInfo(userInfo);}
}

3.6 Select-查询(映射问题) 

在参数传递(3.2节)已经举了一个关于查询操作的例子,这里便不再举例,虽然在这个例子中,代码能够正常运行,但是当我们仔细观察运行结果,会发现一些问题。以下是该例子运行结果的截图(与参数传递中的截图一致)

我们会发现有几个属性没有赋值(表中该条数据不存在为null的属性),这是因为自动映射查询结果时,MyBatis会获取结果中返回的列名属性并在Java类中查找相同名称的属性(忽略大小写),而delete_flag,create_time等列名属性与Java类(这里指UserInfo类)中的deleteFlag,createTime等属性名称不同,所以会返回null。这时只需要参照列名属性修改一下Java类中的属性名称,就可以得到正确结果,当然,如果不想修改属性名称,有三种方式可以解决这个问题,分别是起别名,结果映射和开启驼峰别名

(1)起别名

在SQL语句中,给列名起别名(as),使别名和Java类中属性名称保持相同,接口和方法测试代码与例子中一致

<?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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><select id="queryUserInfos" resultType="org.example.mybatisdemo.model.UserInfo">select id,username,password,age,gender,phone,delete_flag as deleteFlag,create_time as createTime,update_time as updateTimefrom userinfo where id=#{id} and age=#{age}</select>
</mapper>
<!--接口和方法测试代码与例子中一致-->

(2)结果映射

  • id(<resultMap>标签):resultMap别名
  • type:映射的实体类
  • <id>标签:表示主键
  • column(<result>标签):数据库列名属性
  • property(<result>标签):Java类属性名
<?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="org.example.mybatisdemo.mapper.UserInfoXMLMapper"><resultMap id="XMLBaseMap" type="org.example.mybatisdemo.model.UserInfo"><id column="id" property="id"></id><result column="delete_flag" property="deleteFlag"></result><result column="create_time" property="createTime"></result><result column="update_time" property="updateTime"></result></resultMap><select id="queryUserInfos" resultMap="XMLBaseMap">select * from userinfo where id=#{id} and age=#{age}</select>
</mapper>
<!--接口和方法测试代码与例子中一致-->

(3)开启驼峰命名

数据库列名一般使用蛇形命名法进行命名(下划线分割各个单词),而Java属性一般遵循驼峰命名法约定,要在这两种命名方式之间启用自动映射(delete_flag→deleteFlag),需要配置一下配置文件

如果是application.yml文件,配置以下内容

mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰⾃动转换

如果是application.properties文件,配置以下内容

#配置驼峰自动转换
mybatis.configuration.map-underscore-to-camel-case: true 

相关文章:

MyBatis操作数据库-XML实现

目录 1.MyBatis的简单介绍 2.MyBatis操作数据库的步骤 2.1 添加依赖 2.2 配置文件 2.3 写持久层代码 2.4 方法测试 3.MyBatis操作数据库(增删查改) 3.1 CRUD标签 3.2 参数传递 3.3 Insert-新增 3.4 Delete-删除 3.5 Update-修改 3.6 Select-查询(映射问题) 1.MyB…...

华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互

场景介绍 本章节将向您介绍如何使用地图的手势。 Map Kit提供了多种手势供用户与地图之间进行交互&#xff0c;如缩放、滚动、旋转和倾斜。这些手势默认开启&#xff0c;如果想要关闭某些手势&#xff0c;可以通过MapComponentController类提供的接口来控制手势的开关。 接口…...

解决DockerDesktop启动redis后采用PowerShell终端操作

如图&#xff1a; 在启动redis容器后&#xff0c;会计入以下界面 &#xff1a; 在进入执行界面后如图&#xff1a; 是否会觉得界面过于单调&#xff0c;于是想到使用PowerShell来操作。 步骤如下&#xff1a; 这样就能使用PowerShell愉快地敲命令了&#xff08;颜值是第一生…...

react + antDesign封装图片预览组件(支持多张图片)

需求场景&#xff1a;最近在开发后台系统时经常遇到图片预览问题&#xff0c;如果一个一个的引用antDesign的图片预览组件就有点繁琐了&#xff0c;于是在antDesign图片预览组件的基础上二次封装了一下&#xff0c;避免重复无用代码的出现 效果 公共预览组件代码 import React…...

逻辑回归 和 支持向量机(SVM)比较

为了更好地理解为什么在二分类问题中使用 SVM&#xff0c;逻辑回归的区别&#xff0c;我们需要深入了解这两种算法的区别、优势、劣势&#xff0c;以及它们适用于不同场景的原因。 逻辑回归和 SVM 的比较 1. 模型的核心思想 • 逻辑回归&#xff1a; • 基于概率的模型&…...

GS-SLAM论文阅读笔记--TAMBRIDGE

前言 本文提出了一个自己的分类方法&#xff0c;传统的视觉SLAM通常使用以帧为中心的跟踪方法&#xff0c;但是3DGS作为一种高效的地图表达方法好像更侧重于地图的创建。这两种方法都有各自的优缺点&#xff0c;但是如果能取长补短&#xff0c;互相结合&#xff0c;那么就会是…...

[Redis面试高频] - zset的底层数据结构

文章目录 [Redis面试高频] - zset的底层数据结构一、引言二、zset 的底层数据结构1、zset 的编码方式1.1、ziplist 编码1.2、skiplist 编码 1.3、ziplist 编码适用条件1.4、skiplist 编码适用条件2、zset 的操作命令 三、zset 的性能考量1、内存效率2、搜索效率 四、总结 [Redi…...

搜维尔科技:OptiTrack将捕捉到的人类动作数据映射到人形机器人的各个关节上进行遥操作

OptiTrack将捕捉到的人类动作数据映射到人形机器人的各个关节上进行遥操作 搜维尔科技&#xff1a;OptiTrack将捕捉到的人类动作数据映射到人形机器人的各个关节上进行遥操作...

CentOS Linux教程(6)--CentOS目录

文章目录 1. 根目录2. cd目录切换命令3. CentOS目录介绍4. pwd命令介绍5. ls命令介绍5.1 ls5.2 ls -a5.3 ls -l 1. 根目录 Windows电脑的根目录是计算机(我的电脑)&#xff0c;然后C盘、D盘。 Linux系统的根目录是/&#xff0c;我们可以使用cd /进入根目录&#xff0c;然后使…...

观察者模式全攻略:从设计原理到 SpringBoot 实践案例

观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都能得到通知并自动更新。 核心思想&#xff1a; 观察者模式将**观…...

【MyBatis】Java 数据持久层框架:认识 MyBatis

Java 数据持久层框架&#xff1a;认识 MyBatis 1.CRUD 注解2.映射注解3.高级注解3.1 高级注解3.2 MyBatis 3 注解的用法举例 MyBatis 和 JPA 一样&#xff0c;也是一款优秀的 持久层框架&#xff0c;它支持定制化 SQL、存储过程&#xff0c;以及高级映射。它可以使用简单的 XML…...

【Delphi】通过 LiveBindings Designer 链接控件示例

本教程展示了如何使用 LiveBindings Designer 可视化地创建控件之间的 LiveBindings&#xff0c;以便创建只需很少或无需源代码的应用程序。 在本教程中&#xff0c;您将创建一个高清多设备应用程序&#xff0c;该应用程序使用 LiveBindings 绑定多个对象&#xff0c;以更改圆…...

深度学习——基础知识

深度学习的重点在于优化&#xff0c;其中很重要的步骤在于如何调参&#xff0c;会涉及到一些微积分等数学知识。不同于以往接触到的数值运算&#xff0c;深度&#xff08;机器&#xff09;学习都是关于张量Tensor&#xff08;向量&#xff09;的计算&#xff0c;Python中最常用…...

QT实现升级进度条页面

一.功能说明 在Qt中实现固件升级的进度条显示窗口&#xff0c;你可以通过创建一个自定义的对话框&#xff08;Dialog&#xff09;来完成。这个对话框可以包含一个进度条&#xff08;QProgressBar&#xff09;、一些文本标签&#xff08;QLabel&#xff09;用于显示状态信息&am…...

JavaWeb--纯小白笔记04:Tomcat整合IDEA

IDEA整合Tomcat 1.点击Idea的导航栏里的Run&#xff0c;选择Edit Configurations 2.点击左上角的""&#xff0c;向下翻找到Tomcat Server 选择里面的Local 3.创建一个web工程&#xff0c;点击IDEA的File-->new-->project 然后选择Java Enterprise&#xff0c;…...

【jvm】动态链接为什么需要常量池

目录 1. 常量池的作用2. 动态链接与常量池的关系3. 动态链接的必要性 1. 常量池的作用 1.常量池是JVM&#xff08;Java虚拟机&#xff09;中用于存储字面量&#xff08;如字符串常量、整数常量等&#xff09;和符号引用&#xff08;如类和接口的完全限定名、字段的名称和描述符…...

HTTPS详解

文章目录 HTTPS加密 常见加密方式对称加密非对称加密非对称对称数据指纹 证书CA认证数字签名非对称证书对称 中间人 HTTPS 这也是一个应用层协议&#xff0c;是在HTTP协议的基础上引入了一个加密层 为什么要加密呢&#xff0c;这主要是因为如果不对传输主体加密&#xff0c;当…...

redis作为mybaits(mybatisplus)的缓存

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>配置application.yml文件 spring:data:redis:# 地址host: 127.0.0.1# 端口port: 6379# 数据…...

【环境配置】AST: Asymmetric Student-Teacher Networks for Industrial Anomaly Detection

文章目录 一、环境的配置二、预处理三、训练四、问题 一、环境的配置 # zheP04_cmp_AST $ conda create -n P04_cmp_AST python3.9 $ conda activate P04_cmp_AST $ conda install -y anaconda::scikit-learn $ conda install -y conda-forge::scipy $ conda install -y conda…...

TinkerTool System for Mac实用软件系统维护工具

TinkerTool System 是一款功能全面且强大的 Mac 实用软件&#xff0c;具有以下特点和功能&#xff1a; 软件下载地址 维护功能&#xff1a; 磁盘清理&#xff1a;能够快速扫描并清理系统中的垃圾文件、临时文件以及其他无用文件&#xff0c;释放宝贵的磁盘空间&#xff0c;保…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

【QT控件】显示类控件

目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建

目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程.   本…...