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

mybatis-plus超详细讲解

mybatis-plus

(简化代码神器)

地址:https://mp.baomidou.com/

目录

mybatis-plus

简介

特性

支持数据库

参与贡献

快速指南

1、创建数据库 mybatis_plus

2、导入相关的依赖

3、创建对应的文件夹

4、编写配置文件

5、编写代码

5.1、User实体类

5.2、mapper层

5.3、测试类扫描mapper层

6、测试

 7、总结

常用注解

新增数据

修改数据

删除数据

条件操作

1、QueryWrapper

1.1、eq

1.2、like

1.3、ge

1.4、lt

1.5、gt

2、查询

3、删除

4、修改

5、新增

service层条件操作

1、查询

2、删除

3、新增

4、修改

总结


简介

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

愿景

我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
支持数据库
  • mysql 、 mariaDB 、 oracle 、 db2 、 h2 、 hsql 、 DuckDB、 Derby、 Phoenix
  • 神州通用、虚谷、优炫

提示

任何能使用 MyBatis 进行增删改查,并且支持标准 SQL 的数据库应该都在 MyBatis-Plus 的支持范围内,具体支持情况如上。

如果您想要的数据库类型不在上面的列表,欢迎给我们 PR 您的数据库方言。

参与贡献

欢迎各路好汉一起来参与完善 MyBatis-Plus,我们期待你的 PR!

  • 贡献代码:代码地址 MyBatis-Plus ,欢迎提交 Issue 或者 Pull Requests
  • 维护文档:文档地址 MyBatis-Plus-Doc ,欢迎参与翻译和修订
  • 授权说明:MyBatis-Plus LOGO 官方授权沟通邮件

快速指南

我们将通过一个简单的项目来阐述 MyBatis-Plus的强大功能,在此之前,您需要先了解以下几点:

  • 拥有 Java 开发环境以及相应 IDE
  • 熟悉 Spring Boot
  • 熟悉 Maven

使用第三方组件:

1、导入对应的依赖

2、代码如何编写

步骤

1、创建数据库 mybatis_plus

现有一张 User 表,其表结构如下:

idnameageemail
1小李18admin1@baomidou.com
2小陈20admin2@baomidou.com
3小徐28admin3@baomidou.com
4小贾21admin4@baomidou.com
5小张24admin5@baomidou.com

其对应的数据库 sql 脚本如下:

CREATE DATABASE IF NOT EXISTS `mybatis_plus` USE `mybatis_plus`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` BIGINT NOT NULL COMMENT '主键ID',`name` VARCHAR(30) DEFAULT NULL COMMENT '姓名',`age` INT DEFAULT NULL COMMENT '年龄',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;INSERT  INTO `user`(`id`,`name`,`age`,`email`) VALUES 
(1,'小李',18,'admin1@baomidou.com'),
(2,'小陈',20,'admin2@baomidou.com'),
(3,'小徐',28,'admin3@baomidou.com'),
(4,'小贾',21,'admin4@baomidou.com'),
(5,'小张',24,'admin5@baomidou.com');
2、导入相关的依赖

完整的pom文件,复制粘贴即可

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.17</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>8.0.26</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

说明:我们使用mybatis-plus可以节省我们大量的代码,尽量不要同时导入mybatis和mybatis-plus!

3、创建对应的文件夹

pojo->mapper->service->controller

4、编写配置文件
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_plus?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root
#连接数据库mybatis-plus.type-aliases-package=com.example.demo.pojo
mybatis-plus.configuration.map-underscore-to-camel-case=false
mybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.configuration.auto-mapping-behavior=full
#mybatis相关的配置
5、编写代码

5.1、User实体类
package com.example.demo.pojo;import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** <p>* * </p>** @author author* @since 2024-12-15*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user")
public class User implements Serializable {private static final long serialVersionUID = 1L;/*** 主键ID*/@TableId(value = "id", type = IdType.AUTO)private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮箱*/private String email;}
5.2、mapper层
package com.example.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.pojo.User;/*** <p>*  Mapper 接口* </p>** @author author* @since 2024-12-15*/
//在对应的Mapper上继承基本的类baseMapper
public interface UserMapper extends BaseMapper<User> {//所有的CRUD已经编写完成//不需要像以前的配置一些xml}

此时编写完这两个之后就可以开始进行测试了,至于之前的mapper.xml文件现在无需进行编写

5.3、测试类扫描mapper层
package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
6、测试
package com.example.demo;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.mapper.UserMapper;
import com.example.demo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class DemoApplicationTests {@AutowiredUserMapper userMapper;@Testvoid contextLoads() {List<User> users = userMapper.selectList(null);for (User user : users) {System.out.println(user.toString());}}}

直接在测试类中编写以上代码,selectList中为null原因是需要传入一个QueryWrapper条件管理的对象

而传入一个null值表示不需要任何条件,所以是全查

此时控制台就会将所有的数据都输出

完整的代码示例请移步:Spring Boot 快速启动示例 [Spring MVC 快速启动示例]

 7、总结

通过以上几个简单的步骤,我们就实现了 User 表的查找功能,甚至连 XML 文件都不用编写!

从以上步骤中,我们可以看到集成MyBatis-Plus非常的简单,只需要引入 starter 工程,并配置 mapper 扫描路径即可。但 MyBatis-Plus 的强大远不止这些功能,想要详细了解 MyBatis-Plus 的强大功能?那就继续往下看吧!

配置日志

在application.xml文件中写入这句代码

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

常用注解

@TableName("表名")

当表名与实体类名不一致时,可以在实体类上加入@TableName()声明

@TableId声明属性为表中的主键(若属性名称不为默认id)

@TableFieId("字段") 当实体类属性与表字段不一致时,可以用来声明

@TableName("表名")
public class User{@TableIdprivate Long userId;@TableFieId("name")private String realName}  

新增数据

我们需要配置主键自增

1、实体类字段上 @TableId(type =IdType.AUTO)

/*** 主键ID*/@TableId(value = "id", type = IdType.AUTO)private Long id;

 编写一个Test测试类

 @Testpublic void insert(){User user = new User();user.setName("小明");user.setAge(18);user.setEmail("admin1@baomidou.com");userMapper.insert(user);}

 这边也是同样直接调用自带的insert方法,插入完后执行selectList方法查看是否成功

此时可以看到,确实多了一条数据,并且就是刚刚插入的数据

修改数据

@Testpublic void update(){User user = new User();user.setName("小明");user.setAge(18);user.setEmail("admin6@baomidou.com");user.setId(6L);userMapper.updateById(user);}

修改数据时需要传入一个id,而调用的方法也需要使用updateById的方法,并且是根据在实体类中设置的主键来判断的,所以说实体类的注解很关键(如果我们设置了其他的位主键,那么就会根据其他的来进行修改)

执行完毕后,使用selectList再次查询,查看是否成功修改,

数据已成功修改!!!!

删除数据

这边为我们提供了很多的删除方法,而我们用的最多的也就是第二种deleteById(单个删除)

也是非常简单,只需要添加一条代码就可以了

@Testpublic void delete(){userMapper.deleteById(6);}

里面的值也就是我们需要删除的数的id,我们现在把刚刚添加的删除

执行方法后,再次使用selectList方法查询

可以看到,已经成功删除

条件操作

上面的增删查改操作都仅仅是很普通的操作,那么现在我们对操作进行优化,可以有更加高级的操作

1、QueryWrapper

在查询中,上方展示的是全查,现在展示带条件的查询

并且以下的方法可以使用多个,表示同时带多个条件

1.1、eq

表示等于查询,在数据库中表示 “=”

@Testvoid contextLoads() {QueryWrapper<User> qw=new QueryWrapper<>();qw.eq("name","小李");List<User> users = userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}}

这段代码就可以实现查询为name的列,name列里面是小李

这样查询结果就是name小李的一行

1.2、like

在数据库中表示 “like”,也就是模糊查询

@Testvoid contextLoads() {QueryWrapper<User> qw=new QueryWrapper<>();qw.like("name","小");List<User> users = userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}}

这样就可以将name中包含 “小” 的每一行都输出

执行方法后,可以看到确实将每一条name中包含了 “小” 的都输出了

1.3、ge

gt相似,此代码表示在数据库中,age列大于等于19的都会输出

此时只输出了四条,因为有一条的age是小于19的,所以不会输出

1.4、lt

表示小于,在age这个列中小于19的都会输出

@Testvoid contextLoads() {QueryWrapper<User> qw=new QueryWrapper<>();qw.lt("age","19");List<User> users = userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}}

此时只输出了age小于19的数据

1.5、gt

表示大于,在age这个列中大于19的都会输出

@Testvoid contextLoads() {QueryWrapper<User> qw=new QueryWrapper<>();qw.gt("age","19");List<User> users = userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}}

此时只输出了age大于19的数据

方法太多这里表示不完,详细的请看官网​​​​​​

2、查询

selectList():根据qw类来当做参数,根据条件查询

selectBatchIds():可以有多个id,将多个id全查出来

selectById():单查,只能有一个id,查询一条数据

selectCount():查数量,将qw类的条件当做参数,根据条件查询,将数量查出来

selectByMap():传递一个Map集合,集合中的key是列名,value是值

selectMaps():传递一个qw类,再传递一个Map集合,将两个的条件一起结合

selectObjs():即使在查询中指定了多个字段,selectObjs 方法也只会返回查询结果中每个记录的第一个字段的值,结果以 List<Object> 的形式返回

selectOne():如果查询结果有多条数据,那么会抛出异常;如果没有数据,则返回 null

selectPage():分页查询使用,传递一个Ipage类,以及一个qw

3、删除

delete():传递一个qw类,如果qw中没有任何条件,那么就会全部删除

deleteById():传递一个id,可以是字符串,也可以是数字等,根据在实体类中的主键来进行删除

deleteBatchIds():传递多个id,同样可以是字符串或数字等,表示同时删除多条数据

deleteByMap():传递一个Map集合,key表示列,value表示值,可以同时删除多个

4、修改

update中只有两个方法,也非常的简单

update():根据qw条件进行修改

updateById():传入一个实体类,直接根据实体类的信息进行修改,修改主键所在的列

5、新增

insert只有一个方法,也是无需多说

insert():传入一个实体类,直接增加实体中的信息

service层条件操作

刚刚所有的操作都是在mapper层实现的,所以说大多部分只有一些方法,而service层有更多的方法供我们使用

1、查询

在service层中,方法也与mapper层有所不同,这里的查询方法变成了list()

但是与之前的都基本相似,这里就不多介绍了,因为都差不多

2、删除

删除方法也有所不同,从delete变成了remove,并且都与mapper层相似,所以也不过多介绍了

3、新增

新增方法从insert变成了save,并且也比之前多了很多

saveBatch():一次性增加多条数据,批量新增

saveOrUpdate():这个在项目中使用最频繁,因为他只需要一个方法,就可以实现新增或修改,实现原理也很简单,传入一个实体类,如果有id,那么就是修改,如果没有id,那么就是新增

saveOrUpdateBatch():同样,有id则修改,无id则新增,可以批量操作

4、修改

修改的方法也很多,不过大多方法一看就知道什么意思,所以只介绍部分方法

updateBatchByid():批量修改,可以传入一个集合,里面都是实体类的信息

lambdaUpdate():使用 Lambda 表达式来描述要更新的实体类对象的字段和条件,从而实现更加简洁和类型安全的更新操作

总结

那么,mybatis-plus的使用就都介绍完了,是不是非常简便呢,这也就是mybatis-plus为什么要推出的原因,就是因为sql代码太难写了,所以使用了mybatis-plus就可以极大的简化我们的开发

如果想更深入的了解mybatis-plus可以前往官网查看:MyBatis-Plus 🚀 为简化开发而生 (baomidou.com)

制作不易,有问题可联系作者,或者直接在评论声明,作者看到会第一时间解决

相关文章:

mybatis-plus超详细讲解

mybatis-plus &#xff08;简化代码神器&#xff09; 地址&#xff1a;https://mp.baomidou.com/ 目录 mybatis-plus 简介 特性 支持数据库 参与贡献 快速指南 1、创建数据库 mybatis_plus 2、导入相关的依赖 3、创建对应的文件夹 4、编写配置文件 5、编写代码 …...

【Linux】--- 进程的概念

【Linux】--- 进程的概念 一、进程概念二、PCB1.什么是PCB2.什么是task_struct&#xff08;重点&#xff01;&#xff09;3.task_struct包含内容 三、task_struct内容详解1.查看进程&#xff08;1&#xff09;通过系统目录查看&#xff08;2&#xff09;通过ps命令查看&#xf…...

Unity NTPComponent应用, 实现一个无后端高效获取网络时间的组件

无后端高效获取网络时间的组件 废话不多说&#xff0c;直接上源码m_NowSerivceTime 一个基于你发行游戏地区的时间偏移&#xff0c; 比如北京时区就是 8, 巴西就是-3&#xff0c;美国就是-5using Newtonsoft.Json; 如果这里报错&#xff0c; 就说明项目没有 NewtonsoftJson插件…...

go语言使用zlib压缩[]byte

在Go语言中&#xff0c;可以使用compress/flate和compress/zlib包来实现对[]byte数据的Zlib压缩。下面是一个简单的示例&#xff0c;展示如何使用这些包来压缩一个字节切片&#xff1a; go package main import ( "bytes" "compress/zlib" "fmt"…...

Windows 配置 Tomcat环境

Windows配置Tomcat 1. 介绍 Tomcat是一个开源的、轻量级的Java应用服务器&#xff0c;在Java Web开发领域应用广泛。以下是关于它的详细介绍&#xff1a; 一、基本概念与背景 定义&#xff1a;Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;下…...

【python从入门到精通】-- 第六战:列表和元组

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持…...

Python | 数据可视化中常见的4种标注及示例

在Python的数据可视化中&#xff0c;标注&#xff08;Annotation&#xff09;技术是一种非常有用的工具&#xff0c;它可以帮助用户更准确地解释图表中的数据和模式。在本文中&#xff0c;将带您了解使用Python实现数据可视化时应该了解的4种标注。 常见的标注方式 文本标注箭…...

LearnOpenGL学习(高级OpenGL -> 高级GLSL,几何着色器,实例化)

完整代码见&#xff1a;zaizai77/Cherno-OpenGL: OpenGL 小白学习之路 高级GLSL 内建变量 顶点着色器 gl_PointSoze : float 输出变量&#xff0c;用于控制渲染 GL_POINTS 型图元时&#xff0c;点的大小。可用于粒子系统。将其设置为 gl_Position.z 时&#xff0c;可以使点…...

Scala学习记录

dao --------> 数据访问 mode ------> 模型 service ---->业务逻辑 Main -------> UI:用户直接操作&#xff0c;调用Service 改造UI层&#xff1a;...

vue使用pdfh5.js插件,显示pdf文件白屏

pdfh5&#xff0c;展示文件白屏&#xff0c;无报错 实现效果图解决方法(降版本)排查问题过程发现问题查找问题根源1、代码写错了&#xff1f;2、预览文件流的问题&#xff1f;3、pdfh5插件更新了&#xff0c;我的依赖包没更新&#xff1f;4、真相大白 彩蛋 实现效果图 解决方法…...

docker login 出错 Error response from daemon

在自己的Linux服务器尝试登陆docker出错 输入完用户密码之后错误如下&#xff1a; 解决方案 1.打开daemo文件&#xff1a; vim/etc/docker/daemon.json 2.常用的国内Docker 镜像源地址 网易云 Docker 镜像&#xff1a;http://hub-mirror.c.163.com 百度云 Docker 镜像&#x…...

Web 身份认证 --- Session和JWT Token

Web 身份认证 --- Session和JWT Token 方法一: 通过使用Session进行身份认证方法二: 通过JWT token进行身份认证什么是JWTJWT完整流程JWT攻防JWT 如何退出登录JWT的续签 方法一: 通过使用Session进行身份认证 用户第一次请求服务器的时候&#xff0c;服务器根据用户提交的相关信…...

UE5制作倒计时功能

设置画布和文本 文本绑定 格式化时间 转到事件图表&#xff0c;计算时间&#xff0c;时间结束后面的事件可以按自己需求写 进入关卡蓝图&#xff0c;添加倒计时UI...

Linux去除注释和空行

平时查看某些配置文件的时&#xff0c;我们会发现有很多注释&#xff08;如&#xff1a;"#"开头的行&#xff09;&#xff0c;中间还有很多空行&#xff0c;看起来非常费劲&#xff0c;所以在这里总结下如何去除注释和空行的方法。 举例说明 这里选个简单点的文件&a…...

Elasticsearch 7.x入门学习-Spring Data Elasticsearch框架

1 Spring Data框架 Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持 map-reduce 框架和云计算数据服务。 Spring Data 可以极大的简化 JPA的写法&#xff0c;…...

网络层IP协议(TCP)

IP协议&#xff1a; 在了解IP协议之前&#xff0c;我们市面上看到的"路由器"其实就是工作在网络层。如下图&#xff1a; 那么网络层中的IP协议究竟是如何发送数据包的呢&#xff1f; IP报头&#xff1a; IP协议的报头是比较复杂的&#xff0c;作为程序猿只需要我们重…...

计算机视觉中的边缘检测算法

摘要&#xff1a; 本文全面深入地探讨了计算机视觉中的边缘检测算法。首先阐述了边缘检测的重要性及其在计算机视觉领域的基础地位&#xff0c;随后详细介绍了经典的边缘检测算法&#xff0c;包括基于梯度的 Sobel 算子算法、Canny 边缘检测算法等&#xff0c;深入剖析了它们的…...

js 常用扩展方法总结+应用

文章目录 js 常用扩展方法总结扩展方法应用选择大型项目 中扩展方法应用选择小型项目中 扩展应用 js 常用扩展方法总结 函数原型&#xff08;prototype&#xff09;扩展方法 介绍&#xff1a;在JavaScript中&#xff0c;通过修改函数的prototype属性可以为该函数创建的所有对象…...

数据结构---图(Graph)

图&#xff08;Graph&#xff09;是一种非常灵活且强大的数据结构&#xff0c;用于表示实体之间的复杂关系。在图结构中&#xff0c;数据由一组节点&#xff08;或称为顶点&#xff09;和连接这些节点的边组成。图可以用于表示社交网络、交通网络、网络路由等场景。 1. 基本概…...

前端解析超图的iserver xml

前端解析超图的iserver xml const res await axios.get(url)const xmlDom new DOMParser().parseFromString(res.data, text/xml);// 获取versionconst version xmlDom.getElementsByTagNameNS(*, ServiceTypeVersion)[0].textContent// 获取layerconst layerDom xmlDom.ge…...

LocalForage 使用指南:统一管理 LocalStorage、WebSQL 和 IndexedDB

前言 在前端开发中&#xff0c;客户端数据存储是一个至关重要的环节。无论是用户偏好设置、缓存内容&#xff0c;还是表单数据&#xff0c;都需要一个高效、可靠的存储方案。浏览器原生提供的 LocalStorage、SessionStorage 和 IndexedDB 等 API 虽然功能强大&#xff0c;但使…...

代码随想录算法训练营第五天-哈希-242.有效的字母异位词

这道题的总体感觉不是很难&#xff0c;但是其完成的思想还是很有趣的利用数据下标来代表字母序列然后遍历两个字符串每个字符&#xff0c;给对应字母下标的数组中一个自增&#xff0c;另一个自减通过查看最后的数组内容是不是0&#xff0c;来判断是不是异位词 #include <io…...

学习maven(maven 项目模块化,继承,聚合)

前言 本篇博客的核心&#xff1a;理解maven 项目模块化&#xff0c;继承&#xff0c;聚合 的含义 maven 项目模块化 含义 maven项目模块化&#xff1a;使用maven 构建项目&#xff0c;管理项目的方式&#xff0c;我们可以将maven项目根据内在的关系拆分成很多个小项目【模块】…...

KDD 2025预讲会:10位一作的论文分享与话题思辨|12月18日全天直播

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 圆桌思辨&#xff1a;一作们的KDD 2025投稿经验分享与热点探讨 1. KDD 2025 与往年相比有哪些新变化&#xff1f;两次投稿周期的新规则有哪些影响&#xff1f; 2. 第一篇KDD的工作是如何成功被接收的&#xff1…...

掌握特征提取:机器学习中的 PCA、t-SNE 和 LDA模型

文章目录 一、说明二、既然有 PCA 技术降维&#xff0c;为什么还要学习 t-SNE&#xff1f;2.1 t-SNE的核心思想&#xff1a;2.2 保持点之间的局部关系有什么意义&#xff1f;2.3 t-SNE 的几何直觉&#xff1a; 三、t-SNE 的数学公式&#xff1a;四、目标函数&#xff1a;五、梯…...

JAVA基础:注释

JAVA基础:注释 作用 使得代码中的一段文本不被执行,起到解释说明的作用。 分类 JAVA中的注释有三种: 单行注释 //单行注释多行注释 /* 多 行 注 释 */文档注释 /***@deprecated comments* @author lhy*/文档注释可以添加一些参数作为说明。 有趣的代码注释 卡车/* * *…...

从源码构建安装Landoop kafka-connect-ui

背景 部署Landoop kafka-connect-ui最简单的办法还是通过docker来部署&#xff0c;我们之前的kafka-connect-ui就是通过docker部署的&#xff0c;但是&#xff0c;最近发现个问题&#xff1a;当使用docker部署且防火墙使用的是firewalld的情况下&#xff0c;就会出现端口冲突。…...

【自动驾驶】Ubuntu22.04源码安装Autoware Core/Universe

【自动驾驶】Ubuntu22.04源码安装Autoware Core/Universe 官方源码安装教程前置条件安装ROS2 Humble安装Autoware Core/Universe配置开发环境配置工作空间设置控制台 官方源码安装教程 链接&#xff1a;https://autowarefoundation.github.io/autoware-documentation/main/ins…...

使用Nexus3搭建npm私有仓库

一、npm介绍 npm的全称是Node Package Manager&#xff0c;它是一个开放源代码的命令行工具&#xff0c;用于安装、更新和管理Node.js模块。npm是Node.js的官方模块管理器&#xff0c;它允许用户从一个集中的仓库中下载和安装公共的Node.js模块&#xff0c;并将这些模块集成到…...

OpenHarmony和OpenVela的技术创新以及两者对比

两款有名的国内开源操作系统&#xff0c;OpenHarmony&#xff0c;OpenVela都非常的优秀。本文对二者的创新进行一个简要的介绍和对比。 一、OpenHarmony OpenHarmony具有诸多有特点的技术突破和重要贡献&#xff0c;以下是一些主要方面&#xff1a; 架构设计创新 分层架构…...