Spring Boot集成Mybatis Plus通过Pagehelper实现分页查询

news2024/11/24 12:27:42

文章目录

  • 0 简要说明Pagehelper
  • 1 搭建环境
    • 1.1 项目目录
    • 1.2 项目搭建需要的依赖
    • 1.3 配置分页插件拦截器
    • 1.4 源代码
      • 启动类
      • 实体类
      • 数据层
      • xml映射文件
      • 业务层
      • 业务层实现类
      • 控制层
      • 接口配置swagger
      • 请求体
  • 2 可能出现的疑问或者问题
    • 2.1 关于total属性疑问
    • 2.2 分页不生效问题
  • 3 案例说明
    • 3.1 配置信息
    • 3.2 请求体
    • 3.3 控制层
    • 3.5 业务层
    • 4.6 业务层实现类
  • 4 关键问题:查询和录入操作使用一个dto出现强制分页情况【待定,问题未能复现,请稍等】

解决 PageInfo 返回的 total 不正确
关于PageInfo的total属性得到的值等于当前页记录数
Pagehelper官网
Pagehelper使用入门

0 简要说明Pagehelper

在这里插入图片描述

1 搭建环境

1.1 项目目录

在这里插入图片描述

1.2 项目搭建需要的依赖

		 <!-- SpringBoot的依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.5.10</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        <!--Mybatis Plus 核心依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--MySQL驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <!--Mybatis Plus 扩展依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--pagehelper分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>

1.3 配置分页插件拦截器

在properties或者yml配置拦截器信息,使其生效。
Spring Boot 引入 starter 后自动生效,对分页插件进行配置时,在 Spring Boot 对应的配置文件 application.[properties|yaml] 中配置

# DataSource Config
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=UTC&useSSL=false&allowMultiQueries=true
    driver-class-name: com.mysql.cj.jdbc.Driver
  mvc:
    pathmatch:
      matching-strategy: ANT_PATH_MATCHER

#配置日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapper/*.xml

server:
  port: 8089

pagehelper:
  reasonable: true
  support-methods-arguments: true
  params: countSql
  helperDialect: mysql

reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTestArgumentsObjTest

helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。

params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero

更加详细的参数说明,可以参考官网说明

1.4 源代码

启动类

package com.geekmice.sbpagehelper;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @BelongsProject: spring-boot-scaffold
 * @BelongsPackage: PACKAGE_NAME
 * @Author: pingmingbo
 * @CreateTime: 2023-08-05  15:14
 * @Description: TODO
 * @Version: 1.0
 */
@MapperScan(value = "com.geekmice.sbpagehelper.dao")
@SpringBootApplication
public class SbPageHelperApplication {
    public static void main(String[] args) {
        SpringApplication.run(SbPageHelperApplication.class, args);
    }
}

实体类

package com.geekmice.sbpagehelper.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

/**
 * (Teacher)实体类
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
@TableName("teacher")
@Data
public class Teacher implements Serializable {
    private static final long serialVersionUID = -82982716139385175L;
    /**
     * 教师号
     */
    @TableId
    @TableField(value = "teacher_no")
    private String teacherNo;

    /**
     * 教师名称
     */
    @TableField(value = "teacher_name")
    private String teacherName;

    /**
     * 部门编号
     */
    @TableField(value = "category_id")
    private Integer categoryId;


}

数据层

package com.geekmice.sbpagehelper.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.geekmice.sbpagehelper.domain.Teacher;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * (Teacher)表数据库访问层
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
public interface TeacherDao extends BaseMapper<Teacher> {


}

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">
    <mapper namespace="com.geekmice.sbpagehelper.dao.TeacherDao">
    
        <resultMap type="com.geekmice.sbpagehelper.domain.Teacher" id="TeacherMap">
            <result property="teacherNo" column="teacher_no" jdbcType="VARCHAR"/>
            <result property="teacherName" column="teacher_name" jdbcType="VARCHAR"/>
            <result property="categoryId" column="category_id" jdbcType="INTEGER"/>
        </resultMap>
    

    
    </mapper>

业务层

package com.geekmice.sbpagehelper.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.geekmice.sbpagehelper.domain.Teacher;
import com.geekmice.sbpagehelper.dto.QueryDTO;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * (Teacher)表服务接口
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
public interface TeacherService extends IService<Teacher> {


    /**
     * @return 响应信息
     * @description 初次使用分页查询
     */
    List<Teacher> queryPage();

    /**
     * @param pageSize 当前页数
     * @param pageNum  每页条数
     * @return 返回信息
     * @description 分页参数查询
     */
    PageInfo<Teacher> queryPage(int pageNum, int pageSize);

    /**
     * @param queryDTO 请求体
     * @return 响应信息
     * @description 多参数分页查询
     */
    PageInfo<Teacher> queryPage(QueryDTO queryDTO);
}

业务层实现类

在这里插入图片描述

package com.geekmice.sbpagehelper.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.geekmice.sbpagehelper.dao.TeacherDao;
import com.geekmice.sbpagehelper.domain.Teacher;
import com.geekmice.sbpagehelper.dto.QueryDTO;
import com.geekmice.sbpagehelper.service.TeacherService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * (Teacher)表服务实现类
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
@Service("teacherService")
@Slf4j
public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> implements TeacherService {
    @Resource
    private TeacherDao teacherDao;

    /**
     * @return 响应信息
     * @description 初次使用分页查询
     */
    @Override
    public List<Teacher> queryPage() {
        PageHelper.startPage(1, 10);
        List<Teacher> result = teacherDao.selectList(null);
        return result;
    }

    /**
     * @param pageSize 当前页数
     * @param pageNum  每页条数
     * @return 返回信息
     * @description 分页参数查询
     */
    @Override
    public PageInfo<Teacher> queryPage(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        QueryWrapper<Teacher> teacherQueryWrapper = new QueryWrapper<>();
        teacherQueryWrapper.likeRight("teacher_name", "小");
        List<Teacher> teachers = teacherDao.selectList(teacherQueryWrapper);
        PageInfo<Teacher> teacherPageInfo = new PageInfo<>(teachers);
        return teacherPageInfo;
    }

    /**
     * @param queryDTO 请求体
     * @return 响应信息
     * @description 多参数分页查询
     */
    @Override
    public PageInfo<Teacher> queryPage(QueryDTO queryDTO) {
        int pageNum = queryDTO.getPageNum();
        int pageSize = queryDTO.getPageSize();
        PageHelper.startPage(pageNum,pageSize);
        QueryWrapper<Teacher> teacherQueryWrapper = new QueryWrapper<>();
        teacherQueryWrapper.eq("teacher_name", queryDTO.getTeacherName());
        List<Teacher> teacherList = teacherDao.selectList(teacherQueryWrapper);
        PageInfo<Teacher> result = new PageInfo<>(teacherList);
        return result;
    }
}

控制层

在这里插入图片描述

package com.geekmice.sbpagehelper.controller;

import com.geekmice.common.utils.AjaxResult;
import com.geekmice.sbpagehelper.domain.Teacher;
import com.geekmice.sbpagehelper.dto.QueryDTO;
import com.geekmice.sbpagehelper.service.TeacherService;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * (Teacher)表控制层
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
@RestController
@RequestMapping("teacher")
@Api(tags = "0.分页查询模块")
public class TeacherController {
    /**
     * 服务对象
     */
    @Resource
    private TeacherService teacherService;

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @ApiOperation(value = "查询单条数据")
    @GetMapping("selectOne")
    public Teacher selectOne(String id) {
        return null;
    }

    /**
     * @return 响应信息
     * @description 初次使用分页查询
     */
    @GetMapping(value = "queryPage")
    @ApiOperation(value = "分页查询")
    public List<Teacher> queryPage() {
        List<Teacher> result = teacherService.queryPage();
        return result;
    }

    /**
     * @param pageSize 当前页数
     * @param pageNum  每页条数
     * @return 返回信息
     * @description 分页参数查询
     */
    @GetMapping(value = "queryPageHavingParams")
    @ApiOperation(value = "分页查询带有参数")
    public AjaxResult queryPageHavingParams(int pageSize, int pageNum) {
        PageInfo<Teacher> result = teacherService.queryPage(pageNum, pageSize);
        return AjaxResult.success(result);
    }

    /**
     * @param queryDTO 请求体
     * @return 响应信息
     * @description 多参数分页查询
     */
    @GetMapping(value = "queryPageByDTO")
    @ApiOperation(value = "多参数分页查询")
    public AjaxResult queryPageByDTO(QueryDTO queryDTO) {
        PageInfo<Teacher> result = teacherService.queryPage(queryDTO);
        return AjaxResult.success(result);
    }

}

接口配置swagger

package com.geekmice.sbpagehelper.config;

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

/**
 * @BelongsProject: spring-boot-scaffold
 * @BelongsPackage: com.geekmice.sbhelloworld.com.geekmice.sbpagehelper.config
 * @Author: pingmingbo
 * @CreateTime: 2023-07-30  15:45
 * @Description: TODO
 * @Version: 1.0
 */
@Configuration
public class Knife4jConfig {
    @Bean(value = "defaultApi2")
    public Docket customDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.geekmice.sbpagehelper.controller"))
                .build();
    }

    /**
     * 构建 api文档的详细信息函数
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("现货交易")
                .version("1.0.0")
                .description("现货交易详情")
                .contact(new Contact("geekmice","http://geekmice.cn","2437690868@qq.com"))
                .build();
    }
}

请求体

package com.geekmice.sbpagehelper.dto;

import com.github.pagehelper.PageInfo;
import lombok.Data;

/**
 * @BelongsProject: spring-boot-scaffold
 * @BelongsPackage: com.geekmice.sbpagehelper.dto
 * @Author: pingmingbo
 * @CreateTime: 2023-08-05  16:00
 * @Description: TODO
 * @Version: 1.0
 */
@Data
public class QueryDTO extends PageInfo {
    private String teacherName;
}

2 可能出现的疑问或者问题

2.1 关于total属性疑问

2.2 分页不生效问题

  1. 当我们调用pagehelper.startPage()方法后下一条语句必须是你要调用的查询语句;
  2. 我们的PageInfo传入的结果集,必须是我们调用查询语句返回的结果集;

提前说明:入参是 pageNum:1 pageSize:2 userName:张 模糊查询
正常情况,没有分页是有以张开头有三条数据,有分页的情况下 张1,张2

第一种问题复现如下:
List userDomainList = userDao.selectList(userDomainQueryWrapper); // 位置1
PageHelper.startPage(pageNum, pageSize); // 位置2

        int pageNum = userVO.getPageNum();
        int pageSize = userVO.getPageSize();
        String userName = userVO.getUserName();
        QueryWrapper<UserDomain> userDomainQueryWrapper = new QueryWrapper<>();
        userDomainQueryWrapper.likeRight("user_name", userName);
        List<UserDomain> userDomainList = userDao.selectList(userDomainQueryWrapper); // 位置1
        PageInfo<UserDomain> userDomainPageInfo = new PageInfo<>(userDomainList);
        PageHelper.startPage(pageNum, pageSize); // 位置2
        return userDomainPageInfo;

返回结果有疑问:返回的是没有分页,只要是张开头的数据都返回了。

{
  "msg": "操作成功",
  "code": 200,
  "data": {
    "total": 3,
    "list": [
      {
        "id": 1,
        "userName": "张1",
        "birthday": "2023-08-09T16:00:00.000+00:00",
        "sex": "男",
        "address": "123@163.com"
      },
      {
        "id": 3,
        "userName": "张2",
        "birthday": "2023-08-09T16:00:00.000+00:00",
        "sex": "女",
        "address": "999@163.com"
      },
      {
        "id": 4,
        "userName": "张3",
        "birthday": "2023-08-09T16:00:00.000+00:00",
        "sex": "男",
        "address": "9994@qq.com"
      }
    ],
    "pageNum": 1,
    "pageSize": 4,
    "size": 3,
    "startRow": 1,
    "endRow": 3,
    "pages": 1,
    "prePage": 0,
    "nextPage": 0,
    "isFirstPage": true,
    "isLastPage": true,
    "hasPreviousPage": false,
    "hasNextPage": false,
    "navigatePages": 8,
    "navigatepageNums": [
      1
    ],
    "navigateFirstPage": 1,
    "navigateLastPage": 1
  }
}

3 案例说明

3.1 配置信息

添加依赖

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

yml配置信息

pagehelper:
  reasonable: true
  support-methods-arguments: true
  params: countSql
  helperDialect: mysql

3.2 请求体

PageInfo这个api是Pagehelper原生的对象,涵盖基本分页信息
在这里插入图片描述
在这里插入图片描述

package com.geekmice.sbpagehelper.dto;

import com.github.pagehelper.PageInfo;
import lombok.Data;

/**
 * @BelongsProject: spring-boot-scaffold
 * @BelongsPackage: com.geekmice.sbpagehelper.dto
 * @Author: pingmingbo
 * @CreateTime: 2023-08-05  16:00
 * @Description: TODO
 * @Version: 1.0
 */
@Data
public class QueryDTO extends PageInfo {
    private String teacherName;
}

3.3 控制层

/**
 * (Teacher)表控制层
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
@RestController
@RequestMapping("teacher")
@Api(tags = "0.分页查询模块")
public class TeacherController {
    /**
     * 服务对象
     */
    @Resource
    private TeacherService teacherService;

    /**
     * @param queryDTO 请求体
     * @return 响应信息
     * @description 多参数分页查询
     */
    @GetMapping(value = "queryPageByDTO")
    @ApiOperation(value = "多参数分页查询")
    public AjaxResult queryPageByDTO(QueryDTO queryDTO) {
        PageInfo<Teacher> result = teacherService.queryPage(queryDTO);
        return AjaxResult.success(result);
    }
}

3.5 业务层

package com.geekmice.sbpagehelper.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.geekmice.sbpagehelper.domain.Teacher;
import com.geekmice.sbpagehelper.dto.QueryDTO;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * (Teacher)表服务接口
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
public interface TeacherService extends IService<Teacher> {

    /**
     * @param queryDTO 请求体
     * @return 响应信息
     * @description 多参数分页查询
     */
    PageInfo<Teacher> queryPage(QueryDTO queryDTO);
}

4.6 业务层实现类

package com.geekmice.sbpagehelper.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.geekmice.sbpagehelper.dao.TeacherDao;
import com.geekmice.sbpagehelper.domain.Teacher;
import com.geekmice.sbpagehelper.dto.QueryDTO;
import com.geekmice.sbpagehelper.service.TeacherService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

/**
 * (Teacher)表服务实现类
 *
 * @author pingmingbo
 * @since 2023-08-05 15:19:26
 */
@Service("teacherService")
@Slf4j
public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> implements TeacherService {
    @Resource
    private TeacherDao teacherDao;

    /**
     * @param queryDTO 请求体
     * @return 响应信息
     * @description 多参数分页查询
     */
    @Override
    public PageInfo<Teacher> queryPage(QueryDTO queryDTO) {
        int pageNum = queryDTO.getPageNum();
        int pageSize = queryDTO.getPageSize();
        QueryWrapper<Teacher> teacherQueryWrapper = new QueryWrapper<>();
        teacherQueryWrapper.eq("teacher_name", queryDTO.getTeacherName());
        PageHelper.startPage(pageNum,pageSize);
        List<Teacher> teacherList = teacherDao.selectList(teacherQueryWrapper);
        PageInfo<Teacher> result = new PageInfo<>(teacherList );
        return result;
    }
}

再次说明 PageHelper.startPage(pageNum,pageSize);使用顺序

4 关键问题:查询和录入操作使用一个dto出现强制分页情况【待定,问题未能复现,请稍等】

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

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

相关文章

【高危】 Zoom Desktop Client for Windows <5.14.5 权限升级漏洞

漏洞描述 Zoom 是一种用于视频会议、在线会议和远程协作的软件平台。 Zoom Desktop Client for Windows 5.14.5 之前版本由于对数据的真实性验证不足&#xff0c;经过身份验证的攻击者可通过网络访将权限升级为 SYSTEM 用户。 漏洞名称Zoom Desktop Client for Windows <…

IDEA如何调试Stream API

Stream API现在在实际开发中应用非常广泛&#xff0c;经常会遇到需要调试Stream API的场景&#xff0c;这篇文章主要讲解如何使用IDEA调试Stream Testpublic void test(){Stream.of(10, 20, 30, 40, 50).mapToInt(e->e*10).filter(e->e>200).forEach(System.out::pri…

docker基本使用方法

docker使用 1. Docker 介绍 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。Docker 使您能够将应用程序与基础架构分开&#xff0c;从而可以快速交付软件。通过利用 …

Blockchain投资:是否是实现财务自由的捷径?

随着Blockchain技术的不断发展和应用&#xff0c;越来越多的人开始探索Blockchain投资的机会。Blockchain作为一种分布式记账技术&#xff0c;以其去中心化、透明性和安全性等特点&#xff0c;吸引了众多投资者的关注。但是&#xff0c;Blockchain投资是否真的可以成为实现财务…

unity 修改默认脚本

using System.Collections; using System.Collections.Generic; using UnityEngine; //***************************************** //创建人&#xff1a; xxxx //功能说明&#xff1a; //***************************************** #ROOTNAMESPACEBEGIN# public class #SCRI…

0基础学习VR全景平台篇 第82篇:智慧眼-角色是什么?如何运用呢?

一、功能说明 角色是指城市运营工作开展时所需要设定的成员职称或者人物定位&#xff0c;如管理员、督察员、镇街主管、镇接干事、网格员等等。 后台编辑界面 点击【新增】&#xff0c;填写角色的名称&#xff0c;若有上级&#xff0c;还需选择对应的父级角色。如管理员为最…

Python(七十五)集合的生成式

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

山东布谷科技直播软件源码探索高效、稳定直播传输的技术介绍:流媒体传输技术

今天我们探索的是让直播软件源码平台在直播时能够高效、稳定的进行直播传输的技术&#xff0c;而这个技术就是直播软件源码平台的流媒体传输技术&#xff0c;在直播软件源码平台中&#xff0c;流媒体传输技术会将直播的图像、视频、音频等相关的流媒体信号通过网络传递到用户的…

SQL-每日一题【1251. 平均售价】

题目 Table: Prices Table: UnitsSold 编写SQL查询以查找每种产品的平均售价。average_price 应该四舍五入到小数点后两位。 查询结果格式如下例所示&#xff1a; 解题思路 1.题目要求查询每种产品的平均售价。给出了两个表&#xff0c;我们用聚合查询来解决此问题。 2.首先我…

从 OBJ 到 FBX:图扑新一代飞机模型、动画、漫游

相信大多数图扑 HT 用户都曾见过这个飞机的 Demo&#xff0c;在图扑发展的这十年&#xff0c;这个 Demo 是许多学习 HT 用户一定会参考的经典 Demo 之一。 这个 Demo 用简洁的代码生动地展示了 OBJ 模型加载、数据绑定、动画和漫游等功能的实现。许多用户参考这个简单的 Demo 后…

通过Shinami快速使用赞助交易(Gas代付)

Web3中对钱包和tokens的要求对于新用户来说是最大的挑战。Sui上的赞助交易不仅为用户提供丝滑的体验&#xff0c;还为构建者开辟了更多的收入模式。 按需付费的区块链模型直接支持网络基础设施&#xff0c;但对于那些已经习惯了Web2世界中看似免费服务的用户来说&#xff0c;这…

{errcode“:-106,“errmsg“:“token check fail“} 微信公众号测试号接口配置报错Django版

准备写个公众号做消息提醒的工具&#xff0c;&#xff0c;于是去了微信公众平台&#xff0c;准备用测试号接口试试。代码写的没问题&#xff0c;服务器也是已经部署了的。基本上所有问题都排查了还是显示配置失败。最后发现是请求头的问题 先列举一下需要注意的问题&#xff0…

自媒体行业深度解析:挖掘收入潜力,洞察未来趋势

随着社交网络和移动互联网的快速发展&#xff0c;自媒体行业成为了越来越多人的职业选择。那么&#xff0c;自媒体行业到底怎么样&#xff1f;自媒体人的收入和前景如何&#xff1f;本文将为大家带来一些关于自媒体行业的介绍和分析。 一、自媒体的定义 自媒体是指个人或组织利…

【ES】笔记-箭头函数的实践于应用场景

箭头函数的实践于应用场景 需求-1 点击 div 2s后颜色变成[粉色]从数组中返回偶数的元素 需求-1 点击 div 2s后颜色变成[粉色] html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport…

论文解读《Adversarial training methods for semi-supervised text classification》

1 背景 1.1 对抗性实例&#xff08;Adversarial examples&#xff09; 通过对输入进行小扰动创建的实例&#xff0c;可显著增加机器学习模型所引起的损失对抗性实例的存在暴露了机器学习模型的脆弱性和局限性&#xff0c;也对安全敏感的应用场景带来了潜在的威胁&#xff1b;…

前端开发的工作职责精选【10篇】

前端开发的工作职责1 1、使用Divcss并结合Javascript负责产品的前端开发和页面制作; 2、熟悉W3C标准和各主流浏览器在前端开发中的差异&#xff0c;能熟练运用DIVCSS&#xff0c;提供针对不同浏览器的前端页面解决方案; 3、负责相关产品的需求以及前端程序的实现&#xff0c…

IDEA 配置 eslint

第一步 第二步 然后就去试一下啦&#xff0c;理论上到这一步就没问题了&#xff0c;有问题在留言吧。

超低延时直播技术的前世今生

作者&#xff1a;李晨光、匡建鑫、陈鉴平 卷首语&#xff1a; 据中国互联网络信息中心发布的《中国互联网络发展状况统计报告》显示&#xff0c;截止到 2022 年 6 月我国网络直播用户规模达到了 7.16 亿&#xff0c;占网民整体的 68.1% 。最主要原因是 2020 年度疫情期间导致居…

C++入门(小白篇2-标识符定义-关键词-变量类型)

前言 在上一节课中&#xff0c;我们学习到C软件的安装&#xff0c;也知道C运行的各种软件&#xff0c;以及运行第一个程序 今天我们来学习一下 1、C中标识符(变量)的命名规则 2、认识C中的关键词 3、认识C中的数据类型 每天学一点&#xff0c;不要太多不然脑子装不下&#xff0…

vscode终端背景颜色修改以及报错信息颜色修改

引言 刚从pycharm转到vscode上时&#xff0c;很不喜欢vscode终端信息一片白色&#xff0c;于是想尽办法去修改vscode终端风格 这里提供vscode终端背景颜色的修改和vscode终端报错提示信息颜色的修改方法 (1)vscode终端背景颜色优化 步骤一&#xff0c;ctrlshiftp打开设置搜索…