MyBatis 学习(三)之 MyBatis 全局配置文件

目录

1 MyBatis 全局配置文件

2 properties 元素

3 setting 设置

4 typeAlianses 别名处理器

5 typeHandler 类型处理器

6 objectFacotry 对象工厂(了解)

7 plugins 插件(了解)

8 environments 运行环境

9 databaseIdProvider 数据库厂商(了解)

10 mapper 加载 SQL 映射文件

11 参考文档


1 MyBatis 全局配置文件

MyBatais 全局配置文件所有配置项如下所示,配置项只能按照如下顺序进行设置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 
<configuration> <!--配置-->
    <properties/> <!--属性-->
    <settings/> <!--全局配置参数-->
    <typeAliases/> <!--类型别名-->
    <typeHandlers/> <!--类型处理器-->
    <objectFactory/><!--对象工厂-->
    <plugins/><!--创建-->
    <environments default=""><!--环境配置-->
        <environment id=""><!--环境变量-->
            <transactionManager type=""/><!--事务管理器-->
            <dataSource type=""/><!--数据源-->
        </environment>
    </environments>
    <databaseIdProvider type=""/><!--数据库厂商标识-->
    <mappers/><!--映射器-->
</configuration>

2 properties 元素

mysql.properties 配置文件

url=jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
name=root
password=123456
driver=com.mysql.cj.jdbc.Driver

通过 properties 元素导入 mysql.properties 配置文件,会在当前配置文件所在目录下查找 mysql.properties 配置文件

<properties resource="mysql.properties" />

此外,也可以用 properties 元素的 url 属性来指定属性文件的 URL

<!-- 指定一个网络上的属性文件 -->
<properties url="http://example.com/jdbc.properties" />

<!-- 指定一个位于本地文件系统中的属性文件 -->
<properties url="file:///path/to/config.properties" />

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照如下顺序来加载:

  • 在 properties 元素体内指定的属性首先被读取
<properties>
    <!--property子元素定义-->
    <property name="database.driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="database.url" value="jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
    <property name="database.username" value="root"/>
    <property name="database.password" value="123456"/>
</properties>
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性
// 加载数据库配置文件
is = Resources.getResourceAsStream("msyql.properties");
Properties properties = new Properties();
properties.load(is);

// 获取加密信息
String username= properties.getProperty("database.username");
String password= properties.getProperty("database.password");
 
// 解密用户名和密码,并重置属性
properties.setProperty("database.username", CyperTool.decodeByBase64(username));
properties.setProperty("database.password", CyperTool.decodeByBase64(password));

3 setting 设置

        setting 设置是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。但是大部分情况下使用默认值便可以运行,所以在大部分情况下不需要大量配置,只需要修改一些常用的规则即可。常用规则有自动映射、驼峰命名映射、级联规则、是否启动缓存、执行器类型等。

<settings>
    <!--缓存配置的全局开关:如果这里设置成false,那么即便在映射器中配置开启也无济于事 -->
    <setting name="cacheEnabled" value="true" />
    <!--延时加载的全局开关 -->
    <setting name="lazyLoadingEnabled" value="false" />
</settings>
属性名含义简介有效值默认值
cacheEnabled是否使用缓存是整个工程中所有映射器配置缓存的开关,即是一个全局缓存开关true | falsetrue
lazyLoadingEnabled是否开启延迟加载控制全局是否使用延迟加载。当有特殊关联关系需要单独配置时,可以使用 fetchType 属性来覆盖此配置true | falsefalse
aggressiveLazyLoading是否按需加载属性开启时,不论调用什么方法加载某个对象,都会加载该对象的所有属性,关闭后只会按需加载true | falsefalse
multipleResultSetsEnabled是否允许单一语句返回多结果集即 Mapper 配置中一个单一的 sql 配置是否能够返回多个结果集true | falsetrue
useColumnLabel使用列标签代替列名设置是否使用列标签代替列名true | falsetrue
useGenerateKeys是否支持 JDBC 自动生成主键设置之后,将会强制使用自动生成主键的策略true | falsefalse
autoMappingBehavior指定 MyBatis 自动映射字段或属性的方式有三种方式,NONE 时将取消自动映射;PARTIAL 时只会自动映射没有定义结果集的结果映射;FULL 时会映射任意复杂的结果集NONE, PARTIAL, FULLPARTIAL
autoMappingUnknownColumnBehavior设置当自动映射时发现未知列的动作有三种动作,NONE 时不做任何操作;WARNING 时会输出提醒日志;FALLING 时会抛出 SqlSessionException 异常表示映射失败NONE, WARNING, FALLINGNONE
defaultExecutorType设置默认的执行器有三种执行器,SIMPLE 为普通执行器;REUSE 执行器会重用处理语句;BATCH 执行器将重用语句并执行批量更新SIMPLE, REUSE, BATCHSIMPLE
defaultStatementTimeout设置超时时间该超时时间即数据驱动连接数据库时,等待数据库回应的最大秒数任意正整数
defaultFetchSize设置驱动的结果集为了防止从数据库查询出来的结果过多,而导致内存溢出,可以通过设置 fetchSize 参数来控制结果集的数量任意正整数
safeRowBoundsEnabled允许在嵌套语句中使用分页,RowBound,即行内嵌套语句如果允许在 sql 的行内嵌套语句中使用分页,就设置该值为 falsetrue | falsefalse
safeResultHandlerEnabled允许在嵌套语句中使用分页,ResultHandler,即结果及处理如果允许对 sql 的结果集使用分页,就设置该值为 falsetrue | falsetrue
mapUnderscoreToCamelCase是否开启驼峰命名规则映射表名数据库中的字段名称与工程中 Java 实体内的映射是否采用驼峰命名规则校验true | falsefalse
localCacheScopeMyBatis 利用本地缓存机制防止循环引用和加速重复嵌套查询默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据SESSION | STATEMENTSESSION
jdbcTypeForNullJDBC 类型的默认设置当没有参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER常用 NUL、VARCHAR、OTHEROTHER
lazyLoadTriggeerMethods指定哪个对象的方法触发一次延迟加载配置需要触发延迟加载的方法的名字,该方法就会触发一次延迟加载一个逗号分隔的方法名称列表

equals, clone,

hashCode, toString

defaultScriptingLanguage动态 sql 默认语言指定动态 sql 生成的默认语言一个类型的的别名或者一个类的全类名

org.apache.ibatis.

scripting.xmltargs.

XMLLanguageDriver

callSettersOnNulls是否在空值情况下调用 Set 方法指定当结果集中的值为 null 时是否调用映射对像的 setter (map 对象为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化是有用的。注意基本类型不能设置为 nulltrue | falsefalse
returnInstanceForEmptyRow返回空实体集对象当返回行的所有列都是空时,MyBatis 默认返回 null。当开启这个设置时,MyBatis 会返回一个空实例。此外,从 MyBatis 3.4.2 开始,它也适用于嵌套的结果集true | falsefalse
logImpl日志实现指定 MyBatis 所用日志的具体实现,为指定时将自动查找SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
proxyFactory代理工厂指定 MyBatis 创建具有延迟加载能力的对象所用到的代理工具CGLIB | JAVASSISTJAVASSIST
vfsImplvfs 实现指定 vfs 的实现自定义 VFS 实现类的全类名,以逗号分割
useActualParamName使用方法签名允许使用方法签名中的名称作为语句参数名称。要使用该特性,工程必须采用 Java8 编译,并且加上 -parameters 选项(从 MyBatis 3.4.1 版本开始)true | false

false

configurationFactory配置工厂指定提供配置实例的类。返回的配置实例用于加载反序列化的懒加载参数。这个类必须有一个签名的静态配置 getconfiguration() 方法(从 MyBatis 3.2.3 版本开始)一个类型别名或者一个类的全类名

4 typeAlianses 别名处理器

typeAliases 可以给类设置别名,这样当我们需要使用类时,可以不用每次都写那么复杂的全类名 (com.pojo.User)

<!--设置别名-->
<typeAliases>
    <!--对类单独进行别名设置  -->
    <typeAlias alias="user" type="com.pojo.User"></typeAlias>
    <typeAlias alias="student" type="com.pojo.Student"></typeAlias>
</typeAliases>

批量给类设置别名,为包中的每一个类设置别名,设置规则是:获取类名称,将其第一个字母变为小写

<!--设置别名-->
<typeAliases>
    <!-- 对包进行扫描,可以批量进行别名设置,设置规则是:获取类名称,将其第一个字母变为小写 -->
    <package name="com.pojo1"/>
    <package name="com.pojo2"/>
    <package name="com.pojo3"/>
</typeAliases>

通过 @Alias 注解设置别名

@Alias("user")
public class User {
    省略......
}

需要注意的是,MyBatis 已经为某些类定义了别名,此外,别名对大小写不敏感。对此,为某些类定义别名时,不能占用已有别名

5 typeHandler 类型处理器

        在 typeHandler 类型处理器中,包含 javaType 和 jdbcType 两种类型,其中 javaType 用来定义 Java 类型,jdbcType 用来定义数据库类型,而 typeHandler 的作用就是对 javaType 和 jdbcType 两种类型进行转换,如下图所示:

下图是 MyBatis 已经定义好的部分类型处理器,当然,我们也可以自定义类型处理器,此处不做介绍

6 objectFacotry 对象工厂(了解)

        objectFacotry 表示为对象工厂。对象工厂我们只需了解即可,因为到时候与 Spring 整合后,都会由 Spring 来管理。我们知道,在 JDBC 中查询的结果会保存在一个结果集中,而 MyBatis 也是这样,它会使用其定义的对象工厂 DefaultObjectFactory 来将查询的结果保存在结果集中。

7 plugins 插件(了解)

       plugins 插件是 MyBatis 提供的一个非常强大的机制。通过插件,我们可以在不修改 MyBatis 核心代码的情况下,对其核心行为进行修改。利用动态代理机制,插件能够介入到四大对象(Mapper Interface、Mapped Statement、Parameter Map 和 ResultSet Handler)的任何一个方法的执行过程中。

8 environments 运行环境

        environments 标签用于指定当前运行环境,在 MyBatis 中可以配置多种环境,比如开发、测试和生产环境。每种环境使用一个 environment 标签进行配置并指定唯一标识符,可以通过 environments 标签中的 default 属性指定一个环境的标识符来快速的切换环境,environment  标签里面分为两个可配置的标签:事务管理 (transactionManager)、数据源 (DataSource)。而在我们的日常开发中,这些都会交给 Spring 来管理,不用在全局配置中编写。

transactionManager

        transactionManager 配置事务管理器类型,type = JDBC | MANAGED | 自定义(type=全类名或别名)

  • JDBC 使用 JdbcTransactionFactory 工厂生成的 JdbcTransaction 对象实现,以 JDBC 的方式进行数据库的提交、回滚等操作,它依赖于从数据源得到的连接来管理事务范围
  • MANAGED 使用 ManagedTransactionFactory 工厂生成的 ManagedTransaction 对象实现,它的提交和回滚不需要任何操作,而是把事务交给容器进行处理,默认情况下会关闭连接,如果不希望默认关闭,只要将其中的 closeConnection 属性设置为 false 即可
  • 自定义的事务管理类型需要实现 TransactionFactory 接口

DataSource

        在 MyBatis 中,数据库是通过 PooledDataSourceFactory、UnpooledDataSourceFactory 和 JndiDataSourceFactory 三个工厂类来提供,前两者分别产生 PooledDataSource 和 UnpooledDataSource 类对象,第三个则会根据 JNDI 的信息获得外部容器实现的数据库连接对象,总之,它们最后都会生成一个实现了 DataSource 接口的数据库连接对象。

type = UNPOOLED | POOLED | JNDI | 自定义

UNPOOLED

        UNPOOLED 采用非数据库池的管理方式,每次请求都会新建一个连接,所以性能不是很高,使用这种数据源的时候,UNPOOLED 类型的数据源可以配置以下属性:

  • driver:数据库驱动名
  • url:数据库连接 URL
  • username:用户名
  • password:密码
  • defaultTransactionIsolationLevel:默认的事务隔离级别,如果要传递属性给驱动,则属性的前缀为 driver

POOLED

        POOLED 采用连接池的概念将数据库链接对象 Connection 组织起来,可以在初始化时创建多个连接,使用时直接从连接池获取,避免了重复创建连接所需的初始化和认证时间,从而提升了效率,所以这种方式比较适合对性能要求高的应用中。除了 UNPOOLED 中的配置属性之外,还有以下几个修改连接池的配置:

  • poolMaximumActiveConnections:用于设置连接池中允许的最大活跃连接数。超过这个数量的连接将会被阻塞,直到有连接被释放为止,默认值为 10

  • poolMaxmumIdleConnections:用于设置连接池中允许的最大空闲连接数。当连接池中的连接数量超过这个值时,多余的连接将会被释放,默认值为 5

  • poolMaxmumCheckoutTime:用于设置连接在连接池中的最大使用时间。超过这个时间的连接将会被强制回收,默认值为 20000 毫秒(即 20 秒)

  • poolTimeToWait:用于设置从连接池中获取连接时的最大等待时间。如果在这个时间内无法获取到连接,将会抛出超时异常,默认值为 20000 毫秒(即 20 秒)

JNDI

        数据源 JNDI 的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。这种数据源只需配置两个属性:

  • initial_context:用来在 InitialContext 中寻找上下文。可选,如果忽略,data_source 属性将会直接从 InitialContext 中寻找
  • data_source:引用数据源实例位置上下文的路径。当提供 initial_context 配置时,data_source 会在其返回的上下文进行查找,否则直接从 InitialContext 中查找

9 databaseIdProvider 数据库厂商(了解)

        databaseIdProvider 元素主要是为了支持不同厂商的数据库,这个元素不常用。

<!--数据库厂商标示 -->
<databaseIdProvider type="DB_VENDOR">
    <property name="Oracle" value="oracle"/>
    <property name="MySQL" value="mysql"/>
    <property name="DB2" value="d2"/>
</databaseIdProvider>

以下是 databaseIdProvider 中的属性介绍:

  • Type:DB_VENDOR,使用 MyBatis 提供的 VendorDatabaseIdProvider 解析数据库厂商标识。也可以实现 DatabaseIdProvider 接口来自定义
  • Property-name:数据库厂商标识
  • Property-value:为数据库厂商标识起一个别名,方便 SQL 语句使用 databaseId 属性引用

设置了以上配置,我们就可以在自己的 sql 语句中使用属性 databaseId 来标示数据库类型

<!-- 查询所有用户 -->
<select id="selectAllUser" resultType="com.entity.User" databaseId="oracle">
    select * from t_user
</select>

10 mapper 加载 SQL 映射文件

mapper 用来加载配置的 SQL 映射文件,它有以下四种加载方式:

  • 用文件路径引入
  • 使用 URL 方式引入
  • 用类注册引入
  • 用包名引入(推荐)
<mappers>
    <!-- 用文件路径引入,这种方式是相对路径,相对于项目目录下 -->
    <mapper resource="com/mapper/UserMapper.xml" />

    <!-- 使用 URL 方式引入,这种方式是绝对路径,
    就是从我们的磁盘读取映射文件,一般不会使用这种方式 -->
    <mapper url="D:/xxx/com/mapper/UserMapper.xml" />

    <!-- 用类注册引入,若使用这种方式,Mapper接口的名称必须与映射文件的名称相同,
    并且要在同一个包名下,否则会找不到。如:UserMapper.java(接口)—UserMapper.xml(映射文件) -->
    <mapper class="com.mapper.UserMapper" />

    <!-- 用包名引入(推荐),这种方式的要求同样是Mapper接口和Mapper的映射文件的名称要相同,
    并且要放在相同的包名下,否则会导致找不到 -->
    <package name="com.mapper"/>
</mappers>

11 参考文档

尚硅谷文档

MyBatis 配置 setting 详解

Mybatis3详解(三)----Mybatis全局配置文件详解 - 唐浩荣 - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/420417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cpp基础学习笔记03:类型转换

static_cast 静态转换 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的&#xff1b;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。用于基本数据类型之间的转换&#xff…

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

[HackMyVM]靶场 Adria

kali:192.168.56.104 主机发现 arp-scan -l 靶机:192.168.56.108 端口扫描 nmap -p- 192.168.56.108 开启了 22 80 139 445端口 进入web 编辑 /etc/hosts&#xff0c;把192.168.56.108 adria.hmv添加进去重新访问 里面没什么有用的东西&#xff0c;注册需要邮箱&#xff0c;…

在线ai写作,让你随时随地创作优质内容

如今的ai技术已经渗透到我们生活的方方面面。其中&#xff0c;AI写作成为了一个备受关注的领域。如今&#xff0c;我们可以利用在线ai写作在任何时间、任何地点创作出优质的内容。 传统的写作过程需要大量的时间和精力。从构思到写作再到修改&#xff0c;每一个环节都需要我们投…

kotlin单例模式,4年小Android的心路历程

一、Java基础 我知道大家一定有很久都没有注意到这个点了&#xff0c;平时的工作应该也很少涉及到这些底层知识吧&#xff0c;但是这些东西很重要。如果是想要跳槽加薪或者是应对即将到来的面试&#xff0c;这些都是不可忽视的知识。 在这一点里&#xff0c;需要重视的点有&am…

常见查找算法Java实现

顺序&#xff08;线性&#xff09;查找二分查找/折半查找插值查找斐波那契查找 线性查找 判断数列是否包含要求&#xff0c;如果找到了&#xff0c;就提示找到了&#xff0c;并给出下标值 // 线性查找 public static ArrayList<Integer> seqSearch(int[] arr, int value…

Windows 10 合并磁盘分区 (G and H)

Windows 10 合并磁盘分区 [G and H] 1. 设备和驱动器2. 计算机 -> 管理 -> 存储 -> 磁盘管理3. 删除卷4. 新建简单卷5. 设备和驱动器References 1. 设备和驱动器 2. 计算机 -> 管理 -> 存储 -> 磁盘管理 3. 删除卷 H: -> right-click -> 删除卷 H: 变…

项目案例:图像分类技术在直播电商中的应用与实践

一、引言 在数字化浪潮的推动下&#xff0c;电商行业迎来了一场革命性的变革。直播电商&#xff0c;作为一种新兴的购物模式&#xff0c;正以其独特的互动性和娱乐性&#xff0c;重塑着消费者的购物习惯。通过实时的直播展示&#xff0c;商品的细节得以清晰呈现&#xff0c;而互…

小红书关键词爬虫

标题 1 统计要收集的关键词&#xff0c;制作一个文件夹2 爬取每一页的内容3 爬取标题和内容4 如果内容可以被查看&#xff0c;爬取评论内容5 将结果进行汇总&#xff0c;并且每个帖子保存为一个json文件&#xff0c;具体内容6 总结 1 统计要收集的关键词&#xff0c;制作一个文…

Linux时间同步(PPS、PTP、chrony)分析笔记

1 PPS(pulse per second) 1.1 简介 LinuxPPS provides a programming interface (API) to define in the system several PPS sources. PPS means "pulse per second" and a PPS source is just a device which provides a high precision signal each second so t…

靠谱的车【华为OD机试-JAVAPythonC++JS】

题目描述 程序员小明打了一辆出租车去上班。出于职业敏感&#xff0c;他注意到这辆出租车的计费表有点问题&#xff0c;总是偏大。 出租车司机解释说他不喜欢数字4&#xff0c;所以改装了计费表&#xff0c;任何数字位置遇到数字4就直接跳过&#xff0c;其余功能都正常。 比如&…

外汇天眼:ASIC 获得针对前 Blockchain Global 董事的临时出行限制令

澳大利亚证券与投资委员会&#xff08;ASIC&#xff09;已经针对前Blockchain Global Limited&#xff08;清算中&#xff09;董事梁国&#xff08;又名Allan Guo&#xff09;获得了临时旅行限制令。这些命令在其他方面&#xff0c;阻止郭先生在2024年8月20日或进一步命令之前离…

C++数据结构与算法——二叉搜索树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

C++数据结构与算法——二叉树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

机器学习项目外包注意事项

将机器学习项目外包给外部团队或合作伙伴是一种常见的做法&#xff0c;特别是当您的团队缺乏特定领域的专业知识或资源时。以下是一些关于机器学习项目外包的要点和注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#…

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候&#xff0c;有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点&#xff1a; ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏&#xff0c;Unity最大支持8屏显示 1.相机设置 ①我们打开Un…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…

【论文笔记】An Effective Adversarial Attack on Person Re-Identification ...

原文标题&#xff08;文章标题处有字数限制&#xff09;&#xff1a; 《An Effective Adversarial Attack on Person Re-Identification in Video Surveillance via Dispersion Reduction》 Abstract 通过减少神经网络内部特征图的分散性攻击reid模型。 erbloo/Dispersion_r…

【C语言】常见的动态内存管理错误

前言 上一篇介绍了C语言中 动态内存管理函数&#xff0c;本片讲解的是 在我们使用动态内存管理时 常见的错误&#xff0c;一起来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 1.对NULL指针的解引⽤操作 错…

深入解析Golang的encoding/ascii85库:从基础到实战

深入解析Golang的encoding/ascii85库&#xff1a;从基础到实战 引言基础知识什么是ASCII85编码&#xff1f;ASCII85编码的工作原理ASCII85编码的优点ASCII85编码的缺点 使用Golang的encoding/ascii85库引入encoding/ascii85包ASCII85编码ASCII85解码实战示例小结 进阶技巧和最佳…