【笔记学习篇】一篇文章搞定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所示。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

xtu oj 四位数

样例输入# 2 1990 1111样例输出# 5 0 分离整数与合并 AC代码 #include<stdio.h> //判断四个数码是否相等 int Judge(int n){int flag1;int gn%10,sn/10%10,bn/100%10,qn/1000;if(gs&&gb&&gq)flag0;return flag; } int main(){int T;scanf("%d…

使用 Go 语言与 Redis 构建高效缓存与消息队列系统

什么是 Redis&#xff1f; Redis 是一个开源的内存数据库&#xff0c;支持多种数据结构&#xff0c;包括字符串、列表、集合、哈希和有序集合。由于 Redis 运行在内存中&#xff0c;读写速度极快&#xff0c;常被用于构建缓存系统、实时排行榜、会话存储和消息队列等高并发场景…

代码随想录算法训练营第四十六天 | 647. 回文子串,516.最长回文子序列

四十六天打卡&#xff0c;今天用动态规划解决回文问题&#xff0c;回文问题需要用二维dp解决 647.回文子串 题目链接 解题思路 没做出来&#xff0c;布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0…

YOLO11改进|SPPF篇|引入YOLOv9提出的SPPELAN模块

目录 一、【SPPELAN】模块1.1【SPPELAN】模块介绍1.2【SPPELAN】核心代码 二、添加【SPPELAN】模块2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【SPPELAN】模块 1.1【SPPELAN】模块介绍 下图是【SPPELAN】的结构图&#xff0c;让我们…

手游和应用出海资讯:字节跳动《Lemon8》在美下载量飙升;美团海外版《Keeta》进军沙特市场

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为10月第一周资讯&#xff1a; ● OpenAI Sora负责人加盟 Google DeepMind ● 字节跳动《Lemon8》登顶美国App Store排行榜 ● 消息称腾讯与Guillemot家族考虑收购育碧 ● OpenAI官宣获66亿美元融资 ●…

Could not get JDBC Connection: wait millis 10000, active 500

Could not get JDBC Connection: nested exception is com,alibaba,druid.pool,GetConnectionTimeoutException: wait millis 10000, active 500 1、生产突然出现这样的问题&#xff0c;后经过各种分析查找 jmap -dump:formatb,filewar_l.hporf 10333 ‌jmap -dumpb命令用于生成…

DGL库之HGTConv的使用

DGL库之HGTConv的使用 论文地址和异构图构建教程HGTConv语法格式HGTConv的使用 论文地址和异构图构建教程 论文地址&#xff1a;https://arxiv.org/pdf/2003.01332 异构图构建教程&#xff1a;异构图构建 异构图转同构图&#xff1a;异构图转同构图 HGTConv语法格式 dgl.nn.…

示教器界面介绍

1. 示教器外部按键介绍 1. 程序编辑完成后&#xff0c;可以热插拔示教器&#xff0c;按下拔出示教器按钮 2. 模式切换旋钮&#xff0c;切换到水平状态进行模式选择&#xff1a;T1手动低速、T2手动高速、自动模式、外部自动模式&#xff0c;选择完成后&#xff0c;模式切换旋钮…

数据质量指标:如何衡量数据的准确性

数据质量是任何数据驱动运营的重要组成部分。即使对于不打算将数据集出售给其他公司的企业&#xff0c;数据的质量和准确性也会极大地影响决策效率。 不幸的是&#xff0c;没有单一指标可以确保数据质量达到标准。您必须跟踪多个指标并不断关注它们。因此&#xff0c;维护数据…

阅读摘抄(七)——The best approach to address the misuse of body ideals

adj.道德的,伦理的,环保的,(药品)凭处方出售的 n/v.误用,滥用 v.虐待,不公平对待Relying on ethical persuasion rather than law to address the misuse of body ideals may bev.相信,依赖 n.说服力 persuade v.说服,劝服,使相信,使信服 …

【案例】—— 基于OpenCV方法的指纹验证

一、案例整体介绍 下图中上面一张指纹图片与下面两张图片中的其中一个指纹是同一个指纹分别将上面的指纹图片与下面的两张图片进行匹配验证在model(模板指纹图片)与验证的两张指纹图片的2次匹配中&#xff0c;分别需要提取出模板指纹图片与验证指纹图片的特征(特征检测)&#…

【论文阅读】SRCNN

学习资料论文题目&#xff1a;Learning a Deep Convolutional Network for Image Super-Resolution&#xff08;学习深度卷积网络用于图像超分辨率&#xff09;论文地址&#xff1a;link.springer.com/content/pdf/10.1007/978-3-319-10593-2_13.pdf代码&#xff1a;作者提出的…

Vue检测获取最新资源 解决浏览器缓存问题

Vue检测获取最新资源 解决浏览器缓存问题 1、在public文件夹下创建version.json文件2、vue.config.js中&#xff0c;每次打包动态更新version.json内容3、App.vue中使用定时器去检测版本号和本地是否有差异 背景&#xff1a;由于浏览器缓存问题&#xff0c;vue2项目发布后&…

【HTML】defer 和 async 属性在 script 标签中分别有什么作用?

需要这两个属性的原因&#xff1f; 首先我们要知道的是&#xff0c;浏览器在解析 HTML 的过程中&#xff0c;遇到了 script 元素是不能继续构建 DOM 树的。 它会停止解析构建&#xff0c;首先去下载 js 代码&#xff0c;并且执行 js 的脚本&#xff1b;只有在等到 js 脚本执行…

selenium自动化测试之Junit

1. 常用的注解 将junit的索引添加到pom文件&#xff1a; <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId&…

CPU超线程技术是什么,怎么启用超线程技术

超线程技术是一种允许单个物理CPU核心模拟成两个逻辑核心的技术&#xff0c;从而提升处理器的并行性能和效率。以下是对超线程技术的详细介绍&#xff1a; 基本概念&#xff1a;超线程&#xff08;Hyper-Threading&#xff0c;HT&#xff09;是Intel公司研发的一种技术&#x…

QD1-P12 HTML常用标签:表格

本节学习 HTML常用标签&#xff1a;表格标签table ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p12 ‍ 知识点1 表格的基本结构 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>P12-表格标签</title><…

SpringBoot整合web中使用jsp

1、在pom.xml文件中导入jsp依赖的jar包&#xff0c;一个是jstl标签&#xff0c;一个是jsp的引擎 <dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version> <…

如何在RuoYi-Vue项目中去除`/dev-api`前缀

前言 在使用RuoYi-Vue框架进行Web应用开发时&#xff0c;有时会遇到API路径需要特定前缀的问题。例如&#xff0c;在某些情况下&#xff0c;开发者可能希望移除或更改默认的/dev-api前缀。 问题描述 当使用YApi直接请求后台接口时&#xff0c;无需添加/dev-api前缀。在生成和…

Java入门——变量

变量和内存紧密联系在一起&#xff0c;主要通过以下方式实现关联&#xff1a; 一、变量的定义与内存分配 变量声明&#xff1a; 当在编程语言中声明一个变量时&#xff0c;编译器或解释器会根据变量的类型在内存中为其分配一块特定大小的空间。 例如&#xff0c;在 C 语言中声明…