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

文章目录

  • 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: rootpassword: rooturl: jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=UTC&useSSL=false&allowMultiQueries=truedriver-class-name: com.mysql.cj.jdbc.Drivermvc:pathmatch:matching-strategy: ANT_PATH_MATCHER#配置日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations: classpath:mapper/*.xmlserver:port: 8089pagehelper:reasonable: truesupport-methods-arguments: trueparams: countSqlhelperDialect: 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 {@Resourceprivate TeacherDao teacherDao;/*** @return 响应信息* @description 初次使用分页查询*/@Overridepublic List<Teacher> queryPage() {PageHelper.startPage(1, 10);List<Teacher> result = teacherDao.selectList(null);return result;}/*** @param pageSize 当前页数* @param pageNum  每页条数* @return 返回信息* @description 分页参数查询*/@Overridepublic 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 多参数分页查询*/@Overridepublic 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 {/*** 服务对象*/@Resourceprivate 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); // 位置1PageInfo<UserDomain> userDomainPageInfo = new PageInfo<>(userDomainList);PageHelper.startPage(pageNum, pageSize); // 位置2return 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: truesupport-methods-arguments: trueparams: countSqlhelperDialect: 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 {/*** 服务对象*/@Resourceprivate 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 {@Resourceprivate TeacherDao teacherDao;/*** @param queryDTO 请求体* @return 响应信息* @description 多参数分页查询*/@Overridepublic 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.rhkb.cn/news/88375.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dynamic Web TWAIN Crack

Dynamic Web TWAIN Crack 文件编辑 提供 GUI 和非 GUI 图像编辑器 内置基本图像编辑界面&#xff0c;如旋转、裁剪、镜像、翻转、擦除和更改图像大小 支持向图像添加彩色矩形 支持文字注释 提供图像交换功能 支持清除图像的指定区域并用颜色填充清除的区域 内置变焦 提供多图像…

VUE3组件

组件基础 {#components-basics} 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 这和我们嵌套 HTML 元素的方式类似&#xff0c;Vue 实现了自己的组件…

pyscenic分析:视频教程

我们之前更新过pyscenic的教程&#xff1a;pySCENIC单细胞转录因子分析更新&#xff1a;数据库、软件更新。我们也说过&#xff0c;我们号是放弃R语言版的SCENIC的分析了&#xff0c;因为它比较耗费计算资源和时间&#xff0c;所以我们的单细胞转录因子分析教程都是基于pysceni…

JavaScript算法【入门】

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

openocd调试esp32(通过FT232H)

之前在学习ESP32&#xff0c;其中有一部分课程是学习openocd通过JTAG调试程序的&#xff0c;因为我用的是ESP32-wroom&#xff0c;usb端口没有集成对应的usb转jtag的ft232&#xff0c;查了ESP32相关的资料&#xff08;JTAG 调试 - ESP32 - — ESP-IDF 编程指南 latest 文档 (es…

React如何配置env环境变量

React版本&#xff1a; "react": "^18.2.0" 1、在package.json平级目录下创建.env文件 2、在‘.env’文件里配置环境变量 【1】PUBLIC_URL 描述&#xff1a;编译时文件的base-href 官方描述&#xff1a; // We use PUBLIC_URL environment variable …

使用 PyTorch 逐步检测单个对象

一、说明 在对象检测任务中&#xff0c;我们希望找到图像中对象的位置。我们可以搜索一种类型的对象&#xff08;单对象检测&#xff0c;如本教程所示&#xff09;或多个对象&#xff08;多对象检测&#xff09;。通常&#xff0c;我们使用边界框定义对象的位置。有几种方法可以…

netty基础与原理

Netty线程模型和Reactor模式 简介&#xff1a;reactor模式 和 Netty线程模型 设计模式——Reactor模式&#xff08;反应器设计模式&#xff09;&#xff0c;是一种基于 事件驱动的设计模式&#xff0c;在事件驱动的应用中&#xff0c;将一个或多个客户的 服务请求分离&#x…

windows任务栏右下角不显示网络图标解决方法

1、背景 我运行windows诊断服务之后&#xff0c;然后重启了一把电脑&#xff0c;结果发现电脑无法上网了&#xff0c;进一步发现任务栏右下角的网络显示图标也没有了&#xff0c;网络状态显示也是一条横线。 几经折腾终于给解决了&#xff0c;遇到了不少坑&#xff0c;记录一…

三、web核心防御机制(下)

文章目录 核心防御机制2.3处理攻击者2.3.1 处理错误2.3.2 维护审计日志2.3.3 向管理员发出警报2.3.4 应对攻击 2.4 管理应用程序 核心防御机制 2.3处理攻击者 任何设计安全应用程序的开发人员必须基于这样一个假设&#xff1a;应用程序将成为蓄意破坏且经验丰富的攻击者的直接…

双端口存储器原理实验

1.实验目的及要求 1.1实验目的 1&#xff09;了解双端口静态随机存储器IDT7132的工作特性及使用方法。 2&#xff09;了解半导体存储器怎样存储和读出数据。 3&#xff09;了解双端口存储器怎样并行读写&#xff0c;并分析冲突产生的情况。 1.2实验要求 1&#xff09;做好…

Oracle连接数据库提示 ORA-12638:身份证明检索失败

ORA-12638 是一个 Oracle 数据库的错误代码&#xff0c;它表示身份验证&#xff08;认证&#xff09;检索失败。这通常与数据库连接相关&#xff0c;可能由于以下几个原因之一引起&#xff1a; 错误的用户名或密码&#xff1a; 提供的数据库用户名或密码不正确&#xff0c;导致…

[HDLBits] Exams/2012 q1g

Consider the function f shown in the Karnaugh map below. Implement this function. (The original exam question asked for simplified SOP and POS forms of the function.) //

Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

相关API的使用&#xff1a; 1 traverse &#xff08;模型循环遍历方法&#xff09; 2. THREE.TextureLoader&#xff08;用于加载和处理图片纹理&#xff09; 3. THREE.MeshLambertMaterial&#xff08;用于创建材质&#xff09; 4. getObjectByProperty&#xff08;通过材…

交换排序——选择排序和冒泡排序的区别是什么?

今天重温一下算法&#xff0c;其实刚开始我觉得冒泡排序和选择排序是一样的&#xff0c;因为他们排序过程中都是通过相邻的数据比较找到最小/最大的数据&#xff0c;通过不断思考和学习才明白&#xff0c;两者还是有区别的。 冒泡排序 概念 冒泡排序(Bubble Sort)&#xff0…

Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。 目录 歌曲类型功能优化 新增编辑 优化输入项标题显示 父类型显示改为下拉菜单 列表显示 父类型显示名称 过滤器增加父类型 歌单表功能优化…

OpenStack监控工具

OpenStack是一个开源的云计算管理平台项目&#xff0c;是一系列软件开源项目的组合。由NASA和Rackspace合作研发并发起&#xff0c;以Apache许可证&#xff08;Apache软件基金会发布的一个自由软件许可证&#xff09;授权。 OpenStack为私有云和公有云提供可扩展的弹性的云计算…

V3s uboot 通过env 修改LCD 参数信息

实际项目中我们可能使用各种参数的LCD 显示器&#xff0c;有7吋&#xff0c;4.3 寸等等&#xff0c;我这里使用的uboot 版本是U-Boot 2017.01-rc2 &#xff0c;在make menuconfig 时候会填入lcd 配置信息&#xff0c;如下&#xff1a; 所以这里使用起来很不方便&#xff0c;查看…

无涯教程-Perl - readline函数

描述 此函数从EXPR引用的文件句柄中读取一行,并返回输出。如果要直接使用FILEHANDLE,则必须将其作为typeglob传递。 Simply readline function is equvivalent to <>. 语法 以下是此函数的简单语法- readline EXPR返回值 此函数在标量context中仅返回一行,而在列表…

章节7:Burp Intruder模块

章节7&#xff1a;Burp Intruder模块 参考资料 https://portswigger.net/burp/documentation/desktop/tools/intruder 01 Intruder模块作用与原理 原理 http://xxx.xx.com/bbs/index.php?namewuyanzu&mottogo 对请求参数进行修改&#xff0c;分析响应内容&#xff0…