动手开发基于Springboot的基础开发框架-01

本系列专题虽然是按教学的深度来定稿的,但在项目结构和代码组织方面是按生产系统的要求来书定的。在本章中主要介绍下基础开发框架的内容。后续所有章节的项目全是在本基础框架的基础上演进的。

工程结构介绍

在这里插入图片描述

  • SpringbootSeries:父工程,定义一个通用Maven pom,主要用于版本管理;
  • Framework:子工程组,包含两个Modules,主要是一些框架底层开发jar包;
  • Springboot:子工程组,基于Springboot的项目,主要是集成不同的开发框架,比如springboot+mybatis等;
  • Springcloud:子工程组,基于官方Springcloud的项目,主要是集成微服务组件,比如Gateway网关,ribbon负载均衡等;
  • Alibaba Springcloud:子工程组,功能同Springcloud工程组差不多,主要是用阿里巴巴发展的组件实现微服务各功能部件;

springbootSeries父工程

版本依赖说明

类别必选可选
基础框架jdk 17+
spring-boot-starter 3.2.4
spring-boot-starter-web 3.2.4
spring-cloud 2023.0.1
spring-cloud-alibaba 2023.0.1.1
数据库mybatis-plus-spring-boot3-starter 3.5.6
druid-spring-boot-starter 1.2.22
mysql-connector-java 8.0.33
工具包cn.hutool 5.8.27
org.projectlombok 1.18.30
org.mapstruct 1.5.5.Final
mapstruct-processor 1.5.5.Final
framework-commons 1.0-SNAPSHOT
日志slf4j 2.0.12
logback 1.4.14
测试spring-boot-starter-test 3.2.4
springdoc-openapi-starter-webmvc-ui 2.4.0
spring-boot-starter-actuator 3.2.4 : runtime
spring-boot-devtools 3.2.4

JDK最低版本要求17,采用20, 21等也同样适用。

Maven scope说明

scope编译测试运行打包特殊说明
compile
runtimex
testxxx
systemx不依赖maven仓库,而是本地的jar包,不具备传递性
providedxx不具备传递性
importxxxx只能在 dependencyManagement下使用,且 type 需要为 pom,解决单继承问题

Maven配置说明

在本地测试时,需要把<modules>中的子模块做适当删减。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!--指定父工程:
            1、其版本兼容情况可从:
               https://spring.io/projects/spring-cloud 或
               https://github.com/spring-cloud/spring-cloud-release/releases 上查询
            2、springboot项目也可以用官方的工具生成
                https://start.spring.io
        -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.4</version>
        <relativePath/> <!--如果子工程出现parent.relativePath问题,需要加入这么一行-->
    </parent>

    <!--此工程声明为pom形式,供其它子模块引用-->
    <groupId>com.korgs</groupId>
    <artifactId>springbootSeries</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!--子模块,一般为空,只在开发调试时建议放入一些子模块,为了便捷-->
    <modules>
        <module>springboot-base</module>

        <module>framework-commons</module>
        <module>framework-persistence</module>

        <module>springboot-web</module>
        <module>springcloud-eureka-server</module>
        <module>springcloud-eureka-client</module>
        <module>springcloud-eureka-server-with-security</module>
        <module>springcloud-ribbon-server</module>
        <module>springcloud-ribbon-client</module>
        <module>springboot-mybatisplus</module>
        <module>springcloud-consul-server</module>
        <module>springcloud-consul-client</module>
        <module>springcloud-consul-config</module>
        <module>springcloud-api-gateway</module>
        <module>springcloud-gateway-server</module>
        <module>springcloud-admin-server</module>
        <module>springcloud-admin-client</module>
        <module>alibaba-nacos-config</module>
        <module>alibaba-nacos-server</module>
        <module>alibaba-nacos-client</module>
        <module>alibaba-sentinel-server</module>
        <module>alibaba-sentinel-client</module>
        <module>springboot-openFeign-client</module>
        <module>alibaba-sentinel-openFeign-client</module>
        <module>springboot-common-config</module>
        <module>springboot-redis</module>
        <module>springboot-test</module>
        <module>springboot-kafka</module>
        <module>springboot-docker</module>
    </modules>

    <properties>
        <!--设置javaSDK版本:语言级别要一致,然后匹配下idea中的在maven编译设置
            JDK 21 = 65 JDK 17 = 61  JDK 8 = 52
         -->
        <java.version>17</java.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <spring-cloud.version>2023.0.1</spring-cloud.version>
        <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>

        <!--开发中用到的三方工具包-->
        <hutool.version>5.8.27</hutool.version>
        <lombok.version>1.18.30</lombok.version>
        <lombok.mapstruct.binding.version>0.2.0</lombok.mapstruct.binding.version>
        <mapstruct.version>1.5.5.Final</mapstruct.version>
        <framework-commons.version>1.0-SNAPSHOT</framework-commons.version>

        <!--db-mysql-->
        <mybatisplus.version>3.5.6</mybatisplus.version>
        <druid.version>1.2.22</druid.version>
        <mysql.version>8.0.33</mysql.version>

        <!--测试相关-->
        <junit.test.version>4.13.2</junit.test.version>
        <openapi.restfultest.version>2.5.0</openapi.restfultest.version>
    </properties>

    <!--公共依赖-->
    <dependencies>
        <!--springboot-main-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--springboot辅助工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--工具类,前提是必须先给IDEA安装Lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>annotationProcessor</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>

        <dependency>
            <groupId>com.korgs</groupId>
            <artifactId>framework-commons</artifactId>
            <version>${framework-commons.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>${openapi.restfultest.version}</version>
        </dependency>

    </dependencies>

    <!--可选依赖,这块的依赖不建议放太多-->
    <dependencyManagement>
        <dependencies>
            <!--springboot-main:引入spring cloud的依赖,主要用来管理Spring Cloud生态各组件的版本-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--alibaba-springboot-main:引入spring cloud的依赖,主要用来管理alibaba Spring Cloud生态各组件的版本-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--数据库相关-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
                <version>${mybatisplus.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!--工具类-->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>

            <!--测试类-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                        <!-- additional annotation processor required as of Lombok 1.18.30 -->
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok-mapstruct-binding</artifactId>
                            <version>${lombok.mapstruct.binding.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

framework子工程组

这个工程中一共包含两个子模块, framework-persistence依赖framework-commons,framework-commons也可以单独引用。

  • framework-commons:springboot框架底层功能封装;
  • framework-commons:mybatis数据库操作相关底层功能封装;

framework-commons模块

此模块主要是一些工具类
在这里插入图片描述

  • 日志相关

    • AccessLogInterceptor.java:web日志拦截器
    • InterceptorRegister.java:拦截器注册类
    • LogGenerator.java:日志工具类
  • Restful相关

    • BaseResponse.java:基础restful响应对象
    • ListResponse.java:继承BaseResponse.java,集合响应对象
    • PageResponse.java:继承ListResponse.java,分页响应对象
    • FileResponse.java:文件响应对象
    • ResponseConst.java:响应常量类
  • servlet相关

    • CorsConfig.java:跨域设置过滤器
  • 工具类

    • TranslatorUtil.java:对象转换工具类
    • UUIDUtil.java:ID生成器

工程坐标

    <groupId>com.korgs</groupId>
    <artifactId>framework-commons</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

framework-persistence模块

持久化操作相关,暂时只封装了mybatis插件内容
在这里插入图片描述

  • 底级框架封装

    • DBEntity.java:数据实体基础类
    • DBMetaObjectHandler.java:数据实体基础操作类
    • MybatisPlusConfig.java:mybatis操作配置,主要集成了分页插件
  • 分页数据对象相关

    • PageParam.java:用于Controller层的分页查询参数对象
    • PageQueryBo.java:用于Service层的分页查询参数对象
    • PageBo.java:用于Service层的分页结果
    • PageUtil.java:分页工具类

工程坐标

    <groupId>com.korgs</groupId>
    <artifactId>framework-persistence</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

springboot子工程组

springboot-base模块

此模块采用了maven独立配置,与父模块没有任何关系,只是为了说明如何简单的实现sprinboot应用。
在这里插入图片描述

Maven依赖配置

<?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 http://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.2.4</version>
        <relativePath/> <!--如果子工程出现parent.relativePath问题,需要加入这么一行-->
    </parent>

    <groupId>com.korgs</groupId>
    <artifactId>springboot-base</artifactId>
    <description>一个最基础的springboot工程框架</description>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--springboot-main-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

注意:pring-boot-maven-plugin必须配置,否则用maven -clear package打包后的jar包无法用 java -jar xxx.jar来启动,原因是不包含依赖项。

application.properties配置

采用了两个文件,一个用于个性化配置,另一个用于基础配置。

  • application.properties 个性化配置,每个项目的配置都不一样
spring.profiles.active = dev
spring.application.name=springbootBase
server.port=18080
  • application-dev.properties 基本配置,这里的配置在任何项目中基本不会变化
#springboot Server
spring.aop.auto=true
spring.aop.proxy-target-class=true

# log4j
logging.level.root=INFO
logging.level.org.springframework.web=ERROR

#restful Server
server.compression.enabled=true
server.compression.mime-types=application/json,application/octet-stream

Restful测试地址

实现一个简单的Restful测试类,返回hello world字符串。

@RestController
public class HelloWorldController {
    private static final Log log = LogFactory.getLog(HelloWorldController.class);

    @GetMapping("/helloworld")
    public String helloWorld(){
        log.info("I am busy to handle this request.");
        return "hello world";
    }
}

测试地址:http://localhost:18080/helloworld

springboot-web 模块

此模块的父模块为 springbootSeries。此模块可以做为一个模板工程,如果想开发新的工程时可以复制一份,然后修改部分配置即可,省去了从头写代码的麻烦。
在这里插入图片描述

  • OpenAPIConfig:swagger3测试框架组件,详细可参考文章最后的源码
  • SpringbootWebApplication:springboot启动类
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.korgs",  "cn.hutool.extra.spring"})
@Configuration
@EnableConfigurationProperties
@ServletComponentScan
@RestController
public class SpringbootWebApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootWebApplication.class, args);
	}

	@GetMapping("/helloworld")
	public BaseResponse helloWorld(){
		log.info(LogGenerator.trackLog()
				+ "msg="+ "I am busy to handle this request.");
		return BaseResponse.success("hello world");
	}
}

Maven依赖配置

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.korgs</groupId>
        <artifactId>springbootSeries</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>springboot-web</artifactId>
    <description>带有日志和基础组件的springbootweb工程</description>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

application.properties配置

采用了两个文件,一个用于个性化配置,另一个用于基础配置。

  • application.properties 个性化配置,每个项目的配置都不一样
spring.profiles.active = dev
spring.application.name=springbootWeb
server.port=18081

management.endpoints.web.exposure.include = *
management.endpoint.health.show-details=always
  • application-dev.properties 基本配置,这里的配置在任何项目中基本不会变化
#springboot Server
spring.aop.auto=true
spring.aop.proxy-target-class=true

# log4j
logging.config=classpath:log4j2.xml
logging.level.root=INFO
logging.level.org.springframework.web=ERROR

#restful Server
server.compression.enabled=true
server.compression.mime-types=application/json,application/octet-stream

#swagger
springdoc.api-docs.enabled=true
springdoc.api-docs.path=/api-schema

swagger-config.group = default-group
swagger-config.description= The following is a restful-api list of {} application, and you can browse or test them to determine if they are working as you expect.
swagger-config.version=V1.0
swagger-config.urlPattern=/**
swagger-config.base-package=com.korgs
swagger-config.authorization-key-name=token
swagger-config.wiki = https://korgs.blog.csdn.net/

源码运行和测试方法

源码下载

着手开发属于自己的第一个Intellij-platform plugin插件程序(三)配套源码

源码编译

因采用了父子结构,所以在运行相应模块的SpringbootApplication.java启动类之前,要先
1 . 先在springbootSeries模块(即最外层的父工程)中执行mvn install,把pom.xml缓存到本地;
2. 再依次在framework-commonsframework-persistence模块中执行mvn install。以上三个模块的执行顺序不能弄错,且只执行一次即可。
在这里插入图片描述

  1. 执行相应模块的 SpringbootApplication.java 启动类启动服务。
    在这里插入图片描述

模块测试

可以直接通过浏览器测试,但建议通过swagger进行测试。访问地址为:http://localhost:18080/swagger-ui.html,18080为spingboot应用的端口号,可以application.properties文件中查找
在这里插入图片描述

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

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

相关文章

【信息熵理论-01】最大熵的分布

文章目录 一、说明二、如何认识所谓的“熵”三、熵最大化问题3.1 设置最大化3.2 利用变分微积分 四、更广泛的影响和见解 一、说明 我觉得用最大熵来获取概率分布的方法很给力。您采用一些已知或约束&#xff0c;然后在这些条件下最大化信息熵&#xff0c;瞧&#xff01;你有一…

前端基础学习html(2)

目录 表格标签&#xff1a; 列表标签&#xff1a; 表格标签&#xff1a; <!-- 表格基本架构 --><!-- tr表示一行&#xff0c;td表示一行内单元格 --><!--th为第一行表头加粗居中显示 --><table border"1"><thead><tr><th&g…

【Linux】17. 进程间通信 --- 管道

1. 什么是进程间通信(进程间通信的目的) 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了…

sqlmodel实现唯一性校验3,检查多列同时重复

之前的方案虽然能够解决重复性问题&#xff0c;但是没有覆盖到多列同时重复的情况。 比如&#xff0c;我们可以认为用户名是可以重复的。但是用户名和年龄不能同时重复&#xff0c;那么这种情况该怎么解决呢&#xff1f; 之前的代码如下&#xff1a; from sqlalchemy import…

python直接发布到网站wordpress之三批量发布图片

在前面的文章中&#xff0c;实现了使用python操作wordpress发布文字内容和图片内容。 python直接发布到网站wordpress之一只发布文字-CSDN博客 python直接发布到网站wordpress之二发布图片-CSDN博客 不过&#xff0c;此时发布图片的数量只能是一张图片。但在实际应用中&…

效率跨越式提升的工农业对机器人专业的需求

需求 需要用人的地方一定会逐步收缩。 原来需要人的地方也会逐步被机器人取代。 机器人这个专业最强的悖论就是可以部分取代人。 此处&#xff1a;用人的地方是指“工农业”&#xff0c;包括工业和农业。 机器人工程行业算制造业吗 机器人工程终身学习和工作计划 趋势 工匠…

1077 互评成绩计算

solution 总成绩 &#xff08;老师成绩 同学去掉最高分去掉最低分的平均分&#xff09;/2&#xff0c;其中总成绩四舍五入取整 #include<iostream> #include<algorithm> using namespace std; int main(){int n, m, worst, better, sum, g, x, cnt;scanf("…

【数学建模】天然肠衣搭配问题

2011高教社杯全国大学生数学建模竞赛D题 天然肠衣&#xff08;以下简称肠衣&#xff09;制作加工是我国的一个传统产业&#xff0c;出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段&#xff08;原料&#xff09;&#xff0c;进入组装工序。传统的生产方式依靠人工…

每日OJ题_DFS解决FloodFill⑤_力扣417. 太平洋大西洋水流问题

目录 力扣417. 太平洋大西洋水流问题 解析代码 力扣417. 太平洋大西洋水流问题 417. 太平洋大西洋水流问题 难度 中等 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下…

自动控制原理MATLAB:控制系统模型构建

在MATLAB中&#xff0c;常用的系统建模方法有传递函数模型、零极点模型以及状态空间模型等。 1系统传递函数模型描述&#xff1a; 命令格式&#xff1a; systf(num,den,Ts); 其中&#xff0c;num、den为分子多项式降幂排列的系数向量,Ts表示采样时间&#xff0c;缺省时描述…

AI 数据观 | TapData Cloud + MongoDB Atlas:大模型与 RAG 技术有机结合,落地实时工单处理智能化解决方案

本篇为「AI 数据观」系列文章第二弹&#xff0c;在这里&#xff0c;我们将进一步探讨 AI 行业的数据价值。以 RAG 的智能工单应用场景为例&#xff0c;共同探索如何使用 Tapdata Cloud MongoDB Atlas 实现具备实时更新能力的向量数据库&#xff0c;为企业工单处理的智能化和自…

在小黑框如何用Python写出多行代码

平时使用python自带的小黑框编译器只能一行代码一行代码的写&#xff0c; 方法一 可以新建一个文本txt格式&#xff0c;然后打开在里面输入你想要的Python代码&#xff0c;然后把名字改成xxx.py&#xff0c;然后点击小黑框&#xff0c;输入 python 把Py文件拖过来回车就行 方…

Hive内部表、外部表

Hive内部表、外部表 1. 内部表&#xff08;Managed Table&#xff09;&#xff1a; 内部表是由Hive完全管理的表&#xff0c;包括数据和元数据。当你删除内部表时&#xff0c;Hive会同时删除表的数据和元数据。内部表的数据存储在Hive指定的默认位置&#xff08;通常是HDFS上…

VBA 创建透视表,录制宏,自动化报表

目录 一. 数据准备二. 需求三. 准备好报表模板四. 执行统计操作&#xff0c;录制宏4.1 根据数据源创建透视表4.2 填充数据到报表4.3 结束宏录制 五. 执行录制好的宏&#xff0c;自动化报表 一. 数据准备 ⏹数据源1 姓名学科成绩丁志敏语文91李平平语文81王刚语文64张伊语文50…

【前端】HTML基础(1)

文章目录 前言一、什么是前端二、HTML基础1、 HTML结构1.1 什么是HTML页面1.2 认识HTML标签1.3 HTML文件基本结构1.3 标签层次结构1.4 创建html文件1.5 快速生成代码框架 三、Emmet快捷键 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及…

新能源电燃灶:为人类社会贡献高品质的健康生活

华火新能源电燃灶&#xff0c;作为一种创新的厨房设备&#xff0c;近年来逐渐走进了千家万户&#xff0c;成为了现代家庭厨房的新宠。它不仅改变了传统的烹饪方式&#xff0c;更在环保、节能、安全等方面为人类带来了诸多贡献。本文将从多个方面探讨华火新能源电燃灶对人类的贡…

知行之桥EDI系统跨平台版本安装报错及解决方案

本文将为大家介绍如何在Windows系统中安装知行之桥EDI系统跨平台版本的常见报错以及解决方案。如下图所示&#xff1a; 在知行软件官网的导航栏中点击 下载 按钮&#xff0c;即可看到知行之桥EDI系统不同版本的下载选项&#xff0c;点击右侧跨平台版本&#xff0c;选择 Windows…

移动硬盘无法被识别怎么办?恢复移动硬盘3个正确做法

移动硬盘已成为我们日常生活和工作中不可或缺的数据存储设备。然而当移动硬盘突然无法被电脑识别时&#xff0c;往往会让人倍感焦虑。面对这种情况我们不必过于慌张&#xff0c;下面一起来看看指南解决。 解决方法一&#xff1a;检查硬件连接与供电 检查接口连接&#xff1a…

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法 问题截图&#xff1a; 亲测有效的方法 方法一&#xff1a; 选择通过uniapp的开发工具Hbuilder来进行在线打包&#xff0c;取消默认勾选的以下选项。 然后进行在线打包就不会存在提交审…

山东省文史书画研究会成立20周年系列活动徽标征集胜选名单公布

2024年5月1日&#xff0c;山东省文史书画研究会成立20周年系列活动徽标征集落下帷幕。征稿启事下发后&#xff0c;得到社会各界人士的广泛关注与参与&#xff0c;共收到设计方案608件。经过初评&#xff0c;选出5幅作品进入复评&#xff0c;并经过网络投票和专家投票相结合的方…