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

使用Spring Boot快速搭建项目:减少配置,提升开发效率

使用Spring Boot快速搭建项目:减少配置,提升开发效率

  • 一、Spring Boot简介
    • 1 Spring Boot的起源
    • 2 Spring Boot的核心特点
    • 3 Spring Boot的优势
  • 二、Spring Boot快速搭建项目
    • 1 Spring Boot的项目搭建方式
      • 使用Spring Initializr创建项目
      • 使用Spring Boot CLI创建项目
      • 使用Spring Boot CLI和Groovy DSL创建项目
    • 2 Spring Boot项目结构介绍
      • 应用主类及配置文件
      • 控制器层
      • 服务层
      • 数据层
    • Spring Boot的自动配置原理
      • Spring Boot的自动配置特点
      • Spring Boot自动配置的加载顺序
  • 三、Spring Boot开发中的常用技术
    • 1 Spring Boot的MVC架构
      • 1.1 Spring Boot MVC的基本概念
      • 1.2 Spring Boot MVC开发注意事项
    • 2 Spring Boot整合MyBatis框架
      • 2.1 Spring Boot整合MyBatis的配置方法
      • 2.2 MyBatis的基本CRUD操作
    • 3 Spring Boot整合Spring Security框架
      • 3.1 Spring Security的安全认证机制
      • 3.2 Spring Security的常用配置方法
  • 四、Spring Boot项目的部署与打包
    • 1 Spring Boot项目的打包方式
      • 1.1 jar包的打包方式
      • 1.2 war包的打包方式
    • 2 Spring Boot项目的部署方法
      • 2.1 传统方式的部署
      • 2.2 Docker容器的部署方式
  • 五、小结回顾
      • 1 Spring Boot的发展趋势
      • 2 Spring Boot的优缺点评价

一、Spring Boot简介

Spring Boot是一个基于Spring Framework的子项目,旨在简化Spring应用程序的初始化过程、开发过程和部署过程,并提供快速、敏捷的开发环境。Spring Boot从以下三个方面提高开发效率:

1 Spring Boot的起源

Spring Boot的推出旨在简化Spring应用程序的开发、部署及运行。它采用约定大于配置的理念默认提供了若干项目常用依赖和自动化配置,使开发者可以更简单地入门Spring以及用更少的时间和精力搭建Spring项目。

2 Spring Boot的核心特点

  • 简化配置:Spring Boot采用“约定优于配置”的设计思想。
  • 自动装配:Spring Boot能够根据项目的依赖信息自动配置Spring应用程序,并提供了很多功能。
  • 无代码生成:Spring Boot无需任何代码生成,通过简单的配置即可生成可运行的Spring应用程序。
  • 微服务:Spring Boot非常适合于构建微服务应用程序。
  • 集成测试:Spring Boot支持快速集成测试,方便开发人员进行单元测试和集成测试。

3 Spring Boot的优势

  • 快速启动:Spring Boot应用程序具有非常快的启动速度,同时也可以减少大量的开发时间和成本。
  • 容易部署:Spring Boot应用程序可以打成jar包或者war包进行部署。
  • 易于维护:Spring Boot应用程序采用配置文件的方式,易于维护。
  • 开箱即用:Spring Boot提供了很多内置了许多日常开发中的功能,在很多情况下不再需要额外添加第三方依赖和插件。
  • 生态系统丰富:Spring Boot生态系统非常丰富,提供了许多优秀的开源项目,如Spring Cloud、Spring Data等。

二、Spring Boot快速搭建项目

Spring Boot提供了多种项目搭建方式,在大多数情况下使用Spring Initializr创建项目是最受欢迎的。

1 Spring Boot的项目搭建方式

使用Spring Initializr创建项目

使用Spring Initializr能够简单地快速创建一个适用于Spring Boot的新项目。Spring Initializr不仅提供了Web界面和命令行工具两种方式,还提供了众多可选的配置选项。

使用Spring Boot CLI创建项目

Spring Boot CLI是一个命令行工具,可以通过命令行创建和运行Spring Boot应用程序。对于熟悉命令行且不希望通过Web界面来创建项目的开发人员,Spring Boot CLI是一个不错的选择。

使用Spring Boot CLI和Groovy DSL创建项目

Groovy DSL是一种基于Groovy语言的DSL,可以用来创建和运行Spring Boot应用程序,其极大地改进了开发人员的开发效率。

2 Spring Boot项目结构介绍

按照Spring Boot的推荐结构,主要可分为应用主类及配置文件、控制器层、服务层和数据层四个部分。

应用主类及配置文件

应用主类是Spring Boot应用程序的入口点,通过配置文件来指定数据库连接、端口等信息。

配置文件分为application.properties和application.yml格式两种,末尾的文件格式为用于表示yaml文件格式中的列表的大括号或方括号是不支持的。

控制器层

控制器层负责接收HTTP请求、处理HTTP响应,并调用服务层、数据层等进行处理。使用@RestController注解让Spring Boot应用程序变成一个完全的Web服务。

服务层

服务层负责业务处理,并调用数据层的相关方法进行数据操作。一般使用@Service注解标注服务类。

数据层

数据层负责数据的存储和读取,可以使用Spring Data JPA等框架进行数据操作。

Spring Boot的自动配置原理

Spring Boot的自动化配置能够在保持Spring开发人员认知度的同时,通过依赖分析和智能基础设施风格来自动配置Spring应用程序。Spring Boot本身不依赖于代码生成和复杂配置方式。

Spring Boot的自动配置特点

Spring Boot的自动配置以约定大于配置为核心原则,特点在于:

  • 有限的开销:只有启用的自动化配置会自动配置应用程序。
  • 安全原则:Spring Boot不会在不明确配置时自动启用基础设施。
  • 可伸缩性:应用程序可以从自动配置中获益,也可以禁用对他们没有用处的配置。

Spring Boot自动配置的加载顺序

当@EnableAutoConfiguration注解启用自动配置时,Spring Boot会按照一定的规则依次加载自动配置项,直到完全加载完成。自动配置加载顺序如下:

  1. spring-boot-autoconfigure.jar/META-INF/spring.factories的EnableAutoConfiguration。
  2. 当前应用程序的classpath根据条件自动配置的来自META-INF/spring.factories的bean定义。

三、Spring Boot开发中的常用技术

1 Spring Boot的MVC架构

1.1 Spring Boot MVC的基本概念

在Spring Boot应用程序的开发和设计中常用到各种技术和框架,其中Spring Boot的MVC架构是一种常见的开发方式。该架构提供了一个模型-视图-控制器(MVC)的体系结构,简化了Web应用程序的开发过程。

在整个架构中可以将应用程序分成三个部分:

  • 模型(Model):负责数据的存储和传递,并提供数据操作的方法。
  • 视图(View):用于展示数据,通常是一个HTML页面。
  • 控制器(Controller):接收用户请求并进行相应的操作。

在Spring Boot MVC中常使用@Controller注解标注控制器类,使用@RequestMapping注解标注控制器类中的方法,指定响应请求的URL地址。在方法中可以使用@RequestParam@PathVariable注解获取请求参数或路径参数。

代码示例:

@Controller
@RequestMapping("/users")
public class UserController {@GetMapping("/{userId}")public String getUserInfo(@PathVariable Long userId, Model model) {// 根据userId从数据库中获取User对象信息User user = userService.getUserById(userId);// 将查询到的User对象信息添加到Model中model.addAttribute("userInfo", user);// 返回名为"userInfo.html"的视图页面return "userInfo.html";}@PostMapping("/{userId}/update")public String updateUser(@PathVariable Long userId, @RequestParam("userName") String userName,@RequestParam("userAge") int userAge) {// 根据userId更新数据库中对应User对象的userName和userAgeuserService.updateUser(userId, userName, userAge);// 重定向到/users/{userId}接口进行查询return "redirect:/users/{userId}";}
}

1.2 Spring Boot MVC开发注意事项

  • 在编写@Controller时要注意每个方法的返回类型为String类型,并通过返回值指定要返回的视图名称或指定重定向或转发的地址。
  • 在开发应用程序时,建议将JSP视图文件放置在/resources/templates目录下,并将所有静态文件(如css、js和图片等)放置在/resources/static目录下。
  • 当遇到复杂的数据操作逻辑时,可以使用Service层,对具体业务逻辑进行封装,降低控制器的负担。
  • 在开发应用程序时,应充分利用Spring Boot的自动化配置功能,简化配置工作。

2 Spring Boot整合MyBatis框架

MyBatis是一款Java持久层框架通过XML或注解方式将对象映射到数据库表中。Spring Boot提供了非常方便的方式来集成MyBatis框架,使得开发人员能够更加高效、便捷地进行数据操作。

2.1 Spring Boot整合MyBatis的配置方法

在进行Spring Boot整合MyBatis框架的配置时可以按照以下步骤进行:

  • 确保已经配置好MyBatis和MyBatis-Spring等相关依赖。
  • 确认pom.xml文件中已经添加了数据库驱动相关依赖。
  • 在application.properties文件中配置数据源相关信息。
  • 创建MyBatis的映射文件或使用注解方式进行数据操作。

application.properties中的数据源配置:

# 数据库驱动配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库连接信息配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456

2.2 MyBatis的基本CRUD操作

通过MyBatis框架进行数据操作需要编写映射文件或注解,并使用SqlSession接口的方法执行SQL语句。MyBatis的基本CRUD操作如下:

  • 查询数据操作:使用select查询语句,可以通过注解方式或XML方式进行实现。
  • 插入数据操作:使用insert插入语句,可以通过注解方式或XML方式进行实现。
  • 更新数据操作:使用update更新语句,可以通过注解方式或XML方式进行实现。
  • 删除数据操作:使用delete删除语句,可以通过注解方式或XML方式进行实现。

MyBatis的基本CRUD操作:

<!-- 数据库表中的数据对象映射配置文件 -->
<!-- 查询操作(通过user_id查询对应的User对象信息) -->
<select id="getUserById" parameterType="long" resultMap="userResultMap">select * from t_user where user_id = #{userId}
</select>
<!-- 插入操作(插入一条新的User对象信息) -->
<insert id="insertUser" parameterType="User">insert into t_user(user_id,user_name,user_age) values(#{userId},#{userName},#{userAge})
</insert>
<!-- 更新操作(根据user_id更新对应的User对象信息) -->
<update id="updateUserById" parameterType="User">update t_user set user_name = #{userName}, user_age = #{userAge} where user_id = #{userId}
</update>
<!-- 删除操作(根据user_id删除对应的User对象信息) -->
<delete id="deleteUserById" parameterType="long">delete from t_user where user_id = #{userId}
</delete>

3 Spring Boot整合Spring Security框架

Spring Security是一款基于Spring Framework的安全框架能够为应用程序提供身份验证和访问控制等安全功能。Spring Boot提供了非常方便的方式来集成Spring Security框架,使得开发人员能够更加高效、便捷地开发安全应用程序。

3.1 Spring Security的安全认证机制

Spring Security的安全认证机制包括自定义用户和密码的认证方式,支持基于内存、LDAP、JDBC等多种用户信息认证方式。在Spring Boot应用程序中,可以通过注解方式配置安全认证信息。

Spring Security的安全认证配置:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate AuthUserDetailServiceImpl authUserDetailService;@Autowiredprivate AuthAccessDeniedHandler accessDeniedHandler;@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/", "/index").permitAll()  // 设置首页和登录页允许匿名访问.antMatchers("/admin/**").hasRole("ADMIN")  // 设置/admin下的URL需要ADMIN角色才可以访问.anyRequest().authenticated()  // 其他URL都需要身份认证.and().formLogin().loginPage("/login") // 设置登录页面.defaultSuccessUrl("/index") // 登录成功后默认跳转的页面.failureUrl("/login?error").permitAll().and().logout().permitAll().and().exceptionHandling().accessDeniedHandler(accessDeniedHandler); // 设置异常处理器http.csrf().disable(); // 关闭csrf保护}@Overridepublic void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(authUserDetailService).passwordEncoder(new BCryptPasswordEncoder());}
}

3.2 Spring Security的常用配置方法

Spring Security的常用配置方法主要包括以下几个方面:

  • 配置基于内存的用户信息认证方式。
  • 配置基于文件的用户信息认证方式。
  • 配置基于数据库的用户信息认证方式。
  • 配置基于角色的访问控制。
  • 配置HTTPS访问方式。

基于内存的用户信息认证方式:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password("{noop}password").roles("USER").and().withUser("admin").password("{noop}password").roles("USER", "ADMIN");}
}

四、Spring Boot项目的部署与打包

1 Spring Boot项目的打包方式

1.1 jar包的打包方式

在使用Spring Boot开发应用程序时常用的打包方式是打成可执行的jar包,并通过命令行或脚本的方式启动应用程序。可以通过以下命令进行打包:

mvn clean package

在target目录下会生成一个以应用程序名称和版本号命名的jar包。同时在pom.xml文件中需要添加插件,并指定打包类型为jar。

pom.xml文件中进行jar包打包方式的配置:

<!-- 打包方式为jar -->
<packaging>jar</packaging><!-- jar包打包插件的配置 -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

1.2 war包的打包方式

若需要将Spring Boot应用程序部署到Web容器中,可以将应用程序打包成war包。可以通过以下命令进行打包:

mvn clean package -Dmaven.test.skip=true

在target目录下会生成一个以应用程序名称和版本号命名的war包。同时,在pom.xml文件中需要添加插件,并指定打包类型为war。

pom.xml文件中进行war包打包方式的配置:

<!-- 打包方式为war -->
<packaging>war</packaging><!-- war包打包插件的配置 -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>

2 Spring Boot项目的部署方法

2.1 传统方式的部署

在传统方式下将应用程序部署到Web容器中,可以使用Tomcat、Jetty等各种Web容器。具体的部署步骤如下:

  1. 将war包复制到Web容器中的WebApps目录下。
  2. 启动Web容器,在控制台中查看应用程序启动状态。
  3. 通过浏览器访问Web容器提供的URL地址,即可访问应用程序。

2.2 Docker容器的部署方式

Docker容器是一种轻量级的虚拟化技术能够将应用程序打包成一个镜像,并可在不同的环境中进行部署和运行。使用Docker容器可以快速地部署应用程序,避免了环境差异和依赖冲突的问题。

具体的部署步骤如下:

  1. 创建Dockerfile文件,指定基础镜像和应用程序的部署方式,并将应用程序打包成镜像文件。
  2. 构建Docker镜像,将Dockerfile文件中的配置参数和应用程序打包成一个镜像文件。
  3. 运行Docker容器,启动应用程序并将容器映射到外部端口,可以通过浏览器访问外部端口来访问应用程序。

Dockerfile文件的配置:

# 指定基础镜像
FROM openjdk:8-jdk-alpine# 构建应用程序
COPY ./target/myapplication.jar /app/# 暴露端口
EXPOSE 8080# 启动应用程序
CMD ["java", "-jar", "/app/myapplication.jar"]

五、小结回顾

1 Spring Boot的发展趋势

随着Spring Boot的逐渐成熟和广泛应用,其发展趋势也变得越来越明显。未来Spring Boot将继续朝着更加高效、便捷、安全、智能化等方向进行发展,并不断拓展应用场景和应用范围。

2 Spring Boot的优缺点评价

Spring Boot的优点主要包括:

  • 提供了极其简单的应用程序开发和部署方式。
  • 集成了众多的Spring生态系统组件,降低了开发难度和依赖冲突。
  • 易于实现自动化配置和自定义配置。
  • 提供了完善的测试和调试工具。

Spring Boot的缺点主要包括:

  • 不适合大型企业级应用程序的复杂需求。
  • 由于自动化配置的潜在风险,一些定制化开发需求无法很好地实现。

相关文章:

使用Spring Boot快速搭建项目:减少配置,提升开发效率

使用Spring Boot快速搭建项目&#xff1a;减少配置&#xff0c;提升开发效率 一、Spring Boot简介1 Spring Boot的起源2 Spring Boot的核心特点3 Spring Boot的优势 二、Spring Boot快速搭建项目1 Spring Boot的项目搭建方式使用Spring Initializr创建项目使用Spring Boot CLI创…...

(2)数码管

LED数码管:数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成"8"字器件 51单片机是共阴极连接 74HC245这个芯片有什么作用呢&#xff1f;解&#xff1a;这个芯片被称之为双向数据缓冲器这个芯片的作用&#xff0c;用来进行数据缓冲(提高驱…...

赫夫曼树和赫夫曼编码详解

目录 何为赫夫曼树&#xff1f; 赫夫曼树算法 赫夫曼编码 编程实现赫夫曼树 编程实现赫夫曼编码 编程实现WPL 总代码及分析 何为赫夫曼树&#xff1f; 树的路径长度&#xff1a;从树根到每一结点的路径长度之和 结点的带权路径长度&#xff1a;从树根到该结点的路径长度…...

unity UGUI系统梳理 -交互组件

概述 unity 中的交互组件可用于处理交互&#xff0c;例如鼠标或触摸事件以及使用键盘或控制器进行的交互 1、按钮 (Button) Button详解 2、开关 (Toggle) Background&#xff1a;背景图片&#xff0c;控制toggle组件的背景颜色改变&#xff0c;从而展示此物体是否被选中的…...

HTTP第15讲——HTTP的连接管理

短连接 HTTP 协议最初&#xff08;0.9/1.0&#xff09;是个非常简单的协议&#xff0c;通信过程也采用了简单的“请求 - 应答”方式。 它底层的数据传输基于 TCP/IP&#xff0c;每次发送请求前需要先与服务器建立连接&#xff0c;收到响应报文后会立即关闭连接。 因为客户端与…...

深度剖析Mybatis-plus Injector SQL注入器

背景 在项目中需要同时操作Sql Server 以及 MySQL 数据库&#xff0c;可能平时直接使用 BaseMapper中提供的方法习惯 了&#xff0c;不用的话总感觉影响开发效率&#xff0c;但是两个数据库的SQL语法稍微有点差别&#xff0c;有些暴露的方法并不能直接使用&#xff0c;所以便想…...

【Mysql实战】使用存储过程和计算同比环比

背景 同环比&#xff0c;是基本的数据分析方法。在各类调研表中屡见不鲜&#xff0c;如果人工向前追溯统计数据&#xff0c;可想而知工作量是非常大的。 标题复制10行&#xff0c;并且每行大于10个字符【源码解析】SpringBoot接口参数【Mysql实战】使用存储过程和计算同比环比…...

ChatGPT的前世今生,到如今AI领域的竞争格局,本文带你一路回看!

73年前&#xff0c;“机器思维”的概念第一次被计算机科学之父艾伦图灵&#xff08;Alan Turing&#xff09;提出&#xff0c;从此&#xff0c;通过图灵测试成为了人类在AI领域为之奋斗的里程碑目标。 73年后的今天&#xff0c;在AI历经了数十年的不断进化、迭代后&#xff0c…...

如何在JavaScript中获取当前时间yyyymmddhhmmss? (六种实现方式)

## 介绍 在编写JavaScript代码时&#xff0c;我们经常需要获取当前日期和时间。在本文中&#xff0c;我们将介绍几种获取当前时间并将其格式化为 yyyymmddhhmmss 的字符串的方法。 方法一&#xff1a;使用Date对象 在JavaScript中&#xff0c;我们可以使用 Date 对象来获取当…...

一、走进easyUI的世界

1.什么是easyUI&#xff1f; jQuery EasyUI是一组基于jQuery的UI插件集合体&#xff0c;而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript&#xff0c;也不需要对css样式有深入的了解&#xff0c;开发者需要…...

2023 上半年软件设计师知识点复习总纲

前言&#xff1a;全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;以下简称IT职业资格考试&#xff09;是由中华人民共和国人事部主管&#xff0c;国家计算机网络与信息安全管理中心主办的一项国家级、权威性的计算机职业技能水平认证考试。主要…...

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-3

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-3 垃圾收集器与内存分配策略垃圾收集算法标记-清除算法标记-复制算法标记-整理算法 垃圾收集器与内存分配策略 垃圾收集算法 标记-清除算法 最基础的垃圾收集算法是“标记-清除”&#xff08;Mark-Sweep&#xff…...

vue3 cesium datav 可视化大屏

目录 0. 预览效果 1. 代码库包 2. 技术点 3. 一些注意事项&#xff08;配置参数&#xff09; 4. 相关代码详情 0. 预览效果 包含的功能&#xff1a; ① 地球按照一定速度自转 ② 修改加载的geojson面样式 ③ 添加 文字 标注&#xff01; 1. 代码库包 直接采用vue-cli5 创建…...

python内置函数,推导式

abs&#xff1a;取绝对值 data abs&#xff08;-10&#xff09; pow&#xff1a;次方 data pow&#xff08;2&#xff0c;5&#xff09; sum&#xff1a;求和 num_list p[1,2,10,20] res sum(num_list) divmod取商和余数&#xff1a; v1&#xff0c;v2 divmod&…...

【Flink】DataStream API使用之Flink支持的数据类型

Flink的使用过程中&#xff0c;我们的数据都是定义好的 UserBehavior 类型&#xff0c;那还有没有其他更灵活的类型可以用呢&#xff1f;Flink 支持的数据类型到底有哪些&#xff1f; 1. Flink 的类型系统 Flink 作为一个分布式处理框架&#xff0c;处理的是以数据对象作为元…...

QT实现固高运动控制卡示波器

目录 一、固高示波器 二、基于QCustomPlot实现示波器 三、完整源码 一、固高示波器 固高运动控制卡自带的软件有一个示波器功能&#xff0c;可以实时显示速度的波形&#xff0c;可辅助分析电机的运行状态。但是我们基于sdk开发了自己的软件&#xff0c;无法再使用该功能&…...

洛谷P1157详解(两种解法,一看就会)

一、问题引出 组合的输出 题目描述 排列与组合是常用的数学方法&#xff0c;其中组合就是从 n n n 个元素中抽出 r r r 个元素&#xff08;不分顺序且 r ≤ n r \le n r≤n&#xff09;&#xff0c;我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dot…...

JavaScript异步编程和回调

目录 1、编程语言中的异步 2、JavaScript 3、回调 &#xff13;.&#xff11;在回调中处理错误 &#xff13;.&#xff12;回调的问题 &#xff13;.&#xff12;回调的替代方案 1、编程语言中的异步 默认情况下&#xff0c;JavaScript是同步的&#xff0c;并且是单线程…...

Qt开发笔记(Qt5.9.9下载安装环境搭建win10)

#1 Qt下载网站&#xff08;国内、国外镜像&#xff09; #2 Qt5.9.9安装选项 #3 配置系统环境变量 #4 创建测试项目 #1 Qt下载网站&#xff08;国内、国外镜像&#xff09; 官方下载地址&#xff08;慢&#xff09;&#xff1a;http://download.qt.io/ 国内镜像网站 这里给大家…...

使用Plist编辑器——简单入门指南

本指南将介绍如何使用Plist编辑器。您将学习如何打开、编辑和保存plist文件&#xff0c;并了解plist文件的基本结构和用途。跟随这个简单的入门指南&#xff0c;您将掌握如何使用Plist编辑器轻松管理您的plist文件。 plist文件是一种常见的配置文件格式&#xff0c;用于存储应…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...