4.【SpringBoot3】文章管理接口开发

news2024/11/17 0:01:35

序言

在文章管理模块,有以下接口需要开发:

  • 新增文章
  • 文章列表(条件分页)
  • 获取文章详情
  • 更新文章
  • 删除文章

数据库表字段和实体类属性:

在这里插入图片描述

1. 新增文章

需求分析

当用户点击左侧菜单中的“文章管理”后,页面主区域展示该用户的所有文章列表:

在这里插入图片描述

页面右上角有“发布文章”按钮,当用户点击该按钮后会弹出一个抽屉式界面,里面有一个表单,用户需要填写“文章标题”、“文章分类”,选择文章封面,编辑文章内容。最后点击“发布”或“草稿”按钮,以访问后台接口完成文章的新增。

在这里插入图片描述

接口文档

在这里插入图片描述

1.1 新增文章基本代码编写

接口实现思路

Controller 中用于新增文章的方法参数需要接收请求体中 json 格式的数据,所以添加 @RequestBody 注解。方法内部调用 Service 层的方法完成新增文章,Mapper 层执行相应的 SQL。
在这里插入图片描述

根据前几篇文章的知识,可以写出该部分的基本逻辑,并且对 Article 实体类中除 state 之外的属性进行参数校验:

(1) Controller

//新增文章
@PostMapping
public Result add(@RequestBody @Validated Article article){
    articleService.add(article);
    return Result.success();
}

(2) Service

//Service接口中
//新增文章
void add(Article article);

//Service实现类中
//新增文章
@Override
public void add(Article article) {
    article.setCreateTime(LocalDateTime.now());
    article.setUpdateTime(LocalDateTime.now());
    Map<String, Object> map =  ThreadLocalUtil.get();
    Integer userId = (Integer) map.get("id");
    article.setCreateUser(userId);
    articleMapper.add(article);
}

(3) Mapper

//新增文章
@Insert("insert into article(title, content, cover_img, state, category_id, create_user, create_time, update_time) " +
        "values(#{title}, #{content}, #{coverImg}, #{state}, #{categoryId}, #{createUser}, #{createTime}, #{updateTime})")
void add(Article article);

(4) Article 实体类

@Data
public class Article {
    private Integer id;//主键ID
    @NotEmpty
    @Pattern(regexp = "^\\S{1,10}$")
    private String title;//文章标题
    @NotEmpty
    private String content;//文章内容
    @NotEmpty
    @URL
    private String coverImg;//封面图像在服务器上的地址
    private String state;//发布状态 已发布|草稿
    @NotNull
    private Integer categoryId;//文章所属的分类id
    private Integer createUser;//创建人id,用户只能操作自己创建的文章
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}

postman 测试:

在这里插入图片描述

在这里插入图片描述

1.2 Validation 自定义校验

对于 Article 实体类中的 state 属性,前面所学的知识已经不能完成对它的校验了。此时,需要借助 Validation 完成自定义校验。用自定义注解完成 state 属性校验的过程如下:

  • 自定义注解
    自定义的注解有要求,里面必须提供三个属性 message、groups、Payload,定义好该注解后,将来就用它来完成 Article 实体类中 state 属性的校验
  • 自定义校验数据的类 StateValidation 实现 ConstraintValidator 接口
  • 在需要校验的地方使用自定义注解

(1) 自定义注解

新建注解:

在这里插入图片描述

在这里插入图片描述

注解文件中的内容不会写怎么办?打开一个现成的照着写。比如 @NotNull:

在这里插入图片描述

NotNull 上组合了一些注解,内部有三个必要的属性,先复制过来,并改动一下:

@Documented//元注解,标识当前注解将来可以被抽取到帮助文档中
@Target({ElementType.FIELD})//元注解,标识当前注解将来可以用在哪些地方:类、属性(FIELD)、方法、参数
@Retention(RetentionPolicy.RUNTIME)//元注解,标识当前注解保留到哪个阶段:源码阶段、编译阶段、运行阶段
@Constraint(validatedBy = {StateValidation.class})//指定为该注解提供校验规则的类
// @Repeatable(NotEmpty.List.class)//不需要
public @interface State {
    //提供校验失败后的提示信息
    String message() default "state参数的值只能是已发布或者草稿";

    //指定分组
    Class<?>[] groups() default {};

    //负载,用于获取当前注解的附加信息
    //虽然该属性是必须的,但一般用不到,所以可以先不关注
    Class<? extends Payload>[] payload() default {};
}

(2) 自定义校验数据的类

在这里插入图片描述

//ConstraintValidator<给哪个注解提供校验规则,校验的数据类型>
public class StateValidation implements ConstraintValidator<State,String> {
    /**
     *
     * @param s:将来要校验的数据
     * @param context
     * @return 返回true校验通过,返回false校验不通过
     */
    @Override
    public boolean isValid(String s, ConstraintValidatorContext context) {
        //提供校验规则
        if (s == null){
            return false;
        }
        if (s.equals("已发布") || s.equals("草稿")){
            return true;
        }
        //其他情况都校验不通过:空串、其他不符合要求的字符串
        return false;
    }
}

String s = null 表示声明了字符串变量 s,但是未赋值(s 并未指向一个地址),调用 equals 函数会触发空指针异常,因为没有什么可以比较的数据。
String s = "" 表示声明了字符串变量 s,且赋值为空串(s 指向了一个地址,虽然这个地址没什么东西),s.equals(“”) 的结果为 true。

(3) 使用自定义的 State 注解

在这里插入图片描述

postman 测试:

state 不传入或传入的不是“已发布”或“草稿”,测试不通过:

在这里插入图片描述

state 传入“已发布”或“草稿”,测试通过:

在这里插入图片描述

在这里插入图片描述

2. 文章列表(条件分页)

需求分析

当用户点击左侧菜单中的“文章管理”后,页面主区域会以列表形式展示该用户已创建的文章信息,用户还可以根据文章分类和发布状态去搜索文章。页面底部展示了一个分页条,包括总记录数,还有一些可选择项,用户可以在此选择每页展示的条数、当前要查询的页码等。当用户点击了搜索、上一页、下一页、页码,或修改了每页显示的条数后,都需要访问后台接口,以查询满足条件的当前页数据,最终在列表中展示。

在这里插入图片描述

接口文档

在这里插入图片描述
接口实现思路

在 Controller 层,用于获取文章列表的 list() 方法返回值类型是 Result<PageBean<Article>> ,即:在响应给浏览器的结果中,data 属性的类型是PageBean<Article>。其中,PageBean 是一个自定义的类,用于封装分页查询结果,该类中至少包含 total(总条数) 和 items(当前页面的数据集合) 两个属性,将来后台经过一顿操作,将查询好的数据封装到 PageBean 对象中,响应给浏览器的格式就能满足接口文档的要求了。

在这里插入图片描述

在这里插入图片描述

另外,接口文档中注明了categoryId 和 state 不是必须的,所以前端可以不传这两个参数,因此后端方法对应的参数上要用 @RequestParam(required = false) 注解。

在这里插入图片描述

然后,在方法内部,调用 Service 中的方法完成查询就可以了。Service 层的方法内部首先要构建一个 PageBean 对象来封装查询到的数据,然后借助 mybatis 提供的 PageHelper 插件完成分页查询。要想利用 PageHelper 完成分页查询,只需在调用 Mapper 层的方法执行 SQL 之前开启分页查询即可。

在这里插入图片描述

Mapper 层也需要声明对应的方法来执行 SQL。但是要注意,现在的任务是条件搜索,对于某些条件,前端有可能传,也有可能不传,于是就需要用 mybatis 的动态 SQL 技术来编写 SQL。写动态 SQL 使用 mapper 映射配置文件比较方便,因此还需要创建 mapper 映射配置文件。

在这里插入图片描述

代码实现

导入 PageHelper 坐标

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.4.6</version>
</dependency>

PageBean 实体类

//分页返回结果对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean <T>{
    private Long total;//总条数
    private List<T> items;//当前页数据集合
}

Controller 层:

//文章列表(条件分页)
@GetMapping
public Result<PageBean<Article>> list(
        Integer pageNum,
        Integer pageSize,
        @RequestParam(required = false) String categoryId,
        @RequestParam(required = false) String state
){
    PageBean<Article> pg = articleService.list(pageNum, pageSize, categoryId, state);
    return Result.success(pg);
}

Service 层:

//ArticleService接口
//文章列表(条件分页)
PageBean<Article> list(Integer pageNum, Integer pageSize, String categoryId, String state);

//ArticleService实现类
//文章列表(条件分页)
@Override
public PageBean<Article> list(Integer pageNum, Integer pageSize, String categoryId, String state) {
    //创建PageBean对象
    PageBean<Article> pb = new PageBean<>();
    //开启分页查询
    PageHelper.startPage(pageNum, pageSize);
    //调用mapper完成查询
    Map<String,Object> map = ThreadLocalUtil.get();
    Integer userId = (Integer) map.get("id");
    //看下面关于参数的解释
    List<Article> al = articleMapper.list(userId, categoryId, state);
    //Page提供了方法,可以获取PageHelper分页查询后得到的总记录数和当前页数据
    //多态的特性,如果不强转,不允许父类对象调用子类中独有方法
    Page<Article> ap = (Page<Article>) al;
    //把数据填充到PageBean对象中
    pb.setTotal(ap.getTotal());
    pb.setItems(ap.getResult());
    return pb;
}

在调用 Mapper 层接口完成查询时,需要传递哪些参数?首先,文章所属的分类 categoryId、发布状态 state 两个条件肯定要传入。当前页码 pageNum 和每页条数 pageSize 是不需要传的,因为有了 PageHelper 后,它会自动将 pageNum 和 pageSize 拼接到 SQL 后面,加上一个 limit,从而完成分页查询。那么除了这两个条件之外,还需要其他参数吗?Article 实体类中有个 createUser,用于限制用户只操作自己创建的文章。因此,还要传递一个当前用户的 id 作为参数。

Mapper 层:

不建议直接在方法上用注解写动态 SQL,因为会非常麻烦。此处使用映射配置文件实现动态 SQL,下面首先准备映射设配置文件:

在 resources 下创建与 mapper 接口所在包结构相同的目录文件夹,新建映射配置文件,该映射配置文件必须与对应接口处在同一目录下,同时文件名称与对应接口一致。

在这里插入图片描述

ArticleMapper.java

//文章列表(条件分页)
List<Article> list(Integer userId, String categoryId, String state);

ArticleMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--名称空间的值必须是对应接口的全类名 输入ArticleMapper后,再Alt+Ctrl+空格会有提示-->
<mapper namespace="com.itheima.mapper.ArticleMapper">
    <!--编写动态SQL-->

    <!--id是mapper中对应方法的名称-->
    <!--多条数据对应的实体类类型-->
    <select id="list" resultType="com.itheima.pojo.Article">
        select * from article
        # where标签的好处:如果有条件就加where关键字,否则不加,并且还可以去掉第一个条件前面的and
        # 对条件参数进行判断,id一定存在,所以不用判断
        <where>
            <if test="categoryId!=null">
                category_id=#{categoryId}
            </if>

            <if test="state!=null">
                and state=#{state}
            </if>
            and create_user=#{userId}
        </where>
    </select>
    
</mapper>

注意:在 where 标签内部写注释会导致它不能去掉第一个条件前面的 and。

数据库中现有的文章数据:

在这里插入图片描述

postman 测试:

查询已登录用户的所有文章,每页展示 3 条数据,展示第 1 页:

在这里插入图片描述

{
    "code": 0,
    "message": "操作成功",
    "data": {
        "total": 4,
        "items": [
            {
                "id": 1,
                "title": "长沙旅游攻略",
                "content": "天安门...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "已发布",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T19:24:03",
                "updateTime": "2024-01-23T19:24:03"
            },
            {
                "id": 2,
                "title": "北京旅游攻略",
                "content": "天安门...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "已发布",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T20:35:13",
                "updateTime": "2024-01-23T20:35:13"
            },
            {
                "id": 3,
                "title": "湖南旅游攻略",
                "content": "岳麓山...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "草稿",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T20:38:11",
                "updateTime": "2024-01-23T20:38:11"
            }
        ]
    }
}

查询已登录用户的所有文章,每页展示 3 条数据,展示第 2 页:

在这里插入图片描述

{
    "code": 0,
    "message": "操作成功",
    "data": {
        "total": 4,
        "items": [
            {
                "id": 4,
                "title": "日本核污水排放",
                "content": "此处省略10000个字...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "已发布",
                "categoryId": 5,
                "createUser": 3,
                "createTime": "2024-01-24T00:54:04",
                "updateTime": "2024-01-24T00:54:04"
            }
        ]
    }
}

查询已登录用户的类别 id 为 9 的文章,每页展示 3 条数据,展示第 1 页:

在这里插入图片描述

{
    "code": 0,
    "message": "操作成功",
    "data": {
        "total": 3,
        "items": [
            {
                "id": 1,
                "title": "长沙旅游攻略",
                "content": "天安门...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "已发布",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T19:24:03",
                "updateTime": "2024-01-23T19:24:03"
            },
            {
                "id": 2,
                "title": "北京旅游攻略",
                "content": "天安门...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "已发布",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T20:35:13",
                "updateTime": "2024-01-23T20:35:13"
            },
            {
                "id": 3,
                "title": "湖南旅游攻略",
                "content": "岳麓山...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "草稿",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T20:38:11",
                "updateTime": "2024-01-23T20:38:11"
            }
        ]
    }
}

查询已登录用户的类别 id 为 9、且已发布的文章,每页展示 3 条数据,展示第 1 页:

在这里插入图片描述

{
    "code": 0,
    "message": "操作成功",
    "data": {
        "total": 2,
        "items": [
            {
                "id": 1,
                "title": "长沙旅游攻略",
                "content": "天安门...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "已发布",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T19:24:03",
                "updateTime": "2024-01-23T19:24:03"
            },
            {
                "id": 2,
                "title": "北京旅游攻略",
                "content": "天安门...爱去哪去哪...",
                "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
                "state": "已发布",
                "categoryId": 9,
                "createUser": 3,
                "createTime": "2024-01-23T20:35:13",
                "updateTime": "2024-01-23T20:35:13"
            }
        ]
    }
}

对于后面的接口,由于所涉及的知识前面都介绍过了,所以只根据接口文档编写代码,不再过多分析。

3. 获取文章详情

接口文档

在这里插入图片描述
Controller 中:

//获取文章详情
@GetMapping("/detail")
public Result<Article> detail(Integer id){
    Article article = articleService.detail(id);
    return Result.success(article);
}

Service 中:

//Service接口
//获取文章详情
Article detail(Integer id);

//Service实现类
//获取文章详情
@Override
public Article detail(Integer id) {
    Article article = articleMapper.detail(id);
    return article;
}

Mapper 中:

//获取文章详情
@Select("select * from article where id=#{id}")
Article detail(Integer id);

postman 测试:

在这里插入图片描述

{
    "code": 0,
    "message": "操作成功",
    "data": {
        "id": 3,
        "title": "湖南旅游攻略",
        "content": "岳麓山...爱去哪去哪...",
        "coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png",
        "state": "草稿",
        "categoryId": 9,
        "createUser": 3,
        "createTime": "2024-01-23T20:38:11",
        "updateTime": "2024-01-23T20:38:11"
    }
}

4. 更新文章

接口文档

在这里插入图片描述
Controller 中:

//更新文章
@PutMapping
public Result update(@RequestBody @Validated(Article.Update.class) Article article){
    articleService.update(article);
    return Result.success();
}

Service 中:

//Service接口
//更新文章
void update(Article article);

//Service实现类
//更新文章
@Override
public void update(Article article) {
    article.setUpdateTime(LocalDateTime.now());
    Map<String,Object> map = ThreadLocalUtil.get();
    Integer userId = (Integer) map.get("id");
    article.setCreateUser(userId);
    articleMapper.update(article);
}

Mapper 中:

//更新文章
@Update("update article set title=#{title}, content=#{content}, cover_img=#{coverImg}, " +
        "state=#{state}, category_id=#{categoryId}, create_user=#{createUser}, update_time=#{updateTime} " +
        "where id=#{id}")
void update(Article article);

postman 测试:

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

5. 删除文章

接口文档

在这里插入图片描述
Controller 中:

//删除文章
@DeleteMapping
public Result delete(Integer id){
    articleService.delete(id);
    return Result.success();
}

Service 中:

//Service接口
//删除文章
void delete(Integer id);

//Service实现类
//删除文章
@Override
public void delete(Integer id) {
    articleMapper.delete(id);
}

Mapper 中:

//删除文章
@Delete("delete from article where id=#{id}")
void delete(Integer id);

postman 测试:

在这里插入图片描述

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

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

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

相关文章

apk加固后,签名后没有V2签名的,targetsdk版本改为30后报字节没有对齐的

当我吧targetsdk版本改为30后,加固后重新签名发现,安装不上报错 adb: failed to install E:\XX\262_rel.apk: Failure [-124: Failed parse during installPackageLI: Targeting R (version 30 and above) requires the resources.arsc of installed APKs to be stored uncomp…

全桥变压器计算1

一共有两级&#xff0c;先DC升压&#xff0c;后H桥逆变为AC 因为两级都有损耗&#xff0c;所以一般用输入功率计算 电池升压到400V高压用的效率用表示&#xff0c;后面DC转AC的效率用表示&#xff0c;输入电压用Vin&#xff0c;输出功率Po2000W,输入功率为Pin 一般和96% 所…

叩开c++的大门

目录 1. 什么是c&#xff1f; 2. c的发展史 3. c和c语言的区别是什么呢&#xff1f; 4. 接下来让我们正式进入c的学习吧。 4.1 c的关键字 4.2 命名空间 4.2.1 命名空间的定义 4.2.2 命名空间的使用 4.3 c的输入输出 std命名空间的使用惯例std是C标准库的命名空间&…

深入《羊了个羊》:从0到1的消除游戏开发

一、游戏简介 《羊了个羊》是一款备受欢迎的消除类游戏。玩家需要通过交换相邻的方块&#xff0c;使三个或更多相同方块连成一线&#xff0c;从而将它们消除。消除方块可以获得分数&#xff0c;并在全球排行榜上与其他玩家竞争。 设置项目结构 首先&#xff0c;在文本编辑器中…

【数据结构与算法】之字符串系列-20240126

这里写目录标题 一、12. 整数转罗马数字二、43. 字符串相乘三、49. 字母异位词分组四、151. 反转字符串中的单词五、179. 最大数 一、12. 整数转罗马数字 中等 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D …

前端vue集成echarts图形报表样例

文章目录 &#x1f412;个人主页&#x1f3c5;Vue项目常用组件模板仓库&#x1f4d6;前言&#xff1a;&#x1f415;1.在项目终端下载echarts依赖包&#x1f3e8;2.在main.js中导入echarts资源包并使用&#x1f380;3.在.vue文件中直接使用echarts&#xff0c;下面是一个样例&a…

计算机找不到x3daudio1_7.dll无法继续执行的5种解决方法

当我们在运行一款游戏时&#xff0c;遇到了“游戏找不到x3daudio1_7.dll”这样的错误提示&#xff0c;并因此无法继续执行游戏进程&#xff0c;这种情况具体是什么问题呢&#xff1f;我们可以深入解析一下。通常情况下&#xff0c;这种报错信息意味着系统缺失了一个关键的动态链…

144基于matlab的平面桁架结构的总体刚度矩阵计算

基于matlab的平面桁架结构的总体刚度矩阵计算&#xff0c;最后以图形形式显示出桁架结构&#xff0c;程序已调通&#xff0c;可直接运行。 144matlab 平面桁架 有限元分析 总体刚度 (xiaohongshu.com)

华为鸿蒙扩圈何时才会停息~

自从2023年华为秋季发布会上宣布鸿蒙Next不在兼容Android后&#xff0c;鸿蒙才开始扩圈行动&#xff0c;直到2024年1月18日鸿蒙千帆启航的仪式上宣布已有200鸿蒙原生态应用正在加速开发中&#xff0c;并且宣布启动了第二阶段的扩圈行动。 就1月25日就有多家银行和淘宝等支付平台…

Grafana loki配置, 无脑版

使用docker部署Grafana loki 1.创建 docker-compose.yml 文件 touch docker-compose.yml写入以下内容 vim touch docker-compose.yml version: "3"networks:loki:services:loki:image: grafana/loki:latestrestart: unless-stoppedports:- "3100:3100"vo…

1.24 C++ day1

思维导图 试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff0c;要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string s;cout << "please enter a str…

设置模式之责任链模式

目录 1.概述 2.结构 3.实现 4.总结 1.概述 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为性设计模式&#xff1b;它为请求创建了一个接收者对象的链&#xff0c;允许你将请求沿着处理者链进行发送。 收到请求后&#xff0c; 每个处理者均…

list的介绍及其模拟实现

今天我们了解list&#xff0c;list在python中是列表的意思 &#xff0c;但是在C中它是一个带头双向循环链表&#xff1a; list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xf…

1.25学习总结

今天学习了二叉树&#xff0c;了解了二叉树的创建和遍历的过程 今天所了解的遍历过程主要分为三种&#xff0c;前序中序和后序&#xff0c;都是DFS的想法 前序遍历&#xff1a;先输出在遍历左节点和右节点&#xff08;输出->左->右&#xff09; 中序遍历&#xff1a;先…

2024传薪文化盛大启航 年度论坛暨新春年会圆满举办

2024年1月20日下午, 由创人文/传薪文化理事会与长三角美好生活创新联盟主办,由传薪文化、九鲲文化承办的“文脉传万象薪”传薪&美创联2024甲辰年度论坛暨新春年会,在上海成功举办。来自学界、文化、经济和艺术等领域的社会精英人士170余人齐聚一堂,从历史和传承中汲取营养,…

elementplus 中 DatePicker 日期选择器样式修改无效

问题 遇到一个需求需要修改 DatePicker 日期选择器的样式&#xff0c;在添加了 scoped 属性的 style 标签&#xff0c;并且使用了 deep 样式穿透的情况下并不能修改其样式。 原因 DatePicker 日期选择器弹出面板默认挂载在 body 上&#xff0c;所以在组件中添加了 scoped 属…

MFC扩展库BCGControlBar Pro v34.0 - 图形管理器功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.0已正式发布了&#xff0c;该版本包括新的主题任务对话框、图像效果、旋转圆形刻度、…

【操作系统】实验六 分析源代码

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Python爬虫 l 中国农药信息网的农药登记数据

一、爬取目标 二、完整源码 #""""""""""""""""""""""""""""""""""""""…

Docker网络及资源控制

目录 1.Docker网络 Docker网络实现原理 Docker的网络模式 host模式 container模式 none模式 bridge模式 自定义网络 2.资源控制 CPU资源控制 设置CPU使用率上限 设置CPU资源占用比 设置容器绑定指定的CPU 对内存使用的限制 对磁盘IO配额控制&#xff08;blkio&a…