SpringBoot框架学习总结 及 整合 JDBC Mybatis-plus JPA Redis 我的学习笔记

SpringBoot框架学习总结 及 整合 JDBC Mybatis-plus JPA Redis 我的学习笔记

  • 一、SpringBoot概述
  • 二、创建SpringBoot程序
    • 1. 使用maven方式创构建
    • 2. 使用Spring Initializr构建
    • 3. SpringBoot热部署
    • 4. SpringBoot的跨域处理
  • 三、基础配置
    • 1.配置文件的作用
    • 2.配置文件格式
    • 2.yaml
    • 3.SpringBoot配置信息的查询
  • 四、SpringBoot注解
    • 1.核心注解
    • 2.Web注解
    • 3.组件注解
    • 4.依赖注入注解
    • 5.其他常用注解
  • 五、整合第三方技术
    • 1.Springboot集成JDBC
    • 2.SpringBoot集成JPA
    • 3.SpringBoot集成Mybatis-Plus
    • 4.SpringBoot集成Redis


一、SpringBoot概述

SpringBoot是由Pivotal团队提供的开源框架,它并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。通过提供默认配置和丰富的组件封装,SpringBoot简化了配置,使得开发者能够更快地构建基于Spring的应用程序。

其设计目的是用来简化Spring应用的初始搭建以及开发过程

Alt


Spring Boot的主要优点

  • 内嵌服务器使得SpringBoot应用可以独立运行
  • 内嵌式容器简化Web项目
  • 开箱即用提供各种默认配置来简化项目配置
  • 没有冗余代码生成和XML配置的要求

二、创建SpringBoot程序

1. 使用maven方式创构建

(1)创建Maven项目
在这里插入图片描述
在这里插入图片描述

(2)在pom.xml中添加Spring Boot相关依赖

<!-- 引入Spring Boot父依赖 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

(3)编写主程序启动类

//标记该类为主程序启动类
@SpringBootApplication
public class HelloSpringBoot {
    public static void main(String[] args) {
        //方法启动主程序类 
        // SpringApplication.run(HelloSpringBoot.class,args)
        //代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象
        SpringApplication.run(HelloSpringBoot.class,args);
    }
}

(4)创建一个用于Web访问的Controller

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "Hello SpringBoot!";
    }
}

(5)运行项目 访问 localhost:8080/hello
在这里插入图片描述


2. 使用Spring Initializr构建

(1) 创建新模块,选择Spring初始化,并配置模块相关基础信息
在这里插入图片描述

(2) 选择当前模块需要使用的技术集
在这里插入图片描述
(3) Controller

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "Hello SpringBoot!";
    }
}

(4) 运行自动生成的Application类
在这里插入图片描述

3. SpringBoot热部署

热部署允许开发人员在代码修改后无需手动重启应用程序。这大大缩短了开发和调试周期,只需保存文件,系统就会自动重新加载相关的类和资源,使得每次代码修改都能立即生效。

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

使用 双击 或者 Ctrl + F9

在这里插入图片描述

4. SpringBoot的跨域处理

跨域 :当一个请求url的协议,域名,端口三个种任意一个与当前页面url不一样就是跨域
SpringBoot常用的跨域有两个

(1) 重写 WebMvcConfigurer(全局跨域)

  • 实现 WebMvcConfigurer 接口中的 addCorsMappings 方法,在此方法中配置全局跨域处理。
  • 在工程中添加 WebMvcConfig 类。此类配置了 @Configuration 注解,工程启动时会自动加载此类中的配置。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
       /**
		* addMapping:配置可以被跨域的路径,可以任意配置,可以具体到直接请求路径。 
		* allowCredentials:是否开启Cookie
		* allowedMethods:允许的请求方式,如:POST、GET、PUT、DELETE等。
		* allowedOrigins:允许访问的url,可以固定单条或者多条内容
		* allowedHeaders:允许的请求header,可以自定义设置任意请求头信息。 
		* maxAge:配置预检请求的有效时间
		*/

		registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                .allowedOrigins("*")
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .maxAge(36000);
    }
}

(2) 使用注解 (局部跨域)

  • 使用 @CrossOrigin 注解配置某一个 Controller 允许跨域。
@RestController
@CrossOrigin(origins = "*")
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello world";
    }
}

三、基础配置

1.配置文件的作用

  • 灵活性和可配置性:通过配置文件,可以轻松更改应用程序的行为和属性,而无需重新编译和部署代码。
  • 避免硬编码:将应用程序的配置信息从代码中分离出来,使得代码更加清晰、可维护和可重用。通过修改配置文件而不是代码,可以更容易地进行配置调整和部署管理
  • 多环境支持:可以针对不同的运行环境(如开发环境、测试环境、生产环境)使用不同的配置文件,以适应不同环境下的需求。这样可以在不同环境下灵活切换配置,减少了手动修改的工作量。

2.配置文件格式

SpringBoot提供了多种属性配置方式
application.properties文件 :

  • 语法结构 :key=value
  • 使用.properties作为文件扩展名。
  • 是Spring Boot项目默认的配置文件格式。
  • 使用#注释信息

application.yml :

  • 语法结构 :key:空格 value
  • 采用缩进和冒号的结构化格式,其中key和value之间使用英文冒号和空格组成,空格不可省略
  • 使用.yml或.yaml作为文件扩展名。
  • 结构更加清晰易读
  • 支持更多的数据类型

SpringBoot配置文件加载顺序 application.properties > application.yml > application.yaml

application.properties

server.port=8080

application.yml

server:
  port: 8081

application.yaml

server:
  port: 8082

运行SpringBoot工程 分别使用# 注释各个配置文件 观察端口号
在这里插入图片描述

2.yaml

YAML(YAML Ain’t Markup Language),一种数据序列化格式
优点:

  • 容易阅读
  • 容易与脚本语言交互
  • 以数据为核心,重数据轻格式

YAML文件扩展名

  • yml(主流)
  • yam

这种语言以数据作为中心,而不是以标记语言为重点!重数据轻格式,以前的配置文件,大多数都是使用xml来配置


yaml语法规则

核心规则:数据前面要加空格与冒号隔开

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • #表示注释

yaml数组数据

数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

数组( List、set )

#数组
pets:
  - cat
  - dog
  - pig

# 或 
pets: [cat,dog,pig]

对象、Map(键值对)

dog:
    name: "中华田园犬"
    age: 3
    
# 或
dog: {name: "中华田园犬",age: 3}

注入配置文件

//注册bean到容器中
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dog {
    @Value("${dog.name}")
    private String name;
    @Value("${dog.age}")
    private Integer age;
}

测试

@SpringBootTest
class SpringBootInitApplicationTests {
    @Autowired //将狗狗自动注入进来
    private Dog dog;
    @Test
    public void contextLoads() {
        System.out.println(dog); //打印看下狗狗对象
    }
}

3.SpringBoot配置信息的查询

以查阅SpringBoot的官方文档文档URL: https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#common-application-properties

# QUARTZ SCHEDULER (QuartzProperties)
spring.quartz.jdbc.initialize-schema=embedded # Database schema initialization mode.
spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
spring.quartz.job-store-type=memory # Quartz job store type.
spring.quartz.properties.*= # Additional Quartz Scheduler properties.
# ----------------------------------------
# WEB PROPERTIES
# ----------------------------------------
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080 # Server HTTP port.
server.servlet.context-path= # Context path of the application.
server.servlet.path=/ # Path of the main dispatcher servlet.
# HTTP encoding (HttpEncodingProperties)
spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.
# JACKSON (JacksonProperties)
spring.jackson.date-format= # Date format string or a fully-qualified date format class name. For instance, `yyyy-MM-dd HH:mm:ss`.
# SPRING MVC (WebMvcProperties)
spring.mvc.servlet.load-on-startup=-1 # Load on startup priority of the dispatcher servlet.
spring.mvc.static-path-pattern=/** # Path pattern used for static resources.
spring.mvc.view.prefix= # Spring MVC view prefix.
spring.mvc.view.suffix= # Spring MVC view suffix.
# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.
spring.datasource.password= # Login password of the database.
spring.datasource.url= # JDBC URL of the database.
spring.datasource.username= # Login username of the database.

四、SpringBoot注解

1.核心注解

@SpringBootApplication

  • 标注一个主程序类,表明这是一个Spring Boot应用程序的入口。它是一个复合注解,组合了
    @Configuration、@EnableAutoConfiguration 和 @ComponentScan。
  • 直接标注在应用程序的主类上。

@Configuration

  • 标识一个类作为配置类,类似于Spring XML配置文件。
  • 在配置类上添加此注解,通常与@Bean注解配合使用,用于定义Bean和配置信息

@EnableAutoConfiguration

  • 启用Spring Boot的自动配置机制,根据项目中的依赖和应用上下文自动配置Spring应用程序。
  • 在启动类或配置类上添加此注解。@SpringBootApplication注解已经组合了这个注解,通常不需要在启动类再添加此注解。

@ComponentScan

  • 自动扫描并加载符合条件的组件或Bean,定义扫描的路径。
  • 在配置类上添加此注解,并指定扫描的包范围。通常与@SpringBootApplication一起使用,无需单独添加。但也可以根据需要单独使用,并设置扫描的过滤条件。

2.Web注解

@Controller

  • 标记一个类作为控制器,用于处理HTTP请求并返回视图。
  • 放在控制器类上,与@RequestMapping一起使用,方法的返回值通常是视图的名称或ModelAndView对象。

@RestController

  • 结合了@Controller和@ResponseBody两个注解的功能,用于标记一个类或者方法,表示该类或方法用于处理HTTP请求,并将响应的结果直接返回给客户端,而不需要进行视图渲染。
  • 通常放在控制器类上,配合@RequestMapping使用。

@RequestMapping

  • 用于映射web请求(如URL路径)到具体的方法上。可以标注在类上或方法上,标注在类上时,表示类中的所有响应请求的方法都是以该类路径为父路径。
  • 可以通过设置value、path、method、params、headers等属性来指定请求的URL、HTTP方法、请求参数等。

@GetMapping

  • 映射HTTP GET请求到处理方法上。

@PostMapping

  • 映射HTTP POST请求到处理方法上。

3.组件注解

@Component

  • 将一个类标识为Spring组件(Bean),可以被Spring容器自动检测和注册。
    @Component是一个通用的注解,可以用来标注任何Spring管理的Bean。

@Service

  • 标识服务层组件,实际上是@Component的一个特化,用于表示业务逻辑服务。

@Repository

  • 标识持久层组件,实际上是@Component的一个特化,用于表示数据访问组件。

4.依赖注入注解

@Autowired

  • 用于自动装配(自动注入)Spring Bean到其他Bean中。
  • 可以标注在属性、构造器或方法上,Spring会在运行时自动注入匹配的Bean。

@Value

  • 注入配置文件中的属性值

5.其他常用注解

@ResponseBody

  • 将方法的返回值转换为指定格式(如JSON、XML)作为HTTP响应的内容返回给客户端。
  • 常用于RESTful服务中,标识方法返回的对象不是视图名称,而是直接写入HTTP响应体中的数据

@RequestBody

  • 将HTTP请求体的内容(如JSON、XML等)映射到一个Java对象。
  • 通常用于POST请求中,将客户端发送的数据绑定到方法的参数上。

@PathVariable

  • 从URI路径中提取参数值,将其映射到方法的参数上。
  • 常用于RESTful服务中,允许动态地将URL中的部分作为方法参数使用。

@Import

  • 用来导入其他配置类。

@ImportResource

  • 用来加载xml配置文件。

五、整合第三方技术

1.Springboot集成JDBC

(1) 创建SpringBoot工程
按照上面的过程创建 不选着任何技术集
(2) pom.xml依赖

		<!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

(3) application.yml

spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
        password: 1234
        username: root

(4) 编写JDBCController

@RestController
public class JDBCController {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    //查询数据库的所有信息
    //没有实体类,数据库的数据   怎么获取? Map
    @GetMapping("/StudentList")
    public List<Map<String,Object>> StudentList(){
        String sql = "select * from student";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        return maps;
    }
}

(5) 测试页面展示

在这里插入图片描述


2.SpringBoot集成JPA

(1) 创建SpringBoot工程
按照上面的过程创建 不选着任何技术集
(2) pom.xml依赖

<!-- SpringDataJPA依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

(3) application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    password: 1234
    username: root

  jpa:
    hibernate:
      ddl-auto: update # 第一次建表create  后面用update,要不然每次重启都会新建表
    #在控制台显示Hibernate的sql
    show-sql: true

(4) 创建一个entity

@Data
@Entity //声明实体类
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @Id //表示该属性作为表的的主键
    @Generated
    private Long id;
    private String name;
    private String gender;
}

(5) 创建UserRepository

public interface UserRepository extends JpaRepository<User,Long> {
	/**
     * 我们在这里直接继承JpaRepository
     * 这里面有很多的方法
     * */
}

这里可以打开JpaRepository源码 里面提供了很多方法

请添加图片描述

(6) 创建Controller

@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/findAll")
    public List<User> findAll(){
        List<User> userList = userRepository.findAll();
        return userList;
    }
}

(7) 测试运行
我们发现JPA已经给我们自动生成了一张User表
在这里插入图片描述

(8) 给新建表添加数据
在这里插入图片描述

(9) 访问Controller的findAll
在这里插入图片描述


3.SpringBoot集成Mybatis-Plus

在我的另一篇文章 :MyBatis与Mybatis-plus的学习总结 及 两者的区别 我的学习笔记 中 Mybatis-plus 的 快速入门有详细介绍


4.SpringBoot集成Redis

(1) 创建SpringBoot工程
按照上面的过程创建 不选着任何技术集

(2) pom.xml依赖

		<!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

(3) application.yml

spring:
  redis:
    host: 127.0.0.1  #redis主机ip
    port: 6379       #端口号
    password: 1234   #有密码就填写密码 没有可以省

(4) 填写redis配置类

@Configuration   //redis配置类
public class RedisConfig {
    //固定的模板   直接拿去用即可
    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        //json序列化配置
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        //String的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        // value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // hash的value序列化方式采用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();

        return template;
    }
}

(5) 填写RedisController

@RestController
public class RedisController {
    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("/setName")
    public String SetName(){
    	//设置存活name存活时间 为 1 单位TimeUnit.MINUTES 为分钟
        redisTemplate.opsForValue().set("name","蔡徐坤",1, TimeUnit.MINUTES);
        String name = (String)redisTemplate.opsForValue().get("name");
        return name;
    }
}

(6) 运行测试
在这里插入图片描述

(7) 打开Redis图形化工具 发现值存在

在这里插入图片描述

(8) 一分钟后发现值不存在

在这里插入图片描述

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

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

相关文章

【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用

创建个性化的GPTs应用是一个涉及技术、设计和用户体验的过程。以下是详细步骤&#xff1a; ###1.确定应用目标和用户群体 在开始之前&#xff0c;你需要明确你的应用的目标和目标用户。这将帮助你在设计、开发和个性化方面做出相应的决策。例如&#xff0c;如果你的应用是为了…

strtok函数详解

strtok函数 strtok 函数是一个字符串分割函数&#xff0c;用于将字符串分割成一系列的标记。这个函数通过一组分隔符字符来确定标记的边界&#xff0c;每次调用都会返回字符串中的下一个标记&#xff0c;并且将原始字符串中的分隔符替换为空字符‘\0’&#xff0c;从而实际上是…

【Linux】Linux入门实操——vim、目录结构、远程登录、重启注销

一、Linux 概述 1. 应用领域 服务器领域 linux在服务器领域是最强的&#xff0c;因为它免费、开源、稳定。 嵌入式领域 它的内核最小可以达到几百KB, 可根据需求对软件剪裁&#xff0c;近些年在嵌入式领域得到了很大的应用。 主要应用&#xff1a;机顶盒、数字电视、网络…

系统管理与规划师

综合 工业化、信息化两化融合&#xff1a;战略、资源、经济、设备和技术的融合 诺兰6时期&#xff1a;&#xff08;初普控&#xff0c;整数成&#xff09;初始、普及、控制、整合、数据管理、成熟期&#xff1b;技术转型期介于控制和整合间 IT战略规划 IT战略制定&#xff1a;使…

tcpdump 是一款功能强大的网络数据包分析工具

功能概述 tcpdump 可以捕获和分析网络上传输的数据包。它允许用户在网络接口上监听经过的流量&#xff0c;并根据指定的条件&#xff08;如协议类型、源 IP 地址、目的 IP 地址、端口号等&#xff09;对数据包进行过滤和显示&#xff0c;帮助网络管理员、安全分析师和开发人员排…

容器化技术入门:Docker详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 容器化技术入门&#xff1a;Docker详解 容器化技术入门&#xff1a;Docker详解 容器化技术入门&#xff1a;Docker详解 引言 Doc…

C++20 概念与约束(2)—— 初识概念与约束

1、概念 C20 中引入新的编译期关键字 concept 用于创建概念。个人认为将其翻译为“构思”更为贴切。直接使用时&#xff0c;它更像一个只能用于模板的布尔类型关键字。 而如果用于模板中&#xff0c;他会将模板类型先带入自身&#xff0c;当自身条件为 true 才会实例化模板&…

FPGA实现以太网(一)、以太网基础知识

系列文章目录 FPGA实现以太网&#xff08;二&#xff09;、初始化和配置PHY芯片 文章目录 系列文章目录一、以太网简介二、OSI七层模型三、TCP/IP五层模型四、MAC-PHY接口五、MAC帧格式六、IP帧格式6.1 IP首部校验和计算6.2 IP首部校验和校验 七、UDP帧格式7.1 UDP头部校验和…

【启程Golang之旅】Go-Micro框架的高效开发技巧

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

课下作业:IPSec协议验证

课下作业&#xff1a;IPSec协议验证 文章目录 1. 参考云班课课程资源中“ch03 密码技术-协议验证”的“VPN协议验证.pdf”和“ch03 密码技术-10-密码协议验证IPSec.mp4”&#xff0c;对 IPSec 协议进行验证&#xff0c;提交验证过程。&#xff08;79分&#xff09;第一阶段发起…

私域流量时代下的新型商业模式:以开源链动 2 + 1 模式、AI 智能名片、S2B2C 商城小程序源码为例

摘要&#xff1a;本文探讨了私域流量时代的特点及其对商业盈利模式的影响。通过分析从大众消费时代到私域流量时代的转型&#xff0c;阐述了商品到“人”的变化过程。同时&#xff0c;深入研究了开源链动 2 1 模式、AI 智能名片和 S2B2C 商城小程序源码在私域流量发展中的作用…

QJson-趟过的各种坑(先坑后用法)

QJson-趟过的各种坑【先坑后用法】 Chapter1 QJson-趟过的各种坑【先坑后用法】一、不能处理大数据量&#xff0c;如果你的数据量有百兆左右(特别是有的小伙伴还喜欢json格式化输出的)&#xff0c;不要用Qjson&#xff0c;否则会报错 DocumentTooLarge二、json格式化输出1.构建…

MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解

行级锁&#xff0c;每次操作锁住对应的行数据。锁定粒度最小&#xff0c;发生锁冲突的概率最低&#xff0c;并发度最高。 应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的&#xff0c;行锁是通过对索引上的索引项加锁来实现的&#xff0c;而不是对记录加的锁。 对于行…

DBeaver工具连接Hive

DBeaver工具连接Hive 首先解压安装包dbeaver-ce-latest-x86_64-setup.zip,并安装dbeaver-ce-latest-x86_64-setup.exe; 安装Kerberos客户端4.1-amd64.msi; 查看集群节点/etc/hosts文件内容,并追加到C:\Windows\System32\drivers\etc\hosts; 下载集群用户keytab文件,并解压…

动态规划-两个数组的dp问题——718.最长重复子数组

1.题目解析 题目来源 718.最长重复子数组——力扣 测试用例 2.算法原理 1.状态表示 子数组问题不能像子序列问题使用两个区间来表示状态&#xff0c;因为子数组一定是连续的&#xff0c;因此在填第i个位置就需要用到第i-1个位置的值&#xff0c;那么不妨以某个位置为结尾来设…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析&#xff0c;特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力&#xff0c;以对象为为驱动的模型&#xff0c;主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是&#xff0c;我设置了四个变量sLeft…

高校宿舍信息管理系统小程序

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

【含开题报告+文档+源码】基于SpringBoot的智慧养老医护管理系统

开题报告 随着社会老龄化趋势的不断加深&#xff0c;我国老年人口逐年增长&#xff0c;对养老服务的需求愈发迫切。然而&#xff0c;传统的养老服务模式存在许多不足&#xff0c;如信息孤岛、护理不精准等问题&#xff0c;迫切需要一种创新性的解决方案以提升养老服务的质量和…

【双十一特惠】腾讯云省钱攻略:如何智取云计算资源

前言 双十一不仅是购物的狂欢节&#xff0c;对于云计算用户来说&#xff0c;更是一个节省成本的绝佳时机。腾讯云&#xff0c;作为国内领先的云计算服务商&#xff0c;每年双十一都会推出一系列优惠活动。本文将为您揭开如何在这个购物节中&#xff0c;最大化利用腾讯云的优惠…