springboot集成mybatis-plus
一、在spring boot
中配置mybatis-plus
-
1、创建一个
spring boot
项目,注意勾选mysql
-
2、在
pom.xml
文件中添加mybatis-plus
的依赖包<?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>3.1.3</version><relativePath/> </parent><groupId>com.example</groupId><artifactId>spring_mybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>spring_mybatis</name><description>spring_mybatis</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></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><!-- mybatis-plus依赖包 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version></dependency><!-- 处理json的 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.40</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.19</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.21</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>
-
3、创建一个
beego
的数据库,并且创建一个user
的表-- ------------------------ -- 用户表 -- ------------------------ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键id',`username` varchar(50) not null COMMENT '用户名',`password` varchar(100) not null COMMENT '密码',`status` tinyint(4) DEFAULT '1' COMMENT '状态,0表示禁止,1表示正常',`created_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',`updated_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',`deleted_at` timestamp(6) NULL DEFAULT NULL COMMENT '软删除时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT = "用户表";
-
4、在
application.yml
中配置mysql
连接池及mybatis-plus
的配置server:port: 9000spring:# 数据库配置datasource:url: jdbc:mysql://localhost:3306/beego?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false&useAffectedRows=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456type: com.alibaba.druid.pool.DruidDataSource#配置mybatis-plus信息 mybatis-plus:configuration:# 开启下划线转驼峰map-underscore-to-camel-case: trueauto-mapping-behavior: fulllog-impl: org.apache.ibatis.logging.stdout.StdOutImpl# mapping的路径mapper-locations: classpath*:mapper/**/*Mapper.xmlglobal-config:db-config:#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";id-type: AUTO# 逻辑删除(软删除)logic-delete-value: NOW()logic-not-delete-value: 'NULL'
-
5、在
spring boot
的入口文件配置要扫描的mapper
路径package com.example.spring_mybatis;import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication @MapperScan(basePackages = {"com.example.spring_mybatis.mapper"}) @Slf4j public class SpringMybatisApplication {public static void main(String[] args) {SpringApplication.run(SpringMybatisApplication.class, args);log.info("服务已经启动localhost:9000");} }
-
6、简单运行项目,看看是否可以正常运行
二、对mybatis plus
一些基本的配置
-
1、统一时间格式
package com.example.spring_mybatis.config;import cn.hutool.core.date.DatePattern; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component;import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter;@Component @Slf4j public class LocalDateTimeFormatConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper = new ObjectMapper();JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));objectMapper.registerModule(javaTimeModule);return objectMapper;} }
-
2、分页器插件配置
package com.example.spring_mybatis.config;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** mybatis-plus分页插件*/ @Configuration public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;} }
-
3、元数据配置,比如创建时间、更新时间、获取当前更新人等数据
package com.example.spring_mybatis.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.example.spring_mybatis.model.BaseEntity; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.time.LocalDateTime; import java.util.Date; import java.util.Objects;/*** mybatis-plus元数据插件配置(更新时间,不在数据库层面做)*/ @Component @Slf4j public class MyMetaObjectHandler implements MetaObjectHandler {/*** 插入时自动填充** @param metaObject*/@Overridepublic void insertFill(MetaObject metaObject) {if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();// 创建时间和更新时间if (Objects.isNull(baseEntity.getCreatedAt())) {baseEntity.setCreatedAt(LocalDateTime.now());}if (Objects.isNull(baseEntity.getUpdatedAt())) {baseEntity.setUpdatedAt(LocalDateTime.now());}}}/*** 更新时自动填充** @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();baseEntity.setUpdatedAt(LocalDateTime.now());}} }
三、手动搭建控制器、服务层、实体类
- 1、最终项目目录结构如下
-
2、手动创建实体类去继承
BaseEntity
类,在BaseEntity
类中书写一些基础字段package com.example.spring_mybatis.model;import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data;import java.time.LocalDateTime;@Data public class BaseEntity {@TableId(value = "id", type = IdType.AUTO)private String id;@TableField(fill = FieldFill.INSERT)@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createdAt;@TableField(fill = FieldFill.INSERT_UPDATE)@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updatedAt;@TableLogic@JsonIgnoreprivate LocalDateTime deletedAt; }
package com.example.spring_mybatis.model;import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors;import java.time.LocalDateTime; import java.util.Date;@Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("user") public class UserEntity extends BaseEntity{/*** 用户名*/private String username;/*** 密码*/private String password;/*** 状态:0是禁止,1是正常*/private Integer status;}
-
3、控制器内容书写
package com.example.spring_mybatis.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.example.spring_mybatis.dto.UserDTO; import com.example.spring_mybatis.model.UserEntity; import com.example.spring_mybatis.service.IUserService; import com.example.spring_mybatis.utils.R; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;@RestController @RequestMapping("/api/user") @Slf4j public class UserController {@Autowiredprivate IUserService iUserService;@PostMapping("")public R<String> createUser(@RequestBody UserDTO userDto) {log.info("进入创建用户的控制器");return this.iUserService.createUser(userDto);}@GetMapping()public R<List<UserEntity>> getUser() {List<UserEntity> list = this.iUserService.list();return R.success(list);}@DeleteMapping("/{id}")public R<String> deleteUserById(@PathVariable Long id){System.out.println("接收到参数:"+id);LambdaQueryWrapper<UserEntity> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserEntity::getId,id);boolean affected = iUserService.remove(queryWrapper);if (affected) {return R.success("删除成功");} else {return R.error("删除失败");}} }
-
4、服务层接口
package com.example.spring_mybatis.service;import com.baomidou.mybatisplus.extension.service.IService; import com.example.spring_mybatis.dto.UserDTO; import com.example.spring_mybatis.model.UserEntity; import com.example.spring_mybatis.utils.R;public interface IUserService extends IService<UserEntity> {R<String> createUser(UserDTO userDto); }
-
5、服务层
package com.example.spring_mybatis.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.spring_mybatis.dto.UserDTO; import com.example.spring_mybatis.mapper.UserMapper; import com.example.spring_mybatis.model.UserEntity; import com.example.spring_mybatis.service.IUserService; import com.example.spring_mybatis.utils.R; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;@Service public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements IUserService {@Autowiredprivate UserMapper userMapper;@Overridepublic R<String> createUser(UserDTO userDto) {UserEntity userEntity = new UserEntity();BeanUtils.copyProperties(userDto, userEntity);int insert = this.userMapper.insert(userEntity);if (insert == 1) {return R.success("创建成功");} else {return R.error("创建失败");}} }
-
6、
mapper
层的书写package com.example.spring_mybatis.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.spring_mybatis.model.UserEntity; import org.springframework.stereotype.Repository;@Repository public interface UserMapper extends BaseMapper<UserEntity> { }
-
7、
UserMapper.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="com.example.spring_mybatis.mapper.UserMapper"><!-- 基础配置 --><resultMap id="BaseResultMap" type="com.example.spring_mybatis.model.UserEntity"><result column="id" property="id"/><result column="created_at" property="createdAt"/><result column="updated_at" property="updatedAt"/><result column="deleted_at" property="deletedAt"/><result column="username" property="username"/><result column="password" property="password"/><result column="status" property="status"/></resultMap> </mapper>
-
8、运行代码,使用
postman
调试是否可以创建成功
四、模板生成器的使用
-
1、官方地址
-
2、使用上面的方式要一个一个文件夹去创建比较费力,下面讲解模板生成器的使用
-
3、安装依赖包
<!-- mybatis-plus代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3.1</version> </dependency> <!-- 代码生成器的模板 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
-
4、创建一个
CodeGenerator
的文件package com.example.spring_mybatis;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.builder.CustomFile; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import com.example.spring_mybatis.model.BaseEntity;import java.text.MessageFormat; import java.util.*;public class CodeGenerator {private final static String DB_USERNAME = "root";private final static String DB_HOST = "localhost";private final static String DB_PORT = "3306";private final static String DB_PASSWORD = "123456";private final static String DB_DATABASE = "beego";private final static String PROJECT_PATH = "com/example/spring_mybatis"; // private final static String PROJECT_PATH = System.getProperty("user.dir");public static void main(String[] args) {System.out.println(System.getProperty("user.dir"));// 数据源配置FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(MessageFormat.format("jdbc:mysql://{0}:{1}/{2}?serverTimezone=GMT%2B8", DB_HOST, DB_PORT, DB_DATABASE), DB_USERNAME, DB_PASSWORD)// 1.全局配置.globalConfig(builder -> {builder.author("水痕") // 设置作者 // .enableSwagger() // 开启 swagger 模式 默认值:false.disableOpenDir() // 禁止打开输出目录 默认值:true.commentDate("yyyy-MM-dd HH:mm:ss") // 注释日期.fileOverride() // 覆盖之前的文件.dateType(DateType.ONLY_DATE) //定义生成的实体类中日期类型 DateType.ONLY_DATE 默认值: DateType.TIME_PACK.outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录})// 2.包配置.packageConfig(builder -> {builder.parent(PROJECT_PATH.replace("/", ".")) // 父包模块名.pathInfo(getPathInfo()).controller("controller") //Controller 包名 默认值:controller.entity("model") //Entity 包名 默认值:entity.service("service") //Service 包名 默认值:service.mapper("mapper") //Mapper 包名 默认值:mapper// .other("model")//.moduleName("xxx") // 设置父包模块名 默认值:无.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper")); // 设置mapperXml生成路径//默认存放在mapper的xml下}) // .injectionConfig(consumer -> { // // Map<String, String> customFile = new HashMap<>(); // // DTO 下面的key会作为类名后缀,进而生成新类 customFile.put("DTO.java", "templates/other/dto.java.vm"); customFile.put("VO.java", "templates/other/vo.java.vm"); consumer.customFile(customFile); // String basePath = System.getProperty("user.dir"); // List<CustomFile> customFiles = new ArrayList<>(); // customFiles.add(new CustomFile.Builder().fileName("DTO.java") // .templatePath("templates/other/dto.java.vm") // .filePath(basePath+"/src/main/java/"+PROJECT_PATH+"/dto").build()); // customFiles.add(new CustomFile.Builder().fileName("VO.java") // .templatePath("templates/other/vo.java.vm") // .filePath(basePath+"/src/main/java/"+PROJECT_PATH+"/vo").build()); // consumer.customFile(customFiles); // // })// 策略配置.strategyConfig(builder -> {builder.addInclude(scanner("表名,多个英文逗号分割").split(","))//service策略配置.serviceBuilder().formatServiceFileName("I%sService").formatServiceImplFileName("%sServiceImpl")// 实体类策略配置.entityBuilder().formatFileName("%sEntity") // .idType(IdType.ASSIGN_ID)//主键策略 雪花算法自动生成的id // .addTableFills(new Column("created_at", FieldFill.INSERT)) // 自动填充配置 // .addTableFills(new Property("updated_at", FieldFill.INSERT_UPDATE)).enableLombok() //开启lombok // .logicDeleteColumnName("deleted_at")// 说明逻辑删除是哪个字段 // .formatFileName("%sEntity").superClass(BaseEntity.class).addSuperEntityColumns("id", "created_at", "updated_at", "deleted_at") // 公共字段不需要抽取.enableTableFieldAnnotation()// 属性加上注解说明// 关于控制器的.controllerBuilder() //controller 策略配置.formatFileName("%sController").enableRestStyle() // 开启RestController注解// 关于mapper的.mapperBuilder()// mapper策略配置.formatMapperFileName("%sMapper") // .enableMapperAnnotation()//@mapper注解开启.formatXmlFileName("%sMapper");}).templateEngine(new FreemarkerTemplateEngine());// 使用Freemarker引擎模板,默认的是Velocity引擎模板 //fastAutoGenerator.execute();System.out.println("生成模板成功");}private static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输入" + tip + ":");System.out.println(help);if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotEmpty(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}/*** 配置生成路径** @return*/private static Map<OutputFile, String> getPathInfo() {Map<OutputFile, String> pathInfo = new HashMap<>();String path = "/src/main/java/" + PROJECT_PATH;pathInfo.put(OutputFile.entity, System.getProperty("user.dir") + path + "/model");pathInfo.put(OutputFile.mapper, System.getProperty("user.dir") + path + "/mapper");pathInfo.put(OutputFile.service, System.getProperty("user.dir") + path + "/service");pathInfo.put(OutputFile.serviceImpl, System.getProperty("user.dir") + path + "/service/impl");pathInfo.put(OutputFile.controller, System.getProperty("user.dir") + path + "/controller");pathInfo.put(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper");return pathInfo;} }
-
5、运行文件输入表名,一件生成上面的代码文件
五、自定义模板来实现简单的增删改查操作
-
1、导入依赖包
<!-- 数据校验 --> <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId> </dependency> <!-- mybatis-plus代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3.1</version> </dependency> <!-- 自动生成模板需要 --> <dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version> </dependency> <!-- 代码生成器的模板 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
-
2、直接参考代码,代码见
相关文章:

springboot集成mybatis-plus
一、在spring boot中配置mybatis-plus 1、创建一个spring boot项目,注意勾选mysql 2、在pom.xml文件中添加mybatis-plus的依赖包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&qu…...
再想一想GPT
一 前言 花了大概两天时间看完《这就是ChatGPT》,触动还是挺大的,让我静下来,认真地想一想,是否真正理解了ChatGPT,又能给我们以什么样的启发。 二 思考 在工作和生活中,使用ChatGPT或文心一言,…...

Blazor前后端框架Known-V1.2.15
V1.2.15 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazo…...

Tomcat 的部署和优化
目录 1、什么是Tomcat 1.1、静态页面的选择 2、Tomcat是怎么运行的 3、安装jdk & 部署jdk环境 & Tomcat 安装 1、安装jdk 2、配置jdk环境变量 3、tomcat安装 4、Tomcat启动 5.优化tomcat启动速度 6.Tomcat的主要命令 7.Tomcat 配置虚拟主机 8.Tomca…...

后端中间件安装与启动(Redis、Nginx、Nacos、Kafka)
后端中间件安装与启动 RedisNginxNacosKafka Redis 1.打开cmd终端,进入redis文件目录 2.输入redis-server.exe redis.windows.conf即可启动,不能关闭cmd窗口 (端口配置方式:redis目录下的redis.windows.conf配置文件,…...

【电子元件】常用电子元器件的识别之电阻器
目录 前言1. 电阻器的识别1.1 普通电阻器的识别1. 普通电阻器的识别色环电阻器绕线电阻器水泥电阻器贴片电阻器网络电阻器(排阻)保险电阻器精密电阻器2. 电阻器的符号3. 普通电阻器的主要参数标称阻值和允许误差额定功率最高工作电压温度系数1.2 电位器的识别1. 电位器的识别…...

指针和数组笔试题讲解(2)
🐵本篇文章将会对上篇一维数组笔试题的剩余部分和二维数组的笔试题进行讲解 一、一维数组 1>试题部分(一)✏️ char* p "abcdef";printf("%zd\n", sizeof(p)); printf("%zd\n", sizeof(p 1)); printf("%zd\n", sizeo…...

MapReduce YARN 的部署
1、部署说明 Hadoop HDFS分布式文件系统,我们会启动: NameNode进程作为管理节点DataNode进程作为工作节点SecondaryNamenode作为辅助 同理,Hadoop YARN分布式资源调度,会启动:ResourceManager进程作为管理节点NodeM…...
vue 引入zTree
下载js包解压后找个地方放文件夹内 引入 import "/common/zTree/js/jquery-1.4.4.min" import "/common/zTree/js/jquery.ztree.core.min.js" import "/common/zTree/js/jquery.ztree.excheck.min.js" import "/common/zTree/css/metroSt…...

链队列的基本操作(带头结点,不带头结点)
结构体 typedef struct linknode{int data;struct linknode* next;后继指针 }linknode; typedef struct {linknode* front, * rear;//队头队尾指针 }linkquene; 初始化队列(带头结点) int initquene(linkquene* q)//初始化队列 {q->front q->r…...

深入学习 Redis Cluster - 基于 Docker、DockerCompose 搭建 Redis 集群,处理故障、扩容方案
目录 一、基于 Docker、DockerCompose 搭建 Redis 集群 1.1、前言 1.2、编写 shell 脚本 1.3、执行 shell 脚本,创建集群配置文件 1.4、编写 docker-compose.yml 文件 1.5、启动容器 1.6、构建集群 1.7、使用集群 1.8、如果集群中,有节点挂了&am…...
C现代方法(第3、4章)笔记
文章目录 C现代方法笔记(chapter3&4)第3章 格式化输入/输出3.1 printf函数3.1.1 转换说明3.1.2 转义序列 3.2 scanf函数3.2.1 scanf函数的工作方法3.2.2 格式串中的普通字符3.2.3 易混淆的printf函数和scanf函数 问与答编程题 第4章 表达式4.1 算术运…...

R语言绘制染色体变异位置分布图,RIdeogram包
变异位点染色体分布图 今天分享的内容是通过RIdeogram包绘制染色体位点分布图,并介绍一种展示差异位点的方法。 在遗传学研究中,通过测序等方式获得了基因组上某些位置的基因型信息。 如下表,第一列是变异位点的ID,第二列是染色体…...
Vue知识系列(7)每天10个小知识点
目录 系列文章目录Vue知识系列(1)每天10个小知识点Vue知识系列(2)每天10个小知识点Vue知识系列(3)每天10个小知识点Vue知识系列(4)每天10个小知识点Vue知识系列(5&#x…...

5分钟就能实现的API监控,有什么理由不做呢?
API深度影响着你的应用 今天的数字应用世界其实是一个以API为中心的世界,我们只是没有意识到这些API的重要性。比如在电子商务交易、社交媒体等对交互高度依赖的领域,可以说API决定了应用的质量一点也不为过。 以京东为例,用户的每一次操作背…...

Jmeter引入外部jar包以满足加密数据的Post请求
目录 一、把项目打成jar包 1、创建一个Maven项目,并保证可以正常运行。 2、把工具类放置项目中,确保无报错且能够正常使用。 3、打包 4、验证 jar包是否有效 5、你想打多个工具类的包 二、在jmeter中使用 1、把jar包放到jmeter仓库下,…...

了解冒泡排序
package com.mypackage.array;import java.util.Arrays;public class Demo07 {public static void main(String[] args) {int[] a {3,2,6,7,4,5,6,34,56,7};int[] sort1 sort1(a); //调用我们自己写的排序方法后,返回一个排序后的数组System.out.println(Array…...

群辉 Synology NAS Docker 安装 RustDesk-server 自建服务器只要一个容器
from https://blog.zhjh.top/archives/M8nBI5tjcxQe31DhiXqxy 简介 之前按照网上的教程,rustdesk-server 需要安装两个容器,最近想升级下版本,发现有一个新镜像 rustdesk-server-s6 可以只安装一个容器。 The S6-overlay acts as a supervi…...

为什么要有override
多态一定会成功吗 因为逻辑是用户编写的,那么肯定会有遗漏的地方,那就要规则来限制。就比如多态,都知道条件之一是子类重写了父类的虚函数,但是如果子类没有严格遵守这个规则,就无法达到目的。就比如这个代码…...

Linux界的老古董
Slackware 是由 Patrick Volkerding 制作的 Linux 发行版,从 1993 年发布至今也一直在 Patrick 带领下进行维护。7 月 17 日,Slackware 才刚刚过完它 24 岁的生日,看似年纪轻轻的它,已然是 Linux 最古老的发行版。 Slackware 的发…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...