SpringBoot+Vue全栈开发-刘老师教编程(b站)(二)

news2024/11/16 3:43:43

创建SpringBoot项目

1.配置maven
请添加图片描述
出现bug

java: 无法访问org.springframework.boot.SpringApplication   错误的类文件: /D:/maven/repository/org/springframework/boot/spring-boot/3.0.0/spring-boot-3.0.0.jar!/org/springframework/boot/SpringApplication.class     类文件具有错误的版本 61.0, 应为 52.0     请删除该文件或确保该文件位于正确的类

2.修改pom.xml,bug消除(2.7.2 、<java.version>1.8</java.version>)

<?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.7.2</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>demo</description>
	<properties>
		<java.version>1.8</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-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>


Web入门

  • Spring Boot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。
  • 创建SpringBoot项目勾选Spring Web选项后,会自动将spring-boot-starter-web组件加入到项目中。
  • spring-boot-starter-web启动器主要包括web、webmvc、ison、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。
  • webmvc为Web开发的基础框架,ison为JSON数据解析组件,tomcat为自带的容器依赖。

控制器

  • Spring Boot提供了@Controller和@RestController两种注解来标识此类负责接收和处理HTTP请求。
  • 如果请求的是页面和数据,使用@Controller注解即可;如果只是请求数据则可以使用@RestControler注解。
    请添加图片描述

路由映射

  • @RequestMapping注解主要负责URL的路由映射。它可以添加在Controller类或者具体的方法上
  • 如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效。
  • @RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。常用的属性参数如下
  • value:请求URL的路径,支持URL模板、正则表达式
  • method: HTTP请求方法
  • consumes: 请求的媒体类型!(Content-Type),如application/json
  • produces: 响应的媒体类型
  • params,headers:请求的参数及请求头的值

Method匹配

  • HTTP请求Method有GET、POST、PUT、DELETE等方式。HTTP支持的全部Method
  • @RequestMapping注解提供了method参数指定请求的Method类型,包括RequestMethodGET、RequestMethod.POST、RequestMethod.DELETERequestMethod.PUT等值,分别对应HTTP请求的Method
@RequestMapping(valve = "/getData",method = RequestMethod.GET)
public string getData(){
    return "hello";
}
  • Method匹配也可以使用@GetMapping、@PostMapping等注解代替。

参数传递

  • @RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自HTTP请求体或请求url的QueryString,当请求的参数名称与Controller的业务方法参数名称一致时,@RequestParam可以省略
  • @PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数
  • @RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type:application/x-www-form-urlencoded编码格式的数据比如:application/jsonapplication/xml等类型的数据

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
idea快捷键get和set、toString()为Alt+Insert

文件上传

文件上传原理

  • 表单的enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。当表单的enctype=“application/x-www-form-urlencoded”(默认)时form表单中的数据格式为:key=value&key=value
  • 当表单的enctype="multipart/form-data"时,其传输数据形式如下
    请添加图片描述

SpirngBoot实现文件上传功能

  • Spring Boot工程嵌入的tomcat限制了请求的文件大小,每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。
  • 要更改这个默认值需要在配置文件(如application.properties)中加入两个配置
   spring.servlet.multipart.max-file-size=10MB
   spring.servlet.multipart.max-request-size=10MB

请添加图片描述

@RestController
public class FileUploadController {
    @PostMapping("/upload")
    public String up(String nickname, MultipartFile photo, HttpServletRequest request) throws IOException {
        System.out.println(nickname);
        System.out.println(photo.getOriginalFilename());
        System.out.println(photo.getContentType());
        String path= request.getServletContext().getRealPath("/upload/");
        System.out.println(path);
        saveFile(photo,path);
        return "上传成功!";
    }

    public void saveFile(MultipartFile photo, String path) throws IOException {
        File dir= new File(path);
        if(!dir.exists()){
            dir.mkdir();
        }
        File file = new File(path+photo.getOriginalFilename());
        photo.transferTo(file);

    }
}

运行结果如下
请添加图片描述

拦截器

  • 拦截器在Web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现。总结起来,拦截器大致有以下几种使用场景:
  • 权限检查:如登录检测,进入处理程序检测是否登录,如果没有,则直接返回登录页面。
  • 性能监控:有时系统在某段时间莫名其妙很慢,可以通过拦截器在进入处理程序之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间
  • 通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有提取Locale、Theme信息等,只要是多个处理程序都需要的,即可使用拦截器实现。

  • Spring Boot定义了Handlerlnterceptor接口来实现自定义拦截器的功能
  • HandlerInterceptor接定义了preHandle、postHandle、afterCompletion三种方法,通过重写这三种方法实现请求前、请求后等操作请添加图片描述

1.拦截器定义:一般只设置preHandle,作为执行controller之间的拦截器,先撰写拦截器类

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("LoginInterceptor");
        return true;
    }
}

2.拦截器注册:(必须写,否则拦截器不可执行)绑定拦截器和拦截的资源访问路径,切记要加@Controller,才能被整个程序配置到

  • addPathPatterns方法定义拦截的地址
  • excludePathPatterns定义排除某些地址不被拦截添加的一个拦截器没有addPathPattern任何一个url则默认拦截所有请求如果没有excludePathPatterns任何一个请求,则默认不放过任何一个请求。
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/**");
    }
}

RESTfuI的特点

  • 每一个URI代表一种资源
  • 客户端使用GET、POST、PUT、DELETE四种表示操作方式的动词对服务端资源进行操作:GET用于获取资源,POST用于新建资源(也可以用于更新资源)PUT用于更新资源,DELETE用于删除资源。
  • 通过操作资源的表现形式来实现服务端请求操作。
  • 资源的表现形式是JSON或者HTML。
  • 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都包含必需的信息。
    请添加图片描述

HTTP状态码

  • HTTP状态码就是服务向用户返回的状态码和提示信息,客户端的每一次请求服务都必须给出回应,回应包括HTTP状态码和数据两部分。
  • HTTP定义了40个标准状态码,可用于传达客户端请求的结果。状态码分为以下5个类别:
    1xx:信息,通信传输协议级信息
    2xx:成功,表示客户端的请求已成功接受
    3xx:重定向,表示客户端必须执行一些其他操作才能完成其请求
    4xx:客户端错误,此类错误状态码指向客户端
    5xx:服务器错误,服务器负责这写错误状态码

Spring Boot实现RESTfuI API(xxMapping)

  • Spring Boot提供的spring-boot-starter-web组件完全支持开发RESTfuI API提供了与REST操作方式(GET、POST、PUT、DELETE)对应的注解。
    @GetMapping:处理GET请求,获取资源。
    @PostMapping:处理POST请求,新增资源。
    @PutMapping:处理PUT请求,更新资源。
    @DeleteMapping:处理DELETE请求,删除资源:
    @PatchMapping:处理PATCH请求,用于部分更新资源。
  • 在RESTfu架构中,每个网址代表一种资源,所以URI中建议不要包含动词,只包含名词即可,而且所用的名词往往与数据库的表格名对应。
  • 用户管理模块API示例:请添加图片描述

Swagger

  • Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTfuI风I格的Web服务,是非常流行的API表达工具。
  • Swagger能够自动生成完善的RESTfuIAPI文档同时并根据后台代码的修改同步更新,同时提供完整的测试页面来调试API

使用Swagger生成Web API文档

1.导入依赖

<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.9.2</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.9.2</version>
		</dependency>

2.Swagger配置类


@Configuration  //告诉Spring容器这是一个配置类
@EnableSwagger2 //开启Swagger的功能
public class Swagger2Config {
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com"))
                .paths(PathSelectors.any()).build();
    }

    /**
     * 这里为API文档显示的信息
     */
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("演示项目API")
                .description("学习Swagger2的演示项目")
                .version("1.0")
                .build();
    }
}

3.在application.properties中添加
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
4.运行http://localhost:8080/swagger-ui.html
5.可以通过@ApiOperation(“xxxx”)进行备注
6.运行结果如下请添加图片描述


MybatisPlus

ORM介绍

  • ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象与关系数据库存在的互不匹配现象的一种技术
  • ORM通过使用描述对象和数据库之间映射的元数据将程序中的对象自动持久化到关系数据库中。
  • ORM框架的本质是简化编程中操作数据库的编码
    请添加图片描述

MyBatis-Plus介绍

  • MyBatis是一款优秀的数据持久层ORM框架,被广泛地应用于应用系统
  • MvBatis能够非常灵活地实现动态SQL,可以使用XML或注解来配置和映射原生信息,能够轻松地将Java的POJO(Plain Ordinary Java Object,普通的Java对象)与数据库中的表和字段进行映射关联
  • MyBatis-Plus是一个 MyBatis 的增强工具,在 MyBatis 的基础上做了增强简化了开发

如何使用Mybatis

  • Mybatis的CRUD操作
    @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
    int add(User user);
    @Update("update user set username=#{username},password=#{password},birthday=#{birthday} where id=#{id}")
    int update(user user);
    @Delete("delete from user where id=#{id}")
    int delete(int id);
    @Select("select * from user where id=#{id}")
    User findById(int id);
    @Select("select * from user")
    List<user> getAll();

请添加图片描述

1.添加依赖

      <!--MyBatisPlus依赖-->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.2</version>
		</dependency>
		<!--mysql驱动依赖-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
		</dependency>
		<!--数据连接池druid-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.20</version>
		</dependency>

2.全局配置
(1)在application.properties中添加

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false
spring.datasource.username=root
spring.datasource.password=hsp
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

(2)在DemoApplication中添加@MapperScan注解

@SpringBootApplication
@MapperScan("com.example.mpdemo.mapper")
public class DemoApplication {

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

}

4.创建UserController,添加下面代码

@GetMapping("/user")
    public String query(){
        return "查询用户";
    }

5.创建entity的User类,添加get和set、toString()


public class User {
    private int id;
    private  String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    private String birthday;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }
}

6.创建Mapper的UserMapper接口,记得写@Mapper

@Mapper
public interface UserMapper {

    //查询所有用户
    @Select("select * from user")
    public List<User> find();
}

7.在UserController中添加声明,注入userMapper

    @Autowired
    private UserMapper userMapper;

    @GetMapping("/user")
    public String query(){
        List<User> list = userMapper.find();
        System.out.println(list);
        return "查询用户";
    }

8.运行结果
请添加图片描述

  • 如果是前后端分离项目需要将返回值String改为List,系统会自动将数据转为json请添加图片描述
    运行结果如下请添加图片描述

  • 插入
    (1)在UserMapping添加下面代码
    请添加图片描述
    (2)在UserController中添加

    @PostMapping("/user")
    public String save(User user){
        int i = userMapper.insert(user);
        if(i > 0){
            return "插入成功";
        }else{
            return "插入失败";
        }
    }

如何使用MybatisPlus

1.mapper类继承BaseMapper(注意:类的名字必须和表的名字一致)

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

2.controller修改query方法,insert方法不用变

    @GetMapping("/user")
    public List query(){
        List<User> list = userMapper.selectList(null);
        System.out.println(list);
        return list;
    }
  • 如果表名和实体类不一致,类上方可以加“@TableName(“表名”)”映射到实体类,变量名不一致用“@TableField”。
  • @TableId可以将变量设置为主键,IdType.AUTO意思是自增,再次测试,插入数据时,user传入数据时会带上id,尽管请求时并没有设置id。

MybatisPlus多表查询及分页查询

  • 实现复杂关系映射,可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置。(MybatisPlus仅对单表查询进行了增强,没有修改多表查询)
    请添加图片描述

  • 目标:实现查询用户时,查到该用户名下所有订单
    (1)新建订单表u_order(id设置为主键、自增),注意表名不能设为order,不然访问时,sql语法会出错(“select *from order where uid = #{uid}”),无法执行sql语句。
    因为sql语句中不能出现sql关键词,否则会报错,sql关键词有order、form、dec等等。
    请添加图片描述

(2)新建Order类,以及get、set、constructor、toString方法

@TableName("u_order")
public class Order {
    private int id;
    private String ordertime;
    private double total;
    private User user;
}

(3)User类中加入private List<Order> order;
(4)新建OrderMapper、OrderController

@Mapper
public interface OrderMapper extends BaseMapper<Order> {
    @Select("select * from u_order where uid = #{uid}")
    List<Order> selectByUid(int uid);

    //  查询所有的订单,同时查询订单的用户
    @Select("select * from u_order")
    @Results({
            @Result(column = "id",property = "id"),
            @Result(column = "order_time",property = "ordertime"),
            @Result(column = "total",property = "total"),
            @Result(column = "uid",property = "user",javaType = User.class,
                    one=@One(select = "com.example.demo.mapper.UserMapper.selectById")
            )
    })
    List<Order> selectAllOrderAndUser();
}
@RestController
public class OrderController {

    @Autowired
    private OrderMapper orderMapper;

    @GetMapping("/order/findAll")
    public List findAll(){

        List orders = orderMapper.selectAllOrdersAndUser();
        return orders;
    }

}

(5)UserMapper添加查询用户、查询所有订单的方法selectAllUserAndOrder()

@Mapper
public interface UserMapper extends BaseMapper<User> {
    //   查询用户,根据用户id查询信息   select * from user where id =
    @Select("select * from user where id = #{id}")
    User selectById(int id);


    //   查询用户及其所有的订单
    @Select("select * from user")
    @Results(
            {
              @Result(column = "id",property = "id"),
              @Result(column = "username",property = "username"),
              @Result(column = "password",property = "password"),
              @Result(column = "birthday",property = "birthday"),
              @Result(column = "id",property = "order",javaType = List.class,
                            many=@Many(select = "com.example.demo.mapper.OrderMapper.selectByUid")
                    )
            }
    )
    List<User> selectAllUserAndOrder();

(6)UserController中添加对应方法

    @GetMapping("/user/findAll")
    public List<User> find(){
        return userMapper.selectAllUserAndOrder();
    }

@Results是结果集,@Result作用是每一个字段赋值
运行结果
请添加图片描述

条件查询

(1)在User类中的order前加上@TableField(exist = false),不然·就会报错

   @TableField(exist = false)
    private List<Order> order;

(2)在UserController中添加条件查询findByCond()

  //  条件查询
    @GetMapping("/user/find")
    public List<User> findByCond(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.eq("username","zhangsan");
        return userMapper.selectList(queryWrapper);
    }

运行结果
请添加图片描述

分页查询

(1)创建MyBatis Plus拦截器,新建配置类MyBatisPlusConfig

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor paginationInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        interceptor.addInnerInterceptor(paginationInterceptor);
        return interceptor;
    }
}

(2)Controller方法添加分页查询findByPage()

    //分页查询
    @GetMapping("/user/findByPage")
    public IPage findByPage(){
        //设置起始值及每页条数
        Page<User> page = new Page<>(0,2);![请添加图片描述](https://img-blog.csdnimg.cn/direct/3e1c84ff10964acd9041b491936916fa.png)

        IPage iPage = userMapper.selectPage(page,null);
        return iPage;
    }

Page对象是用来描述从哪查,查几条数据;iPage是描述结果集的对象。
运行结果:
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react-router 源码之matchPath方法

1. 基础依赖path-to-regexp react-router提供了专门的路由匹配方法matchPath(位于packages/react-router/modules/matchPath.js)&#xff0c;该方法背后依赖的其实是path-to-regexp包。 path-to-regexp输入是路径字符串&#xff08;也就是Route中定义的path的值&#xff09;&…

AI:145-智能监控系统下的行人安全预警与法律合规分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

vscode 设置打开终端的默认工作目录/路径

vscode 设置打开终端的默认工作目录/路径** 文章目录 vscode 设置打开终端的默认工作目录/路径**打开vscode&#xff0c;打开设置UI 或是设置JSON文件&#xff0c;找到相关设置项方式1&#xff1a;通过打开settings.json的UI界面 设置:方式2&#xff1a;通过打开设置settings.j…

应急响应靶机训练-Web1【题解】

前言 接上文&#xff0c;应急响应靶机训练-Web1。 此文为应急响应靶机训练-Web1【题解】篇 解题过程 视频版&#xff1a; 另外&#xff0c;师傅们可以关注一下我们的bilibili&#xff0c;以后跟应急响应相关的靶机都会在bilibili发布一份视频 应急响应靶机训练-Web1【题解…

【MySQL】主从同步原理、分库分表

主从同步原理 1. 主从同步原理 MySQL 经常先把命令拷入硬盘的日志&#xff0c;再执行日志的命令&#xff0c;这样的好处&#xff1a; 日志的位置固定&#xff0c;拷入硬盘的开销不大&#xff1b;将命令先准备好&#xff0c;而不是边读边执行&#xff0c;性能更好&#xff0c;…

TCGA临床及肿瘤信息解读

TCGA临床信息各英文列解读 地址&#xff1a;https://docs.gdc.cancer.gov/Data_Dictionary/viewer/#?viewtable-entity-list&anchorclinical 一些用药 Cisplatin&#xff1a;顺铂&#xff0c;顺铂的作用机制主要通过与DNA结合&#xff0c;形成DNA-顺铂加合物&#xff0…

练习 2 Web [ACTF2020 新生赛]BackupFile 1

[ACTF2020 新生赛]BackupFile 1 Web常规题目 首先尝试查找常见的前端页面index.php之类的&#xff0c;没找到 题目有个“BackupFile”——备份文件 尝试用工具遍历查找相关的文件 御剑没扫出来&#xff0c;搜索搭建好dirsearch后&#xff0c;扫出来的index.php.bak 扫描工…

【4.3计算机网络】网络规划与设计

目录 1.网络规划2.逻辑网络设计3.物理网络设计 1.网络规划 需求分析->通信规范分析->逻辑网络设计->物理网络设计->实施阶段 2.逻辑网络设计 3.物理网络设计 例题1&#xff1a; 解析&#xff1a;选A。 例题2&#xff1a; 解析&#xff1a;选A。 例题3. 解析&am…

2024年小程序云开发CMS内容管理无法使用,无法同步内容模型到云开发数据库的解决方案,回退老版本CMS内容管理的最新方法

一&#xff0c;问题描述 最近越来越多的同学找石头哥&#xff0c;说cms用不了&#xff0c;其实是小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我…

uniapp:启动图 .9png 制作教程

1、工具安装&#xff1a;自行下载Android Studio 2、制作.9png 注意上图3条黑线的位置&#xff0c;意思是&#xff1a;标注黑线的位置可以进行缩放。 对其大多数启动图来说&#xff0c;标注以上3条黑线即可。

Sora的潜力与影响:对视频制作、广告、娱乐等行业的深度解析

随着技术的飞速发展&#xff0c;OpenAI推出的Sora模型已经引起了广泛关注。作为一款强大的视频生成工具&#xff0c;Sora不仅改变了视频制作的传统模式&#xff0c;更对广告、娱乐等多个行业产生了深远影响。本文将深度解析Sora的潜力与影响&#xff0c;探讨其在视频制作、广告…

JVM之CMS垃圾收集器详解

CMS垃圾收集器 CMS回收流程 官网&#xff1a; https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/cms.html#concurrent_mark_sweep_cms_collector CMS(Concurrent Mark Sweep)收集器是一种以获取 最短回收停顿时间为目标的收集器。 采用的是"标记-清除…

重拾前端基础知识:CSS3

重拾前端基础知识&#xff1a;CSS3 前言边框圆角阴影图片 背景渐变文本字体多列动画与过渡2D 转换3D 转换过渡动画 网格布局弹性盒子&#xff08;重点&#xff09;父元素设置子元素设置 响应式设计设置 Viewport构建响应式网格视图12栅格媒体查询 案例讲解图片按钮分页 浏览器支…

面试数据库篇(mysql)- 10事务中的隔离性是如何保证

锁:排他锁(如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁mvcc : 多版本并发控制MVCC 全称 Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突 MVCC的具体实现,主要依赖于数据库记录中的隐式字段…

进程间通信的常见方式

进程间通信是计算机系统中不同进程之间进行数据交换和共享信息的方式。 父子进程之间其他地址空间不一样&#xff0c;但共享同一块内核空间。进程间通信的本质还是通过内核开辟缓冲区&#xff0c;一个进程写&#xff0c;一个进程读这样的工作原理。 常见的通信方式包括&#x…

一键安装|卸载 mysql 8.2.0 shell脚本

场景&#xff1a;为了在无网、外网 mysql 安装方便&#xff0c;这里分享一个自己编写得 shell脚本 这里以当前最新版 mysql 8.2.0&#xff1b;centos-7 二进制包下载&#xff1a; 下载地址 mysql_install.sh #!/bin/bash # 解压安装包 tar -xf mysql-8.2.0-linux-glibc2.17-x8…

Unity - 相机画面为黑白效果

一、 在Hierarchy中创建一个Global Volume,并设置它为局部作用 二、 将场景出现的作用域范围缩小至相机所在位置&#xff0c;将相机包含即可。 三、添加覆盖组件Color Adjustments,并将Saturation直接拉为-100 。 此时&#xff0c;相机拍摄画面为黑白&#xff0c;场景视图中…

ifcplusplus 示例 函数中英文 对照分析

有需求&#xff0c;需要分析 ifc c渲染&#xff0c;分析完&#xff0c;有 230个函数&#xff0c;才能完成一个加载&#xff0c;3d加载真的是大工程&#xff01; 函数中英文对照表&#xff0c;方便 日后开发&#xff0c;整理思路顺畅&#xff01;&#xff01;&#xff01;&#…

回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测

回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测 目录 回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-BiTCN-B…

kubesphere jenkins 流水线 未运行(解决方案)

场景&#xff1a; 在kubesphere 中运行 流水线 devops 结果&#xff0c;显示未运行 但是用 admin 账户是可以运行成功的。 问题解决 1- 查日志&#xff1a; 然后 Caused: org.acegisecurity.userdetails.UsernameNotFoundException: org.springframework.security.core.…