【笔记学习篇】一篇文章搞定Mybatis-快速回顾

在这里插入图片描述

概述

5.1.1 Mybatis简介
Mybatis是一款优秀的持久层框架,它以sql为中心,支持定制化sql、存储过程以及高级映射。
使用Mybatis框架,可以无需手动编写基础的JDBC代码、无需手动设置参数和转换结果集到对象。
Mybatis可以使用简单的xml或注解来配置和映射原声类型、接口和Java的pojo为数据库中的记录。
Mybatis框架本身是对JDBC的轻量级封装,学习成本低,而sql语句也方便优化,执行效率高,使用灵活,更加适合在电商等互联网项目中使用。

Mybatis的简介

在介绍Mybatis框架时,以mysql数据库操作为例。
首先,创建一个用户表作为后续讲解的操作基础,表结构如图5.1所示:
在这里插入图片描述

其次,创建g_ac_user表,并添加一条记录:

在这里插入图片描述

Mybatis底层也是基于JDBC的,与数据库之间的访问操作通过JDBC完成。

JDBC全称为Java Database Connectivity,是一种用于执行sql语句的Java API,可以为多种关系数据库提供统一访问接口。JDBC隔离了操作不同数据库的访问差异。

(2)JDBC访问操作数据库流程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

一般来说,JDBC代码耦合性强,需要在代码中拼接sql语句,编码与传参方式不灵活,同时每一次操作都需要创建与销毁连接。
Mybatis框架针对这些不足有相应的解决方案。使用Mybatis框架后,可以在xml中写sql语句,使sql语句与Java代码分离。

5.2 Mybatis初探

在g_ac_user数据表定义的基础上,介绍Mybatis框架使用的基本流程。
现在通过定义一个非常简单的需求–根据id查询用户详情,来完成第一个Mybatis程序。

1.添加依赖库
首先,需要添加Mybatis的依赖包,这里主要是引入mysql的驱动包。

在这里插入图片描述

2.在build中添加资源引入配置

2.在build中添加资源引入配置

在这里插入图片描述
3.创建实体类
在这里插入图片描述
4.创建对应数据表
创建数据库语句
在这里插入图片描述

创建数据表语句,这里设置主键id为自动递增:

在这里插入图片描述

  1. 添加xml映射文件

在这里插入图片描述

  1. 添加mybatis.xml配置文件
    在这里插入图片描述
  2. 测试

每个基于 Mybatis的应用都是以一个SqlSessionFactory的实例为核心的。

SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得,而
SqlSessionFactoryBuilder则可以从xml配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。

Mybatis封装了对数据库的访问,把对数据库的会话和事务控制放到了SqlSession对象中。
Mybatis操作数据库有两种方式:
(1)从ibatis继承的传统的SqlSession接口操作
(2)使用Mapper的操作方式
接下来结合实例看看这两种方式。

Mybatis操作数据库有两种方式:
(1)从ibatis继承的传统的SqlSession接口操作

在这里插入图片描述
在这里插入图片描述

Mybatis操作数据库有两种方式:
(2)使用Mapper的操作方式

在这里插入图片描述

在这里插入图片描述
Mybatis操作数据库有两种方式:
以上两种操作方式的输出结果是一致的,输出结果为:

在这里插入图片描述

5.3.1 Xml映射文件

在Mybatis框架中,数据库操作映射是由xml配置文件和mapper映射方法共同组成的。随后分别对数据库操作常用的增删改查操作的配置方式进行简要介绍。

数据库常用操作配置方式

  1. 增加:
    (1)不传参
    在这里插入图片描述

上述是最简单的方式,在语句中直接给sql语句写上固定的值,然后对应的mapper方法只需要写成:
在这里插入图片描述

数据库常用操作配置方式

  1. 增加:
    (2)parameterType指定类型
    在这里插入图片描述

对应的mapper方法如下:
在这里插入图片描述

数据库常用操作配置方式

  1. 增加:
    (3)@Param注解指定名称
    在这里插入图片描述
    对应的mapper方法:
    在这里插入图片描述
    数据库常用操作配置方式
  2. 删除:
    在delete标签中写删除语句::
    在这里插入图片描述
    对应mapper接口方法
    在这里插入图片描述

数据库常用操作配置方式
3. 修改:
在delete标签中写修改语句:

对应mapper接口方法:

在这里插入图片描述在这里插入图片描述
数据库常用操作配置方式
4. 查询:
在select标签中写查询语句:
在这里插入图片描述

对应mapper接口方法:
在这里插入图片描述
数据库常用操作配置方式
4. 查询:
(1)模糊查询
在sql中模糊查询使用like关键词,在之前的学习中了解到等号的使用方式就是直接在等号后面写上变量即可,那么like在Mybatis中怎么使用呢?
方法一:方法一:使用模板变量
在这里插入图片描述

方法二:使用双引号包裹%

在这里插入图片描述

方法三:CONCAT函数连接字符串

在这里插入图片描述

数据库常用操作配置方式
4. 查询:
(2)结果映射
resultMap是Mybatis中提供的一个非常强大的功能,虽然通过resultType=java.util.HashMap也可以来指定返回值的包装,在大部分情况下都够用,但是HashMap不是一个较好的领域模型。
更多的会使用JavaBean和POJO作为领域模型,Mybatis对两者都提供了支持,但两者不能同时使用。

数据库常用操作配置方式
4. 查询:
(2)结果映射
select的resultMap值对应resultMap标签的id,实例如下。

在这里插入图片描述

数据库常用操作配置方式
4. 查询:
(3)结果缓存
Mybatis缓存机制有两级,一级缓存已经自动开启,无需手动操作,而且不能关闭;二级缓存需要手动开启。
开启方式:在全局配置文件的settings标签中增加或修改如下配置:
在这里插入图片描述

然后在响应的xml映射文件中增加cache标签:
在这里插入图片描述

数据库常用操作配置方式
4. 查询:
(3)结果缓存
cache元素用来开启当前mapper的namespace下的二级缓存,该元素的属性设置如下:
flushInterval:刷新间隔,可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段,默认情况下是不设置的,也就是没有刷新间隔,缓存仅仅调用语句时刷新。

size:缓存数目,可以被设置为任意正整数,要记住缓存对象数目和运行环境可用内存资源数目,默认值是1024。

readOnly:只读,属性可以被设置为true或false。因为只读的缓存会给所有调用者返回缓存对象的相同实例,所以这些对象不能被修改。这提供了很重要的性能优势,可读写的缓存会返回缓存对象的拷贝(通过序列化),这个操作会慢一些,但是安全,因此默认是false。
eviction:收回策略,默认为LRU,有如下几种:
LRU:最近最少使用的策略,移除最长时间不被使用的对象。
FIFO:先进先出策略,按对象进入缓存的顺序来移除它们。
SOFT:软引用策略,移除基于垃圾回收器状态和软引用规则的对象。WEAK:弱引用策略,更积极地移除基于垃圾收集器状态和弱引用规则的对象。

5.3.2 动态sql语句

动态sql语句也是Mybatis非常强大的一个特性,可以让开发者在sql语句编写过程中减少出错的几率。
动态sql语句通过使用类似xml的语法来进行逻辑的判断与处理,Mybatis 3通过使用功能强大的OGNL表达式,大大精简了元素的种类,使得学习成本更低了。
在动态sql语句中,#方式能很大程度防止sql注入, 方式无法防止 s q l 注入。 方式无法防止sql注入。 方式无法防止sql注入。一般用于传入数据库对象,比如表名、列名。KaTeX parse error: Expected 'EOF', got '#' at position 47: …其安全性受到更多威胁,一般能用#̲的就尽量不用
动态sql相关标签包括条件、循环、关联和包含几个分类。

(1)条件型
根据条件判断是否拼接语句,包含标签组if、choose(when、otherwise)、trim等。

  1. if、where
    通常作为where子句的一部分。一般用来根据前端传过来的条件进行筛选,比如当前端要在设备列表中根据设备名称查询设备列表。

  2. if、where
    在传统的写法中,为了减少后续代码的判断,通常会在where后跟上一个1=1这样一个无意义的条件,以方便后续的条件拼接,如:

在这里插入图片描述

  1. if、where
    如果放在where标签内,则where标签会自动帮助开发者判断,当where中的条件有一项if是true而拼接了and或or语句,那么就会自动将where加上;否则将不会加上where。

在这里插入图片描述
2. chose
主要包含的标签有以下两个:
when
Otherwise
choose标签包含when和otherwise两个子标签,来实现在多个选项中进行判断的逻辑。有些类似于Java代码中switch语句。

  1. chose
    在Mybatis中没有else标签,要实现if、elseif、else功能,也需要借助于这个标签来实现。这里实现当前端不传某个设备状态的时候,查询的设备列表中不包含标记为“已删除”状态的设备,示例语句如下:
    在这里插入图片描述

  2. chose
    虽然在大部分情况下,前面的条件判断标签已经能满足日常使用的需求,但是假如在特殊场景下,用户依然会有灵活控制的需求。
    通过trim标签,可以实现类似于自定义标签的功能,实现更灵活的控制。下面以实现一个where为例,与where标签等价的trim标签如下

在这里插入图片描述

循环型主要使用foreach标签。foreach标签对集合进行操作,可以用来进行多条数据的插入或更新,以及查询语句的自动拼接。
(1)根据id数组查询列表

在这里插入图片描述

对应的mapper接口方法:

在这里插入图片描述
(2)批量插入
模板sql语句:

在这里插入图片描述

对应的mapper接口方法
在这里插入图片描述

(3)关联

关联查询一般有两种方式,分别是“嵌套结果”和“嵌套查询”。
嵌套查询的语句一般结构简单,但是在一次查询中要执行多条sql语句,效率会比较低;嵌套结果的语句结构比较复杂,但是语句只执行一次,性能相对高一些。
关联查询的场景包括一对一、一对多、多对一。

  1. 一对一
    示例:如果一条账号信息对应一条用户信息,那么登录表和用户表就是一对一的关系。所以,需要先创建账号信息表和身份信息表,再定义映射文件。
    在这里插入图片描述

  2. 一对一
    创建账号信息表:

在这里插入图片描述

创建身份信息表:
在这里插入图片描述

  1. 一对一
    定义sql映射文件
    方法一:嵌套结果(实际上就是通过join表连接查询,然后通过resultMap指定返回值结构包装)

在这里插入图片描述

  1. 一对一
    定义sql映射文件
    方法二:嵌套查询:实际是做多次查询,将表之间关联的数据关系拆分为多条语句执行。

在这里插入图片描述

  1. 一对一
    定义sql映射文件
    方法二:嵌套查询:实际是做多次查询,将表之间关联的数据关系拆分为多条语句执行。

在这里插入图片描述

  1. 一对多
    这里,假设一个账号对应多条用户信息。
    指定collection标签的property属性,通过select属性指定下一步查询使用的语句id,通过column属性向下一步查询传递参数。

  2. 一对多
    方法一:嵌套结果

在这里插入图片描述

  1. 一对多
    方法一:嵌套查询

在这里插入图片描述

  1. 多对一
    人员属于某个单位,这里创建单位表,包含字段id、unit_name
    方法一:嵌套结果

在这里插入图片描述

  1. 多对一
    方法二:嵌套结果

在这里插入图片描述

面向对象的三大特性,封装是其中之一。
Mybatis也提供了include和sql标签来实现包含的功能。可以通过sql标签定义通用语句,比如将条件查询拆分然后在多处引用,Mybatis会在编译阶段将其合并。
比如对于查询用户列表,拆分前如下代码所示,条件判断只能在这一处使用。

在这里插入图片描述

拆分后,将if条件判断放入sql标签内,那么whereCondition就是一个可复用的语句块,可以在多个地方引用,减少代码重复。
在这里插入图片描述

5.3.2* mapper

Mybatis中的mapper就是指Mybatis执行数据库操作的接口和方法,在非注解模式下还包括与当前mapper类所对应的xml文件。
在Mybatis提供的功能中,可以直接在java mapper接口上及其方法参数上使用注解,可用注解如下:
@Insert : 新增 , 和xml insert sql语法完全一样;
@Select : 查询, 和xml select sql语法完全一样;
@Update : 更新, 和xml update sql语法完全一样;
@Delete : 删除, 和xml delete sql语法完全一样;
@Param : 入参,通过value指定sql语句中可用的参数名称;
@Results : 结果集合;
@Result : 结果。

5.3.3 Mybatis的xml配置

xml映射配置文件包含了对Mybatis框架运行较为重要的settings、properties和typeAliases信息等,以下分别予以介绍。

  1. properties
    这些属性都是可以外部配置并且可以动态替换的,既可以在典型的Java属性文件中配置,也可以通过properties元素的子元素来传递,例如:

在这里插入图片描述

  1. properties
    其中的属性就可以在整个配置文件中使用来替换需要动态配置的属性值,比如
    在这里插入图片描述

driver和url属性将会由config.properties文件中对应的值来替换,这样就为配置提供了诸多灵活选择,属性也可以被传递到SqlSessionBuilder.build()方法中。例如:

在这里插入图片描述

  1. properties
    如果属性在多个地方进行了配置,那么Mybatis加载的顺序为:
    (1)在properties元素体内指定的属性首先被读取
    (2)然后根据properties元素中的resource属性读取类路径下的属性文件,或者根据url属性文件或根据url属性指定的路径读取属性文件,并覆盖已经读取的同名属性。
    (3)最后读取作为方法参数传递的属性,并覆盖已经读取的同名属性。
    因此,通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,properties中指定属性优先级最低。以下对Mybatis配置中的重要参数进行介绍。

  2. settings
    这是Mybatis中极为重要的参数调整,它们会改变Mybatis的运行时行为。一个完整的settings元素的示例如下:
    在这里插入图片描述

  3. typeAliases
    类型别名是为Java类型设置一个短的名字,它只和XML配置有关,存在的意义仅在于用来减少类完全限定类型的冗余,例如:
    在这里插入图片描述

当这样配置时,Blog不仅可以用在任何使用domain.blog.Blog的地方,也可以指定一个包名,Mybatis会在包名下搜索需要的Java Bean,比如:

在这里插入图片描述

每一个在包domain.blog中的Java Bean,在没有注解的情况下,会使用Bean的首字母小写的非限定类名来作为它的别名。(比如domain.blog.Author的别名为author;若有注解,则别名为其注解值。)

5.3.4 日志

一般来说,Mybatis内置日志工厂在运行时选择合适的日志工具,并且内置的日志工厂将从以下日志实现中按顺序查找。

  1. slf4j
  2. Apache Commons Logging
  3. Log4j 2
  4. Log4j
  5. JDK Logging
    如果未找到,那么日志功能不启用。

一些Java服务器中已经内置了Apache Commons Logging的实现,所以当Mybatis的运行环境在这些服务器中时,需要在配置文件中添加一个setting配置。

5.3.4 日志
日志输出需要用到src/main/resources下的log4j.properties配置文件,示例如下:
logImpl可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING,或者是实现了接口org.apache.ibatis.logging.Log 的,且构造方法是以字符串为参数的类的完全限定名。

在这里插入图片描述

5.4.1 代码生成

在代码编写过程中,其中一项比较繁琐的工作就是各种目录和文件的创建,以及其中基础内容的添加。这些工作如果完全由人工手动完成,那么将占用开发者大量时间在这样的重复工作之中,这个时候,代码生成器就是至关重要的了。
Mybatis通过Mybatis Generator提供代码生成的功能。
要使用Mybatis Generator提供的代码生成功能,需要引入相关的jar包。

(1)添加配置文件
在src/main/resources中新增generator-config.xml配置文件,配置数据库连接、指定生成的文件和位置,以及所要生成的数据库表。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(1)添加配置文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(2)生成方式
通常来说,生成方式主要有如下几种:
命令行方式
使用ant
使用maven
使用Java代码
Eclipse插件
下面分别对命令行生成、Java代码生成和Eclipse插件生成三种方式进行简要介绍。

插件机制是使用框架编程过程中一种非常优秀的机制,可以在不改动原有程序文件代码的情况下实现功能的扩展。 Mybatis允许在映射语句执行的某一点进行拦截增强,默认情况下,Mybatis可以被拦截的接口和方法有列举如下:
Executor(update、query、flushStatements、commint、rollback、getTransaction、close、isClosed)
ParameterHandler(getParameterObject、setParameters)
ResultSetHandler(handleResultSets、handleOutputParameters)
StatementHandler(prepare、parameterize、batch、update、query)
由于这些都是Mybatis的基础模块,所以编写插件的时候需要非常小心,以免影响Mybatis本身功能的稳定性。

(1)插件模板
Mybatis插件实现org.apache.ibatis.plugin.Interceptor接口,在实现类中进行插件功能逻辑的编写。Interceptor接口的结构如下:

在这里插入图片描述

从结构上可以看到包含3个方法需要实现:
1.intercept方法:是拦截器实现的主要方法。这种实现方法及命名在其它框架中也有使用,插件所需要做的主要操作逻辑也应该是在这个方法内部完成的。
2.plugin方法:这个函数中的参数target就是被拦截器拦截的对象,此方法会在目标对象执行前被调用,方法的实现很简单,只需要调用org.apache.ibatis.plugin.Plugin类的静态方法wrap即可拦截目标对象.
3.setProperties方法:是用来传递插件的参数,不同的参数可以影响插件的行为。这里的参数通过在mybatis-config.xml文件中配置插件来传入

(2)注解配置拦截器及签名
除了需要实现拦截器接口之外,还需要给实现类配置拦截器添加注解org.apache.ibatis.plugin.@Interceps和org.apache.ibatis.plugin.@Signature。这两个注解是用来配置拦截器要拦截的接口的方法。配置签名如下:

在这里插入图片描述

5.5.2 插件使用

打开前面“开发第一个Mybatis程序中的UserMapper类”,按着键盘ctrl键,然后将鼠标移动到接口方法上,可以看到其中多了一个选项“Open … in *.xml”,这就是mybatipse插件对于提示功能的增强,如图5.11所示。

在这里插入图片描述

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

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

相关文章

2024.10月7~10日 进一步完善《电信资费管理系统》

一、新增的模块: 在原项目基础上,新增加了以下功能: 1、增加AspectJ 框架的AOP 异常记录和事务管理模块。 2、增加SpringMVC的拦截器,实现登录 控制页面访问权限。 3、增加 Logback日志框架,记录日志。 4、增加动态验…

ssm基于Javaee的影视创作论坛的设计与实现

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 目 录 III 第1章 绪论 1 1.1选题动因 1 1.2目的和意义 1 1.3论文结构安排 2 第2章 开发环境与技术 …

Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效果

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 用户体验成为了检验产品成功与否的关键因素。而动画效果,作为提升用户体验的重要手段,在网页和应用开发中扮演着举足轻重的角色…

机器学习、深度学习评价指标汇总:TP、TN、FP、FN、AP、mAP、IoU、mAP@3、Prec@10、 Acc@10

系列文章目录 文章目录 系列文章目录一、真正例(True Positive)、假正例(False Positive)、真负例(True Negative)和假负例(False Negative)是评估分类模型性能的重要概念。1. 定义2…

攻防世界(CTF)~Reverse-easyRE1

题目介绍 下载附件后一个32位一个64位 64位的放到ExeinfoPE查看一下有无壳子(无壳) 放IDA看一下伪代码,习惯性看一下main函数,直接发现了flag flag{db2f62a36a018bce28e46d976e3f9864}

2024互联网下载神器IDM6.42你值得拥有

🔥 互联网下载神器大揭秘!IDM6.42你值得拥有 🚀 Hey,各位小伙伴们,今天我要给你们安利一款我超爱的软件——Internet Download Manager 6.42(简称IDM),这款下载器简直就是下载界的“…

MinIO分片上传超大文件(纯服务端)

目录 一、MinIO快速搭建1.1、拉取docker镜像1.2、启动docker容器 二、分片上传大文件到MinIO2.1、添加依赖2.2、实现MinioClient2.3、实现分片上传2.3.0、初始化MinioClient2.3.1、准备分片上传2.3.2、分片并上传2.3.2.1、设置分片大小2.3.2.2、分片 2.3.3、分片合并 三、测试3…

Java基础-泛型机制

文章目录 为什么引入泛型泛型的基本使用泛型类泛型接口泛型方法泛型数组正确的数组声明使用场景如何理解Java中的泛型是伪泛型?泛型中类型擦除 泛型数组:如何正确的初始化泛型数组实例? 为什么引入泛型 引入泛型的意义在于: 适用…

谷歌AI大模型Gemini API快速入门及LangChain调用视频教程

1. 谷歌Gemini API KEY获取及AI Studio使用 要使用谷歌Gemini API,首先需要获取API密钥。以下是获取API密钥的步骤: 访问Google AI Studio: 打开浏览器,访问Google AI Studio。使用Google账号登录,若没有账号&#xf…

SpringBoot中间件Docker

Docker(属于C/S架构软件) 简介与概述 1.Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux …

2款.NET开源且免费的Git可视化管理工具

Git是什么? Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。Git最初是由Linux开发者Linus Torvalds创建的,它具有高效、灵活、稳定等优点,如今已成为软件开发领域中最流行…

python34_可变字符串

可变字符串 说明 在 Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,智能创建新的字符串对象。 但是,经常我们确实需要原地修改字符串,可以使用 io.StringIO对象或 array 模块impo…

Redis:string类型

Redis:string类型 string命令设置与读取SETGETMSETMGET 数字操作INCRINCRBYDECRDECRBYINCRBYFLOAT 字符串操作APPENDSTRLENGETRANGESETRANGE 内部编码intembstrraw 在Redis中,字符串string存储的是二进制,以byte为单位,输入的二进…

电影选票选座系统|影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)

电影院订票选座小程序 目录 基于微信小程序的电影院购票系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能实现 2、管理员功能实现 (1)影院信息管理 (2)电影信息管理 (3)已完成…

C语言 | Leetcode C语言题解之第464题我能赢吗

题目: 题解: typedef struct HashItem {int key;bool val;UT_hash_handle hh; } HashItem;bool dfs(int maxChoosableInteger, int usedNumbers, int desiredTotal, int currentTotal, HashItem **memo) {HashItem *pEntry NULL;HASH_FIND_INT(*memo, …

深度解析:从浏览器输入链接到页面展现的奇幻历程

〇、前言 当我们在浏览器中输入一个网址,例如:example.com,按下回车键后,会发生什么呢? 主要会发生以下这些过程:域名解析、建立HTTP连接、发送HTTP请求、数据传输、渲染网页、断开HTTP连接。 一、域名解…

dfs +剪枝sudoku———poj2676

目录 前言 lowbit函数 数独 suduku 问题描述 输入 输出 问题分析 子网格位置 优化搜索顺序剪枝1 优化搜索顺序剪枝2 可行性剪枝 代码 前言 lowbit函数 这是一个利用二进制位运算取出二进制数最后一位’1‘的函数 数独 数独大家肯定都玩过,…

Vue/组件的生命周期

这篇文章借鉴了coderwhy大佬的Vue生命周期 在Vue实例化或者创建组件的过程中 内部涉及到一系列复杂的阶段 每一个阶段的前后时机都可能对应一个钩子函数 以下是我根据coderwhy大佬文章对于每一个阶段的一些看法 1.过程一 首先实例化Vue或者组件 在实例化之前 会对应一个钩子函…

Internet Download Manager6.42免费版下载神器新体验

🚀 开篇就燃!你的下载速度被“TA”承包了 #### 🌟 初识IDM 6.42,下载界的“超跑”驾到 各位追求效率的小伙伴们,今天小红要来揭秘一款让我彻底告别“龟速”下载的神器——Internet Download Manager (简称IDM) 6.42版&…

threejs-基础材质设置

一、介绍 主要内容:基础材质(贴图、高光、透明、环境、光照、环境遮蔽贴图) 主要属性: side: three.DoubleSide, //设置双面 color: 0xffffff, //颜色 map: texture, //纹理 transparent: true, // 透明度 aoMap: aoTexture, //ao贴图 aoMapIntensity: 1…