【SpringBoot】最基础的项目架构(SpringBoot+Mybatis-plus+lombok+knife4j+hutool)

汝之观览,吾之幸也! 从本文开始讲下项目中用到的一些框架和技术,最基本的框架使用的是SpringBoot(2.5.10)+Mybatis-plus(3.5.3.2)+lombok(1.18.28)+knife4j(3.0.3)+hutool(5.8.21),可以做到代码自动生成,满足最基本的增删查改。

一、新建SpringBoot项目

使用Idea工具直接创建项目
在这里插入图片描述

输入项目名称等
在这里插入图片描述

生成web项目
在这里插入图片描述

二、配置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.5.10</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mitool</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><mybatis-plus.version>3.5.3.2</mybatis-plus.version><freemarker.version>2.3.29</freemarker.version><lombok.version>1.18.28</lombok.version><knife4j.version>3.0.3</knife4j.version><hutool.version>5.8.21</hutool.version><pagehelper.version>1.4.7</pagehelper.version><ali.cola.version>4.3.2</ali.cola.version><org.mapstruct.version>1.4.2.Final</org.mapstruct.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-starter-test</artifactId><scope>test</scope></dependency><!-- mysql 链接--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!-- Mybatis-plus 代码生成器 依赖配置 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus.version}</version><exclusions><exclusion><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId></exclusion></exclusions></dependency><!--freemarker依赖--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>${freemarker.version}</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency><!-- knife4j --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j.version}</version></dependency><!-- hutool --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><!-- pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.version}</version></dependency><!-- 阿里cola --><dependency><groupId>com.alibaba.cola</groupId><artifactId>cola-component-dto</artifactId><version>${ali.cola.version}</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>${org.mapstruct.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version></path></annotationProcessorPaths></configuration></plugin></plugins></build></project>

三、配置application.properties

1、配置application.properties

配置application.properties文件,文件中包含数据库配置、knife4j配置

# 应用名称
spring.application.name=spring-demo
# 开发环境设置
spring.profiles.active=dev
# 应用路径
server.servlet.context-path=/springboot
# 编码字符集
server.servlet.encoding.charset=utf-8
# swagger
knife4j.enable=true
knife4j.production=false
knife4j.basic.enable=false

2、配置application-dev.properties

配置数据库,
localhost:数据库IP
db_source:数据库名称
username:用户名
password:密码

# 端口
server.port=9900
spring.datasource.url=jdbc:mysql://localhost:3306/db_source?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# SSO
zsc.open.token.check=false

四、新建代码生成工具类 CodeGeneratorUtil

package com.mitool.springboot.utils;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.InjectionConfig;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.extern.slf4j.Slf4j;import java.util.Arrays;
import java.util.Scanner;/*** <p>Title: CodeGeneratorUtil</p>* <p>Description:* 描述:mybatis-plus 自动生成代码工具类* </p>** @author Jimmy.Shen* @version v1.0.0* @since 2022-10-19 9:58*/
@Slf4j
public class CodeGeneratorUtil {/*** 表前缀*/private static final String[] PREFIX = new String[]{"illp_", "t_"};/*** 是否生成controller、service、serviceImpl、converter*/private static final boolean ONLY_UPDATE_COLUMNS = true;/*** 数据源配置*/private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig.Builder("jdbc:mysql://10.10.177.151:3309/smart_park?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true","root", "ztesoft");/*** 读取控制台内容*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);log.info("### 请输入" + tip);if (scanner.hasNext()) {String ipt = scanner.next();if (StrUtil.isNotEmpty(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}public static void main(String[] args) {String projectPath = System.getProperty("user.dir");String outputDir = projectPath + "/springboot/src/main/java/";String[] scannerArr = scanner("作者名,包名,表名").split(",");String authorName = scannerArr[0];String packageName = scannerArr[1];String tableName = scannerArr[2];// 规定代码路径,如果代码在不同项目中可进行调整String controllerName =projectPath + "/springboot/src/main/java/com/mitool/springboot/controller/" + packageName;String serviceName =projectPath + "/springboot/src/main/java/com/mitool/springboot/service/" + packageName;String serviceImplName =projectPath + "/springboot/src/main/java/com/mitool/springboot/service/" + packageName + "/impl/";String entityName =projectPath + "/springboot/src/main/java/com/mitool/springboot/entity/dataobject/" + packageName;String mapperName =projectPath + "/springboot/src/main/java/com/mitool/springboot/mapper/" + packageName;String mapperXmlName =projectPath + "/springboot/src/main/resources/mybatis-mapper/" + packageName;String voName =projectPath + "/springboot/src/main/java/com/mitool/springboot/entity/vo/" + packageName;String converterName =projectPath + "/springboot/src/main/java/com/mitool/springboot/converter/" + packageName;FastAutoGenerator.create(DATA_SOURCE_CONFIG)// 全局配置.globalConfig(builder ->//作者名builder.author(authorName)// 开启 swagger 模式	默认值:false.enableSwagger()// 禁止打开输出目录	默认值:true.disableOpenDir()// 指定输出目录.outputDir(outputDir)).packageConfig(builder -> builder.moduleName(packageName)).injectionConfig(builder -> {updateColumn(entityName, mapperName, mapperXmlName, voName, builder);if (ONLY_UPDATE_COLUMNS) {updateTemplate(controllerName, serviceName, serviceImplName, converterName, builder);}})//具体的生成文件的策略配置.strategyConfig(builder -> {builder.addInclude(tableName.split("#"))// .enableSkipView().addTablePrefix(Arrays.asList(PREFIX)).entityBuilder().enableFileOverride().enableLombok()// // controller.controllerBuilder().enableRestStyle().formatFileName("%sController").enableFileOverride()// service.serviceBuilder().superServiceClass(IService.class).formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl").enableFileOverride()//开启生成mapper.mapperBuilder().enableBaseResultMap().enableBaseColumnList().superClass(BaseMapper.class).formatMapperFileName("%sMapper").formatXmlFileName("%sXml").enableFileOverride();})//模板配置,如果你没有自定义的一些模板配置,这里直接使用默认即可。.templateConfig(config -> config.entity("/templates/entity.java"))//模板引擎配置.templateEngine(new FreemarkerTemplateEngine()).execute();// 删除生成的自带的 baomidou代码FileUtil.del(projectPath + "/springboot/src/main/java/com/baomidou");}private static void updateColumn(String entityName, String mapperName, String mapperXmlName, String voName, InjectionConfig.Builder builder) {builder.customFile(consumer -> consumer.fileName("DO.java").filePath(entityName).enableFileOverride().templatePath("/templates/entity.java.ftl"));builder.customFile(consumer -> consumer.fileName("Mapper.java").filePath(mapperName).enableFileOverride().templatePath("/templates/mapper.java.ftl"));builder.customFile(consumer -> consumer.fileName("Mapper.xml").filePath(mapperXmlName).enableFileOverride().templatePath("/templates/mapper.xml.ftl"));builder.customFile(consumer -> consumer.fileName("VO.java").filePath(voName).enableFileOverride().templatePath("/templates/vo.java.ftl"));}private static void updateTemplate(String controllerName,String serviceName, String serviceImplName,String converterName, InjectionConfig.Builder builder) {builder.customFile(consumer -> consumer.fileName("Controller.java").filePath(controllerName).enableFileOverride().templatePath("/templates/controller.java.ftl"));builder.customFile(consumer -> consumer.fileName("Service.java").filePath(serviceName).enableFileOverride().templatePath("/templates/service.java.ftl"));builder.customFile(consumer -> consumer.fileName("ServiceImpl.java").filePath(serviceImplName).enableFileOverride().templatePath("/templates/serviceImpl.java.ftl"));builder.customFile(consumer -> consumer.fileName("AppConverter.java").filePath(converterName).enableFileOverride().templatePath("/templates/converter.java.ftl"));}}

五、模板(FreemarkerTemplate)

模板文件放在resource/templates下

1、controller.java.ftl

package com.mitool.springboot.controller.${package.ModuleName};import com.mitool.springboot.utils.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import com.mitool.springboot.service.${package.ModuleName}.${table.serviceName};
import com.mitool.springboot.entity.dataobject.${package.ModuleName}.${entity}DO;
import com.mitool.springboot.entity.vo.${package.ModuleName}.${entity}VO;
import com.mitool.springboot.converter.${package.ModuleName}.${entity}AppConverter;
import com.alibaba.cola.dto.SingleResponse;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
<#if superControllerClassPackage??>import ${superControllerClassPackage};
</#if>
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* ${table.comment!} 前端控制器
* </p>
*
* @author ${author}
* @since ${date}
*/
@Slf4j
@RestController
@RequestMapping("/api/<#if controllerMappingHyphenStyle>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
@Api(value = "${table.comment!}", tags = "${table.comment!} 管理模块")
<#if superControllerClass??>public class ${table.controllerName} extends ${superControllerClass} {
<#else>
public class ${table.controllerName} {
</#if>@Resourceprivate ${table.serviceName} service;@Resourceprivate ${entity}AppConverter converter;@ApiOperation(value = "${table.comment!}分页查询", notes = "${table.comment!}分页查询")@GetMapping("/page")public SingleResponse<?> page(@RequestParam Integer pageIndex, @RequestParam Integer pageSize) {PageHelper.startPage(pageIndex, pageSize);List<${entity}DO> list = service.list();return SingleResponse.of(PageUtil.pageInfoCopy(new PageInfo<>(list), ${entity}VO.class, converter::toValueObject));}@ApiOperation(value = "${table.comment!}列表查询", notes = "${table.comment!}列表查询")@GetMapping("/list")public SingleResponse<?> list() {List<${entity}DO> list = service.list();return SingleResponse.of(converter.toValueObject(list));}@ApiOperation(value = "${table.comment!}详情", notes = "${table.comment!}详情")@GetMapping("/detail")public SingleResponse<?> detail(@RequestParam Integer id) {return SingleResponse.of(converter.toValueObject(service.getById(id)));}@ApiOperation("新增")@PostMapping("/save")public SingleResponse<?> save(@RequestBody ${entity}VO param) {${entity}DO dataObject = converter.toDataObject(param);service.save(dataObject);return SingleResponse.buildSuccess();}@ApiOperation("更新")@PostMapping("/update")public SingleResponse<?> update(@RequestBody ${entity}VO param) {${entity}DO dataObject = converter.toDataObject(param);service.updateById(dataObject);return SingleResponse.buildSuccess();}@ApiOperation("删除")@PostMapping("/remove")public SingleResponse<?> remove(@RequestBody ${entity}VO param) {service.removeById(param.getId());return SingleResponse.buildSuccess();}
}

2、converter.java.ftl

package com.mitool.springboot.converter.${package.ModuleName};import com.mitool.springboot.entity.dataobject.${package.ModuleName}.${entity}DO;
import com.mitool.springboot.entity.vo.${package.ModuleName}.${entity}VO;import org.mapstruct.Mapper;import java.util.List;/*** <p>* ${table.comment!} app 模型转换服务* </p>** @author ${author}* @since ${date}*/
@Mapper(componentModel = "spring")
public interface ${entity}AppConverter {${entity}DO toDataObject(${entity}VO ${entity?uncap_first}VO);List<${entity}DO> toDataObject(List<${entity}VO> ${entity?uncap_first}VOList);${entity}VO toValueObject(${entity}DO ${entity?uncap_first}DO);List<${entity}VO> toValueObject(List<${entity}DO> ${entity?uncap_first}DOList);
}

3、entity.java.ftl

package com.mitool.springboot.entity.dataobject.${package.ModuleName};import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.io.Serializable;
import java.time.LocalDateTime;/**
* <p>* Title:${entity}* </p>* <p>* Description:描述:${table.comment} 对象* </p>** @author ${author}* @version 1.0.0* @since ${date}
**/
@Data
@TableName("${table.name}")
public class ${entity}DO implements Serializable {private static final long serialVersionUID = 1L;
<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field>/*** ${field.comment}*/<#if field.keyFlag><#assign keyPropertyName="${field.propertyName}"/>@TableId(value = "${field.name}", type = IdType.AUTO)</#if>private ${field.propertyType} ${field.propertyName};
</#list>
<#------------  END 字段循环遍历  ---------->
}

4、mapper.java.ftl

package com.mitool.springboot.mapper.${package.ModuleName};import com.mitool.springboot.entity.dataobject.${package.ModuleName}.${entity}DO;
import ${superMapperClassPackage};
<#if mapperAnnotationClass??>import ${mapperAnnotationClass.name};
</#if>
import org.apache.ibatis.annotations.Mapper;/**
* <p>* ${table.comment!} Mapper 接口* </p>** @author ${author}* @since ${date}*/
<#if mapperAnnotationClass??>
@${mapperAnnotationClass.simpleName}
</#if>
<#if kotlin>
interface ${table.mapperName} : ${superMapperClass}<${entity}DO>
<#else>
@Mapper
public interface ${table.mapperName} extends ${superMapperClass}<${entity}DO> {}
</#if>

5、mapper.xml.ftl

<?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.mitool.springboot.mapper.${package.ModuleName}.${table.mapperName}"><#if enableCache><!-- 开启二级缓存 --><cache type="${cacheClassName}"/></#if><!-- 通用查询映射结果 --><resultMap id="BaseResultMap"type="com.mitool.springboot.entity.dataobject.${package.ModuleName}.${entity}DO"><#list table.fields as field><#if field.keyFlag><#--生成主键排在第一位--><id column="${field.name}" property="${field.propertyName}"/></#if></#list><#list table.commonFields as field><#--生成公共字段 --><result column="${field.name}" property="${field.propertyName}"/></#list><#list table.fields as field><#if !field.keyFlag><#--生成普通字段 --><result column="${field.name}" property="${field.propertyName}" />
</#if>
</#list></resultMap><#if baseColumnList><!-- 通用查询结果列 --><sql id="Base_Column_List">
<#list table.commonFields as field>${field.columnName},
</#list>${table.fieldNames}</sql></#if>
</mapper>

6、service.java.ftl

package com.mitool.springboot.service.${package.ModuleName};import ${superServiceClassPackage};
import com.mitool.springboot.entity.dataobject.${package.ModuleName}.${entity}DO;/**
* <p>* ${table.comment!} 服务类* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.serviceName} : ${superServiceClass}<${entity}DO>
<#else>
public interface ${table.serviceName} extends ${superServiceClass}<${entity}DO> {}
</#if>

7、serviceImpl.java.ftl

package com.mitool.springboot.service.${package.ModuleName}.impl;import com.mitool.springboot.mapper.${package.ModuleName}.${table.mapperName};
import com.mitool.springboot.service.${package.ModuleName}.${table.serviceName};
import com.mitool.springboot.entity.dataobject.${package.ModuleName}.${entity}DO;
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;/**
* <p>* ${table.comment!} 服务实现类* </p>
*
* @author ${author}
* @since ${date}*/
@Service
<#if kotlin>
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}DO>(), ${table.serviceName} {}
<#else>
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}DO> implements ${table.serviceName} {}
</#if>

8、vo.java.ftl

package com.mitool.springboot.entity.vo.${package.ModuleName};<#list table.importPackages as pkg><#if pkg?contains("baomidou")><#elseif pkg?contains("Serializable")><#else>
import ${pkg};</#if>
</#list>
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;/*** <p>* ${table.comment!} 请求模型* </p>** @author ${author}* @since ${date}*/
@ApiModel(value="${entity}对象", description="${table.comment!}")
@Data
public class ${entity}VO {<#-- ----------  BEGIN 字段循环遍历  ---------->
<#list table.fields as field><#if field.name != "is_delete"><#if field.keyFlag><#assign keyPropertyName="${field.propertyName}"/></#if><#if field.comment!?length gt 0>/*** ${field.comment}*/@ApiModelProperty(value = "${field.comment}")</#if>private ${field.propertyType} ${field.propertyName};</#if>
</#list>
<#------------  END 字段循环遍历  ---------->
}

六、用到的其他类 PageUtil

使用到了分页的工具类,放在utils目录下

package com.mitool.springboot.utils;import com.github.pagehelper.PageInfo;import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;/*** 分页工具类** @author Jimmy.Shen* @since 2021/11/26*/
public class PageUtil {/*** 通用pageInfo转换** @param sourcePageInfo 源数据* @param targetClass    目标类型* @param mapper         list转换方法* @param <T>            目标类型* @param <S>            源类型*/public static <T, S> PageInfo<T> pageInfoCopy(PageInfo<S> sourcePageInfo, Class<T> targetClass, Function<S, T> mapper) {PageInfo<T> respPageInfo = new PageInfo<>();respPageInfo.setPageNum(sourcePageInfo.getPageNum());respPageInfo.setPageSize(sourcePageInfo.getPageSize());respPageInfo.setSize(sourcePageInfo.getSize());respPageInfo.setStartRow(sourcePageInfo.getStartRow());respPageInfo.setEndRow(sourcePageInfo.getEndRow());respPageInfo.setPages(sourcePageInfo.getPages());respPageInfo.setPrePage(sourcePageInfo.getPrePage());respPageInfo.setNextPage(sourcePageInfo.getNextPage());respPageInfo.setIsFirstPage(sourcePageInfo.isIsFirstPage());respPageInfo.setIsLastPage(sourcePageInfo.isIsLastPage());respPageInfo.setHasPreviousPage(sourcePageInfo.isHasPreviousPage());respPageInfo.setHasNextPage(sourcePageInfo.isHasNextPage());respPageInfo.setNavigatePages(sourcePageInfo.getNavigatePages());respPageInfo.setNavigatepageNums(sourcePageInfo.getNavigatepageNums());respPageInfo.setNavigateFirstPage(sourcePageInfo.getNavigateFirstPage());respPageInfo.setNavigateLastPage(sourcePageInfo.getNavigateLastPage());respPageInfo.setTotal(sourcePageInfo.getTotal());List<T> pageList = sourcePageInfo.getList().stream().map(mapper).collect(Collectors.toList());respPageInfo.setList(pageList);return respPageInfo;}
}

七、运行 CodeGeneratorUtil main方法

输入作者、包、表名生成文件,启动项目后可生成代码
在这里插入图片描述
生成的项目架构
在这里插入图片描述
使用swagger查看
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 多进程解决客户端与服务器端通信

写一个服务器端用多进程处理并发&#xff0c;使两个以上的客户端可以同时连接服务器端得到响应。每当接受一个新的连接就fork产生一个子进程&#xff0c;让子进程去处理这个连接&#xff0c;父进程只用来接受连接。 与多线程相比的不同点&#xff1a;多线程如果其中一个线程操…

小红书笔记爬虫

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

Ubuntu入门05——磁盘管理与备份压缩

1.检查磁盘空间占用情况 2.统计目录或文件所占磁盘空间大小 3.压缩 3.1 zip、unzip和zipinfo 运行时发现上面命令不成功&#xff0c;换成&#xff1a; &#xff08;将文件lkw放入压缩文件lkw01.zip中&#xff09; sudo zip -m lkw01.zip lkw 解压文件&#xff1a; 实操&…

MySQL从入门到精通【实践篇】之使用Sharding-JDBC 分库分表详解

文章目录 0. 前言本文技术组件版本基本介绍 2. 使用和配置&#xff1a;步骤1 引入依赖步骤2 配置数据源和分片策略步骤3 核心代码MybatisPlusConfig 核心配置OrderServiceOrderServiceImplOrderInfoOrderMapperOrderControllerBaseMapper 3. 数据库分片配置在我的demo工程中大家…

高等数学刷题

研究可不可导的两大问题 1.▲x能不能->0(正负均要) 2.函数可不可以不连续&#xff0c;通常用第二个例子 隐藏条件的挖掘 关键在于分析出f(x0)0f(0)

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:

postgresql-类型转换函数

postgresql-类型转换函数 简介CAST 函数to_date函数to_timestampto_charto_number隐式类型转换 简介 类型转换函数用于将数据从一种类型转换为另一种类型。 CAST 函数 CAST ( expr AS data_type )函数用于将 expr 转换为 data_type 数据类型&#xff1b;PostgreSQL 类型转 换…

axios返回几种数据格式? 其中Blob返回时的size是什么意思?

axios返回几种数据格式? 其中Blob返回时的size是什么意思&#xff1f; 1、字符串&#xff08;String&#xff09;&#xff1a;服务器可以返回纯文本或HTML内容&#xff0c;Axios会将其作为字符串返回。 2、JSON&#xff08;JavaScript Object Notation&#xff09;&#xff…

Matlab信号处理1:模拟去除信号噪声

由于工作内容涉及信号系统、信号处理相关知识&#xff0c;本人本硕均为计算机相关专业&#xff0c;专业、研究方向均未涉及信号相关知识&#xff0c;因此需进行系统地学习。之前已将《信号与系统》快速过了一遍&#xff0c;但感觉较抽象且理解较浅显。在此系统地学习如何使用Ma…

RK3568平台开发系列讲解(音视频篇)H264 的编码结构

🚀返回专栏总目录 文章目录 一、H264 的编码结构1.1、帧类型1.2、GOP1.3、Slice沉淀、分享、成长,让自己和他人都能有所收获!😄 📢视频编码的码流结构其实就是指视频经过编码之后得到的二进制数据是怎么组织的,换句话说,就是编码后的码流我们怎么将一帧帧编码后的图像…

vue优化首屏加载时间优化-cdn引入第三方包

前言 为什么要进行首屏加载优化&#xff0c;因为随着我们静态资源和第三方包和代码增加&#xff0c;压缩之后包会越来越大 随着网络的影响&#xff0c;在我们第一输入url请求资源时候&#xff0c;网络阻塞&#xff0c;加载时间长&#xff0c;用户体验不好 仔细观察后就会发现…

肖sir__设计测试用例方法之判定表06_(黑盒测试)

设计测试用例方法之判定表 1、判定表&#xff1a;是一种表达逻辑判断的工具。 2、判定表&#xff1a;包含四部分 1&#xff09;条件桩&#xff08;condition stub&#xff09;:列出问题的 所有条件&#xff08;通常条件次序无关紧要&#xff09;。 2&#xff09;条件项&#x…

zabbix监控实战

1 zabbix监控平台部署 更改的密码为HLThlt123 创建zabbix数据库 配置zabbix server 配置zabbix前端 启动服务 访问 更改成中文 修改字体文件 2 zabbix添加监控节点 在客户端 在server端 手动添加 自动添加 03 zabbix api 自动注册 停掉自动发现 删掉server3 自动注册 3 zab…

Springboot - 13.spring-boot-starter-security集成

&#x1f440;Spring Boot Starter Security 中文文档 Spring Security中文文档 &#x1f440;Spring Boot Starter Security 运行流程 当然可以。首先&#xff0c;我们会将用户存储和认证的流程融入整个Spring Boot Starter Security的使用流程中。以下是当你使用Spring Bo…

01_TMS320F28004x系列MCU介绍和资料搜集

1. TI C2000 实时微控制器 TI公司在处理器方面的产品线有&#xff1a;基于ARM内核的微控制器/微处理器、MSP430微控制器、C2000系列实时微控制器、还有数字信号处理器&#xff08;DSP&#xff09;。 其中&#xff0c;C2000是TI公司专门针对实时控制推出的32位微控制器。TI公司…

Java复习-20-接口(1)

接口的定义及使用 如果相对外部隐藏全部的实现细节&#xff0c;就要通过接口来实现。 接口的定义 使用interface关键字来定义。由于接口描述的是一个公共的定义标准&#xff0c;所以在接口之中所有的抽象方法的访问权限都为public interface IMessage{ // 为了区分接口&…

Cyber RT学习笔记 --- 1.Cyber RT框架介绍

1.Cyber RT框架介绍 1.1 Cyber RT简介 Apollo Cyber是首个专为自动驾驶定制的高性能且开源的实时通信框架&#xff0c;于2019年与Apollo 3.5开放平台同期发布&#xff0c;它主要解决了自动驾驶系统的高并发、低延迟、高吞吐、任务调度等问题&#xff0c;同时还提供了多种通信…

Gof23设计模式之策略模式

1.概述 该模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式&#xff0c;它通过对算法进行封装&#xff0c;把使用算法的责任和算法的实现分割开来&#xff0c;…

Xilinx UltraScale架构之可配置逻辑块CLB

目录 一、概览 二、UltraScale架构 2.1 UltraScale/UltraScale特点 2.2 与7系列CLB差异 三、 CLB结构 3.1 LUT 3.2 FF 3.3 多路选择器Multiplexers 3.4 进位链Carry Chain 四、应用 4.1 分布式RAM 4.2 移位寄存器 4.3 进位链Carry Chain 五、参考资料 一、概览 二…

Linux--进程概念

1.什么是程序&#xff1f;什么是进程&#xff1f;有什么区别&#xff1f; 程序&#xff1a;是静态的概念&#xff0c;gcc xxx.c -o pro 磁盘中生成的pro文件&#xff0c;叫做程序。 进程&#xff1a;是程序的一种与运行活动&#xff0c;通俗的意思是程序跑起来了&#xff0c;系…