六、Spring Boot - 上手篇(2)

news2024/11/16 19:24:15

🌻🌻目录

  • 一、SpringBoot 构建RESTful API
    • 1.1 RESTful介绍
    • 1.2 RESTful接口设计
    • 1.3 用户实体bean创建 User
    • 1.4 创建Controller UserController
    • 1.5 Postman 测试RESTful 接口
  • 二、SpringBoot 使用Swagger2 构建API文档
    • 2.1 Swagger2介绍
    • 2.2 SpringBoot 开启 Swagger2支持
    • 2.3 修改 Controller 增加文档注释
    • 2.4 查看Swagger2文档
  • 三、SpringBoot Jdbc 操作数据库
    • 3.1 SpringBoot 开启jdbc支持
    • 3.2 数据库建表
    • 3.3 创建实体
    • 3.4 编写数据库操作业务接口
    • 3.5 编写数据库操作业务实现类
    • 3.6 编写Controller
    • 3.7 Postman测试RESTful 接口
  • 四、SpringBoot 整合Mybatis 操作数据库
    • 4.1 SpringBoot 开启Mybatis支持
    • 4.2 修改SpringBoot配置文件application.yml
    • 4.3 创建实体bean User
    • 4.4 创建Dao接口,使用mybatis注解
    • 4.5 创建Service接口
    • 4.6 创建Service实现类
    • 4.7 创建 Controller UserController
    • 4.8 修改SpringBoot程序主启动类,增加扫描dao接口
    • 4.9 Postman测试RESTful接口

一、SpringBoot 构建RESTful API

1.1 RESTful介绍

RESTful是一种软件架构风格!
REST就是指对同一个URI的资源的不同请求方式(GET,POST,PUT,DELETE)(表述)下的做出的不同的操作(查,增,改,删),改变的是资源的状态,即表述性状态转移。 一个符合REST风格的URI就可以称之一个RESTful的接口

1.2 RESTful接口设计

在此我们以用户数据的基本操作来进行接口设计

HTTP协议请求方法SpringBoot注解URL功能说明
POST@PostMapping/users/ 创建一个用户
GET@GetMapping/users/ 查询用户列表
GET@GetMapping/users/id根据id查询一个用户
PUT@PutMapping/users/id根据id更新一个用户
DELETE@DeleteMapping/users/id根据id删除一个用户

创建项目 spring-restful 如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改版本:

在这里插入图片描述

1.3 用户实体bean创建 User

在这里插入图片描述

package com.gansu.pojo;

import java.io.Serializable;

public class User implements Serializable {

    private Integer id;
    private String name;

    private Integer age;

    public User() {
    }

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

1.4 创建Controller UserController

在这里插入图片描述

package com.gansu.controller;


import com.gansu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    private List<User> userList = Collections.synchronizedList(new ArrayList<User>()); //为了代替数据库,存数据


    /**
     * 添加用户(form-data 格式添加)
     * @param user
     * @return
     */
    @PostMapping("/addUser")
    public String addUser(User user){

        userList.add(user);

        return "addUser-ok";
    }

    /**
     * 添加用户(json格式添加)
     * @param user
     * @return
     */
    @PostMapping("/addUser")
    public String addUser(@RequestBody User user){

        userList.add(user);

        return "addUser-ok";
    }


    /**
     * 查询所有用户
     * @param user
     * @return
     */
    @GetMapping("/getUserAll")
    public List<User> getUserAll(User user){
        return userList;
    }


    /**
     * 通过id查询用户
     * @param
     * @return
     */
    @GetMapping("/getUserById/{id}")
    public User getUserById(@PathVariable("id") Integer id){

        for (User user : userList) {

            if(user.getId().longValue() == id.longValue()){

               return user;
            }
        }
        return null;
    }



    /**
     * 通过id修改用户(form-data 形式修改)
     * @param user
     * @return
     */
    @PutMapping("/updateUserById/{id}")
    public String updateUserById(@PathVariable("id") Integer id,User user){

        for (User user1 : userList) {

            if(user1.getId().longValue() == id.longValue()){

                user1.setName(user.getName());

                user1.setAge(user.getAge());
            }

        }
        return "update-ok";
    }


 /**
     * 通过id修改用户(json形式修改)
     * @param user
     * @return
     */
    @PutMapping("/updateUserById/{id}")
    public String updateUserById(@PathVariable("id") Integer id,@RequestBody User user){

        for (User user1 : userList) {

            if(user1.getId().longValue() == id.longValue()){

                user1.setName(user.getName());

                user1.setAge(user.getAge());
            }

        }
        return "update-ok";
    }



    /**
     * 通过id删除用户
     * @param
     * @return
     */
    @DeleteMapping("/deleteUserById/{id}")
    public String deleteUserById(@PathVariable("id") Integer id){

        userList.remove(getUserById(id));

        return "delete-ok";
    }

}

1.5 Postman 测试RESTful 接口

新增结果显示:http://localhost:8080/user/addUser

在这里插入图片描述

在这里插入图片描述

查询所有结果显示:http://localhost:8080/user/getUserAll

在这里插入图片描述

根据Id查询用户:http://localhost:8080/user/getUserById/1002

在这里插入图片描述

根据Id 更新用户:http://localhost:8080/user/updateUserById/1002

在这里插入图片描述

在这里插入图片描述
json格式修改
在这里插入图片描述

根据 Id 删除用户 http://localhost:8080/user/deleteUserById/1003

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、SpringBoot 使用Swagger2 构建API文档

2.1 Swagger2介绍

编写和维护接口文档是每个程序员的职责,前面我们已经写好的接口
现在需要提供一份文档,这样才能方便调用者使用。
考虑到编写接口文档是一个非常枯燥的工作,我们采用Swagger2这套自动化文档工具来生成文档,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。

在这里插入图片描述

2.2 SpringBoot 开启 Swagger2支持

第一步:在pom.xml中加入Swagger2的依赖

在这里插入图片描述

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

第二步:创建 Swagger2 配置类

在这里插入图片描述

package com.gansu.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.gansu.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot中使用Swagger2构建RESTful APIs")
                .description("甘中甘")
                .termsOfServiceUrl("https:www.baidu.com")
                .contact("Sunny")
                .version("1.0")
                .build();
    }
}

2.3 修改 Controller 增加文档注释

通过@Api 给类增加说明
通过@ApiOperation注解来给方法增加说明

通过

@ApiImplicitParams

@ApiImplicitParam

注解来给参数增加说明

在这里插入图片描述

package com.gansu.controller;


import com.gansu.pojo.User;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    private List<User> userList = Collections.synchronizedList(new ArrayList<User>()); //为了代替数据库,存数据


    /**
     * 添加用户
     * @param user
     * @return
     */
    @PostMapping("/addUser")
    @ApiOperation(value="增加用户", notes="增加用户信息")
    public String addUser(@RequestBody  User user){

        userList.add(user);

        return "addUser-ok";
    }



    /**
     * 查询所有用户
     * @param
     * @return
     */
    @GetMapping("/getUserAll")
    @ResponseBody
    @ApiOperation(value="查询所有用户", notes="查询所有用户信息")
    public List<User> getUserAll(){
        return userList;
    }


    /**
     * 通过id添加用户
     * @param
     * @return
     */
    @GetMapping("/getUserById/{id}")
    @ApiOperation(value="通过用户id查询用户", notes="通过用户id查询用户信息")
    public User getUserById(@PathVariable("id") Integer id){

        for (User user : userList) {

            if(user.getId().longValue() == id.longValue()){

               return user;
            }
        }
        return null;
    }



    /**
     * 通过id修改用户
     * @param user
     * @return
     */

    @ApiOperation(value="更新指定id用户信息", notes="根据id更新用户信息")
    @PutMapping("/updateUserById/{id}")
    public String updateUserById(@PathVariable("id") Integer id,@RequestBody  User user){

        for (User user1 : userList) {

            if(user1.getId().longValue() == id.longValue()){

                user1.setName(user.getName());

                user1.setAge(user.getAge());
            }

        }
        return "update-ok";
    }



    /**
     * 通过id删除用户
     * @param
     * @return
     */
    @DeleteMapping("/deleteUserById/{id}")
    @ApiOperation(value="根据用户id删除用户", notes="根据用户id删除用户信息")
    public String deleteUserById(@PathVariable("id") Integer id){

        userList.remove(getUserById(id));

        return "delete-ok";
    }

}

2.4 查看Swagger2文档

重启应用
访问地址:http://localhost:8080/swagger-ui.html

在这里插入图片描述

点开每个接口,可以查看接口详情

在这里插入图片描述

操作:

在这里插入图片描述

三、SpringBoot Jdbc 操作数据库

3.1 SpringBoot 开启jdbc支持

刚才我编写完成了针对用户数据的 RESTful API,但是我们是用集合模拟的数据,在实际工作过程中需要把数据存储到数据库中,接下来完成SpringBoot针对数据库的基本操作

创建项目:spring-jdbc

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

坐下修改:增加系统数据库匹配的连接池及其版本

在这里插入图片描述

  • (1)为了让SpringBoot支持jdbc数据操作,需要修改pom.xml
    增加所需的依赖上面创建的时候已经生成了
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
  • (2) jdbc连接数据驱动(本次总结采用MySQL数据库),需要修改pom.xml
    增加所需的依赖上面创建的时候已经生成了

注意:因为我电脑上数据库版本比较老,所以这里找了个低版本的连接池

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

最后修改src/main/resources/application.yml中配置数据源信息

在这里插入图片描述

#数据库jdbc连接url地址,serverTimezone设置数据库时区东八区
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8
    driver-class-name: com.mysql.jdbc.Driver

3.2 数据库建表

在这里插入图片描述

3.3 创建实体

在这里插入图片描述

package com.gansu.pojo;

import java.io.Serializable;

public class User implements Serializable {

    private Integer id;
    private String name;
    private Integer age;

    public User() {
    }

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3.4 编写数据库操作业务接口

在这里插入图片描述

package com.gansu.service;

import com.gansu.pojo.User;

import java.util.List;

public interface UserService {

    public void addUser(User user);

    public List<User> getUserAll();

    public User getUserById(Integer id);

    public void updateUserById(Integer id,User user);

    public void deleteUserById(Integer id);
}

3.5 编写数据库操作业务实现类

在这里插入图片描述

package com.gansu.service.impl;

import com.gansu.pojo.User;
import com.gansu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void addUser(User user) {

        jdbcTemplate.update("insert into user " +
                "(id,name,age) values (null ,?,?)",user.getName(),user.getAge());
    }

    @Override
    public List<User> getUserAll() {
        return jdbcTemplate.query("select * from user",
                new BeanPropertyRowMapper<>(User.class));
    }

    @Override
    public User getUserById(Integer id) {
        return jdbcTemplate.queryForObject("select * from user where id=?",
                new BeanPropertyRowMapper<>(User.class),id);
    }

    @Override
    public void updateUserById(Integer id, User user) {

        jdbcTemplate.update("update user set name=?,age=? where id=?",
                user.getName(),user.getAge(),id);
    }

    @Override
    public void deleteUserById(Integer id) {

        jdbcTemplate.update("delete from user where id = ?",id);

    }
}

3.6 编写Controller

在这里插入图片描述

package com.gansu.controller;


import com.gansu.pojo.User;
import com.gansu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/addUser")
    public String addUser(@RequestBody  User user){

        userService.addUser(user);

        return "addUser-ok";
    }


    @GetMapping("/getUserAll")
    public List<User> getUserAll(){

        return  userService.getUserAll();
    }

    @GetMapping("/getUserById/{id}")
    public User getUserById(@PathVariable("id") Integer id){

        return   userService.getUserById(id);
    }

    @PutMapping("/updateUserById/{id}")
    public String updateUserById(@PathVariable("id") Integer id,@RequestBody  User user){

        userService.updateUserById(id,user);

        return "update-ok";
    }

    @DeleteMapping("/deleteUserById/{id}")
    public String deleteUserById(@PathVariable("id") Integer id){

        userService.deleteUserById(id);

        return "delete-ok";
    }
}

3.7 Postman测试RESTful 接口

新增:http://localhost:8080/user/addUser

在这里插入图片描述

查询所有:http://localhost:8080/user/getUserAll

在这里插入图片描述

根据id查询:http://localhost:8080/user/getUserById/4

在这里插入图片描述

根据id修改:http://localhost:8080/user/updateUserById/2

在这里插入图片描述

根据 Id删除: http://localhost:8080/user/deleteUserById/3

在这里插入图片描述

四、SpringBoot 整合Mybatis 操作数据库

创建项目:springboot-mybatis

在这里插入图片描述
在这里插入图片描述

降低版本:

在这里插入图片描述

4.1 SpringBoot 开启Mybatis支持

添加Mybatis起步依赖以及mysqljdbc驱动、连接池druid驱动

在这里插入图片描述

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

4.2 修改SpringBoot配置文件application.yml

参考前面

在这里插入图片描述

#数据库jdbc连接url地址,serverTimezone设置数据库时区东八区
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8
    driver-class-name: com.mysql.jdbc.Driver

4.3 创建实体bean User

拷贝前面(3.3) User

4.4 创建Dao接口,使用mybatis注解

接口方法拷贝前面(3.4)

最终如下:

在这里插入图片描述

package com.gansu.dao;


import com.gansu.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserDao {

    @Insert("insert into user(name,age) values(#{name},#{age})")
    public void addUser(User user);

    @Select("select * from user")
    public List<User> getUserAll();

    @Select("select * from user where id = #{id}")
    public User getUserById(Integer id);

    @Update("update user set name =#{name},age=#{age} where id = #{id}")
    public void updateUserById(User user);

    @Delete("delete from user where id =#{id}")
    public void deleteUserById(Integer id);
}

4.5 创建Service接口

在这里插入图片描述

package com.gansu.service;

import com.gansu.pojo.User;

import java.util.List;

public interface UserService {

    public void addUser(User user);

    public List<User> getUserAll();

    public User getUserById(Integer id);

    public void updateUserById(Integer id,User user);

    public void deleteUserById(Integer id);
}

4.6 创建Service实现类

在这里插入图片描述

package com.gansu.service.impl;

import com.gansu.dao.UserDao;
import com.gansu.pojo.User;
import com.gansu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void addUser(User user) {

        userDao.addUser(user);
    }

    @Override
    public List<User> getUserAll() {
        return userDao.getUserAll();
    }

    @Override
    public User getUserById(Integer id) {
        return userDao.getUserById(id);
    }

    @Override
    public void updateUserById(Integer id, User user) {

        user.setId(id);
        userDao.updateUserById(user);
    }

    @Override
    public void deleteUserById(Integer id) {

        userDao.deleteUserById(id);
    }
}

4.7 创建 Controller UserController

拷贝前面(3.6) UserController

4.8 修改SpringBoot程序主启动类,增加扫描dao接口

在这里插入图片描述

@MapperScan("com.gansu.dao")

4.9 Postman测试RESTful接口

与3.7一样

文章所有源码

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

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

相关文章

2020年 - 2022年 上市公司-劳动投资效率数据(原始数据、代码do文件、参考文献、最终结果)

劳动投资效率概述 劳动投资效率是衡量企业在人力资源管理方面效果和效率的关键指标。它关注企业在劳动力投资上的效益&#xff0c;即企业对于人力资源的投入与产出之间的比率。这一指标对于评估企业的人力资源管理策略及其对企业绩效的影响至关重要。 劳动投资效率的测度指标…

【Golang 面试 - 基础题】每日 5 题(八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

Redis快速入门基础

Redis入门 Redis是一个基于内存的 key-value 结构数据库。mysql是二维表的接口数据库 优点&#xff1a; 基于内存存储&#xff0c;读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ Redis下载与…

带你学会Git必会操作

文章目录 带你学会Git必会操作1Git的安装2.Git基本操作2.1本地仓库的创建2.2配置本地仓库 3.认识一些Git的基本概念3.1操作流程&#xff1a; 4.一些使用场景4.1添加文件场景一4.2查看git文件4.3修改文件4.4Git版本回退4.5git撤销修改 5.分支管理5.1查看分支5.2创建本地分支5.3切…

功能实现——使用 OpenPDF 将 HTML 转换为 PDF,并将其上传到 FTP 服务器

目录 1.需求分析2.项目环境搭建3.将 HTML 转换为 PDF3.1.代码实现mail.htmlHtmlToPDFController.javaPDFConverterService.javaPDFConverterServiceImpl.java 3.2.测试3.3.注意事项 4.将生成的 PDF 上传到 FTP 服务器4.1.搭建 FTP 服务器4.2.配置文件4.3.代码实现FtpUtil.javaF…

PostgreSQL性能优化之体系结构

本文介绍 PostgreSQL 数据库的体系结构&#xff0c;包括实例结构&#xff08;进程与内存&#xff09;、存储结构&#xff08;物理与逻辑&#xff09;以及插件式存储引擎。 实例与数据库聚簇 PostgreSQL 使用典型的客户端/服务器&#xff08;Client/Server&#xff09;架构&am…

【Android】Fragment的添加

上一篇文章学到了碎片的创建与生命周期&#xff0c;接下来学习碎片的常用操作&#xff0c;其中会用到上一篇文章的三个碎片&#xff0c;就做一个简单的说明吧&#xff1a;LeftFragment&#xff08;包含一个按钮&#xff09;、RightFragment4&#xff08;以粉色为背景的文本&…

【人工智能】穿越科技迷雾:解锁人工智能、机器学习与深度学习的奥秘之旅

文章目录 前言一、人工智能1. 人工智能概述a.人工智能、机器学习和深度学习b.人工智能发展必备三要素c.小案例 2.人工智能发展历程a.人工智能的起源b.发展历程 3.人工智能的主要分支 二、机器学习1.机器学习工作流程a.什么是机器学习b.机器学习工作流程c.特征工程 2.机器学习算…

动手学深度学习V2每日笔记(模型选择+过拟合和欠拟合)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&a…

Java之归并排序

归并排序 归并排序(Merge Sort)算法&#xff0c;使用的是分治思想。分治&#xff0c;顾名思义&#xff0c;就是分而治之&#xff0c;将一个大问题分解成小的子问题来解决。小的子问题解决了&#xff0c;大问题也就解决了。 核心源码: mergeSort(m->n) merge(mergeSort(m-&g…

对于500强企业来说,有比FTP好用的传输工具吗?

500强企业在进行文件传输时&#xff0c;会根据其业务需求、数据安全性要求以及技术架构的不同&#xff0c;选择多种文件传输方式&#xff0c;最常见的便是FTP。然而FTP在使用却存在较多的问题&#xff1a; 1&#xff09;安全性问题 缺乏安全策略&#xff1a;FTP本身不提供加密…

「百年孤独」

引言 《百年孤独》是加西亚马尔克斯创作的魔幻现实主义经典小说&#xff0c;刻画了布恩迪亚家族七代人的跌宕起伏和马孔多小镇的兴衰。是拉丁美洲文学中一部不朽的杰作。 故事概述 小说从布恩迪亚家族的始祖荷塞阿卡迪奥布恩迪亚和妻子乌尔苏拉开始&#xff0c;讲述了七代人…

DeiT III(Meta)论文解读

paper&#xff1a;DeiT III: Revenge of the ViT official implementation&#xff1a;https://github.com/facebookresearch/deit 出发点 本研究旨在重新审视ViT的监督训练方法&#xff0c;并提出一种基于ResNet-50训练方法的简化版新训练策略。与现有的自动数据增强方法不…

C++从入门到起飞之——友元内部类匿名对象对象拷贝时的编译器优化 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、友元 2、内部类 3、 匿名对象 4、对象拷⻉时的编译器优化 5、完结散花 1、友元 • 友元提供…

springAOP理解及事务

AOP&#xff1a; springAOP是什么&#xff1a; AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程。 使用场景&#xff1a; 比如你想统计业务中每个方法的执行耗时&#xff0c;那我们最…

基于bert的自动对对联系统

目录 概述 演示效果 核心逻辑 使用方式 1.裁剪数据集 根据自己的需要选择 2.用couplet数据集训练模型 模型存储在model文件夹中 3.将模型转换为ONNX格式 4.打开index.html就可以在前端使用此自动对对联系统了。 本文所涉及所有资源均在传知代码平台可获取。 概述 这个生成器利用…

什么是婚恋聊天交友源码?今天大家讲解一下。源码交付,支持二开,可打包APP小程序H5。

婚恋交友APP开发前景 对于现代的年轻人来说&#xff0c;社恐已经是深入骨子里不可别除的&#xff0c;除了每天上班下班&#xff0c;许多人宁愿宅在家里&#xff0c;面对线下的相亲机构&#xff0c;家里长辈介绍的会都是饭度抗柜的。而这几年疫情的影响更是大大的限制了正常的社…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

7. 运行时数据区-栈

栈的分类 栈分为Java虚拟机栈还有本地方法栈&#xff1a; Java虚拟机栈&#xff1a;用于保存Java中的方法相关的内容本地方法栈&#xff1a;用于保存在Java中使用native 标记的用C来实现方法 由于hotspot的作者发现使用一个栈就可以保存以上两个部分的内容&#xff0c;所以在…

图像生成中图像质量评估指标—PSNR的详细介绍

文章目录 1. 背景介绍2. 实际应用3. 总结和讨论 1. 背景介绍 峰值信噪比&#xff08;Peak Signal-to-Noise Ratio&#xff0c;简称PSNR&#xff09;是一种广泛应用于图像和视频处理领域的客观图像质量评价指标。它主要用于衡量图像的噪声水平和图像质量&#xff0c;可以用来评…