SpringBoot+Mybatis-Plus+Thymeleaf+Bootstrap分页页查询(前后端完整版开源学习)图书管理系统

news2024/12/26 10:59:58

目录

  • 分页主要逻辑,在3.7和3.8
  • 1.准备工作
    • 1.1 参考博客
    • 1.2 项目结构
  • 2. 数据库
  • 3. 详细代码部分
    • 3.1 pom依赖
    • 3.2 application.yml
    • 3.3 BookMapper.xml
    • 3.4 BookMapper
    • 3.5 BookService 和 BookServiceImpl
    • 3.6 实体类entity book
    • 3.7控制层 BookController
    • 3.8 前端页面bookList.html
    • 3.9 工具类
      • 3.9.1 mybatis-plus 插入时间和更新时间字段自动填充工具
      • 3.9.2 分页插件工具
  • 4. 运行效果

分页主要逻辑,在3.7和3.8

1.准备工作

1.1 参考博客

Mybatis-Plus | Spring Boot+Mybatis-Plus+Thymeleaf+Bootstrap分页页查询(前后端都有)
主要参考了这篇博客。

1.2 项目结构

在这里插入图片描述

运行截图在这里插入图片描述

2. 数据库

DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`  (
  `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '书名',
  `author` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '作者',
  `publisher` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '出版社',
  `amount` int(0) NULL DEFAULT NULL COMMENT '在库数量',
  `version` int(0) NULL DEFAULT NULL COMMENT '版本',
  `deleted` int(0) NULL DEFAULT NULL COMMENT '逻辑删',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `modify_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '图书' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (3, '《鲁迅文集》', '鲁迅', '广西出版社', 20, NULL, 0, '2022-12-24 14:30:23', '2022-12-24 14:30:23');
INSERT INTO `book` VALUES (4, '《边城》', '沈从文', '武汉出版社', 10, NULL, 0, '2022-12-24 14:50:43', '2022-12-24 14:50:43');
INSERT INTO `book` VALUES (5, '《人生》', '路遥', '北京十月文艺出版社', 11, NULL, 0, '2022-12-24 14:51:41', '2022-12-24 14:51:41');
INSERT INTO `book` VALUES (6, '《平凡的世界》', '路遥', '北京十月文艺出版社', 11, NULL, 0, '2022-12-24 14:52:14', '2022-12-24 14:52:14');

3. 详细代码部分

3.1 pom依赖

<?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.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.nndx</groupId>
    <artifactId>its</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>its</name>
    <description>Demo project for nndx ITS auto-opera</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- 第三方分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--swagger-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.6.3</version>
        </dependency>


        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--mybatis-plus-generator 生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--velocity-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--freemarker引擎模板-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3.2 application.yml

server:
  port: 8080

#设置开发环境
spring:
  datasource:
    username: root
    password: xxxx
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/wm-demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
  thymeleaf:
    cache: false
    encoding: UTF-8
    mode: HTML5
    prefix: classpath:/templates/
    suffix: .html

#pagehelper分页配置
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countsql

mybatis-plus:
  #配置日志  log-impl:日志实现
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-field: isDelete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

3.3 BookMapper.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.book.mapper.BookMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.book.entity.Book">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="author" property="author" />
        <result column="publisher" property="publisher" />
        <result column="amount" property="amount" />
        <result column="version" property="version" />
        <result column="deleted" property="deleted" />
        <result column="create_time" property="createTime" />
        <result column="modify_time" property="modifyTime" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, author, publisher, amount, version, deleted, create_time, modify_time
    </sql>
</mapper>

3.4 BookMapper

package com.book.mapper;

import com.book.entity.Book;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface BookMapper extends BaseMapper<Book> {

}

3.5 BookService 和 BookServiceImpl

package com.book.service;
import com.book.entity.Book;
import com.baomidou.mybatisplus.extension.service.IService;
public interface BookService extends IService<Book> {

}
package com.book.service.impl;
import com.book.entity.Book;
import com.book.mapper.BookMapper;
import com.book.service.BookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {

}

3.6 实体类entity book

package com.book.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import java.io.Serializable;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;


@Getter
@Setter
@Accessors(chain = true)
@TableName("book")
@ApiModel(value = "Book对象", description = "图书")
public class Book implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("序号")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @ApiModelProperty("书名")
    @TableField("name")
    private String name;

    @ApiModelProperty("作者")
    @TableField("author")
    private String author;

    @ApiModelProperty("出版社")
    @TableField("publisher")
    private String publisher;

    @ApiModelProperty("在库数量")
    @TableField("amount")
    private Integer amount;

    @ApiModelProperty("版本")
    @TableField("version")
    @Version
    private Integer version;

    @ApiModelProperty("逻辑删")
    @TableField("deleted")
    @TableLogic
    private Integer deleted;

    @ApiModelProperty("创建时间")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    @ApiModelProperty("更新时间")
    @TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
    private Date modifyTime;
}

3.7控制层 BookController

package com.book.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.book.entity.Book;
import com.book.mapper.BookMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {

    //首页
    @RequestMapping("/index")
    public String toIndexPage(Model model){
        return "index";
    }

    //回到登录页
    @RequestMapping("/toLogion")
    public String toLogion(Model model){
        return "login";
    }

    @Autowired
    private BookMapper bookMapper;

    //分页查询用户数据
    @RequestMapping("/selectPage")
    public String userList(Model model,
                           @RequestParam(required = false,defaultValue="1",value="pageNum")Integer pageNum,
                           @RequestParam(defaultValue="3",value="pageSize")Integer pageSize){
        //为了程序的严谨性,判断非空:
        //设置默认当前页
        if(pageNum==null || pageNum<=0){
            pageNum = 1;
        }
        //设置默认每页显示的数据数
        if(pageSize == null){
            pageSize = 1;
        }
        System.out.println("当前页是:"+pageNum+"显示条数是:"+pageSize);

        //1.引入分页插件,pageNum是第几页,pageSize是每页显示多少条,默认查询总数count
        PageHelper.startPage(pageNum,pageSize);
        //2.紧跟的查询就是一个分页查询-必须紧跟.后面的其他查询不会被分页,除非再次调用PageHelper.startPage
        try {
            QueryWrapper<Book> wrapper = new QueryWrapper();
            List<Book> bookList = bookMapper.selectList(wrapper);
            System.out.println("分页数据:"+bookList);
            //3.使用PageInfo包装查询后的结果,5是连续显示的条数,结果list类型是Page<E>
            PageInfo<Book> pageInfo = new PageInfo<Book>(bookList,pageSize);
            //4.使用model传参数回前端
            model.addAttribute("pageInfo",pageInfo);
            model.addAttribute("bookList",bookList);
            //model.addAttribute("username","测试");
        }finally {
            //清理 ThreadLocal 存储的分页参数,保证线程安全
            PageHelper.clearPage();
        }
        return "bookList";
    }

}

3.8 前端页面bookList.html

<!DOCTYPE html>
<!--xmlns:th="http://www.thymeleaf.org"用于引入Thymeleaf模板引擎-->
<!--th标签是Thymeleaf模板提供的,但使用这种Thymeleaf模板页面不是一个标准的Html5页面了-->
<!--如果想使用Thymeleaf进行纯html5开发,要使用data-th-*替代th:*,替代后不需要引入模板引擎,但是没有快捷提示,所以不推荐-->
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro=“http://www.thymeleaf.org/thymeleaf-extras-shiro”>
   <head>
   	<meta charset="UTF-8">
   	<title>图书管理 分页插件demo测试</title>
   	<!-- bilibili 小电视图标 -->
   	<!-- <link rel="shortcut icon" href="https://www.bilibili.com/favicon.ico?v=1"> -->
   	<link rel="icon" href="https://getbootstrap.com/docs/4.0/assets/img/favicons/favicon.ico">

   	<link rel="stylesheet" th:href="@{/bootstrap461/css/bootstrap.css}">
   </head>
   <body>
   	<div class="container" id="app">
   		<div class="row clearfix">
   			<nav class="nav nav-tabs my-5">
   				<li class="nav-item"><a class="nav-link" href="/book/index">主页</a></li>
   				<li class="nav-item"><a class="nav-link active" href="/book/selectPage">图书管理</a></li>
   				<li class="nav-item"><a class="nav-link" href="/book/selectPage">page2</a></li>
   				<li class="nav-item"><a class="nav-link" href="/book/selectPage">page3</a></li>
   				<li class="nav-item"><a class="nav-link" href="/book/toLogion">登录</a></li>
   			</nav>
   			<div class="col-md-12 column my-1">
   				<table class="table">
   					<thead>
   						<tr>
   							<th>序号</th>
   							<th>书名</th>
   							<th>作者</th>
   							<th>出版社</th>
   							<th>在库数量</th>
   							<th>创建时间</th>
   						</tr>
   					</thead>
   					<tbody>
   						<tr th:each="aBook,infoStat : ${bookList}">
   							<th th:text="${infoStat.count}"></th>
   							<td th:text="${aBook.name}"></td>
   							<td th:text="${aBook.author}"></td>
   							<td th:text="${aBook.publisher}"></td>
   							<td th:text="${aBook.amount}"></td>
   							<!-- 格式化后台传来的时间 -->
   							<td th:text="${#dates.format(aBook.createTime,'yyyy-MM-dd HH:mm:ss')}"></td>
   						</tr>
   					</tbody>
   				</table>
   				<!--显示分页信息部分代码-->
   				<div class="">
   					<div class="col-md-6">
   						<strong>当前第 [[${pageInfo.pageNum}]]页,共 [[${pageInfo.pages}]] 页.一共 [[${pageInfo.total}]] 条记录
   						</strong>
   					</div>
   					<div class="btn-group mr-2">
   						<ul class="pagination pull-right no-margin">
   							<li th:if="${pageInfo.hasPreviousPage}" class="btn bg-light text-dark">
   								<a th:href="'/book/selectPage?pageNum=1'">首页</a>
   							</li>
   							<li class="prev btn bg-light text-dark" th:if="${pageInfo.hasPreviousPage}">
   								<a th:href="'/book/selectPage?pageNum='+${pageInfo.prePage}">
   									<< </a>
   							</li>
   							<li th:each="nav:${pageInfo.navigatepageNums}" class="btn bg-light text-dark">
   								<a th:href="'/book/selectPage?pageNum='+${nav}" th:text="${nav}"
   									th:if="${nav != pageInfo.pageNum}"></a>
   								<span style="font-weight: bold;" th:if="${nav == pageInfo.pageNum}"
   									th:text="${nav}"></span>
   							</li>
   							<li class="next btn bg-light text-dark" th:if="${pageInfo.hasNextPage}">
   								<a th:href="'/book/selectPage?pageNum='+${pageInfo.nextPage}">
   									>>
   								</a>
   							</li>
   							<li class="btn bg-light text-dark">
   								<a th:href="'/book/selectPage?pageNum='+${pageInfo.pages}">尾页</a>
   							</li>
   						</ul>
   					</div>
   				</div>
   			</div>
   		</div>
   	</div>
   </body>
</html>

3.9 工具类

3.9.1 mybatis-plus 插入时间和更新时间字段自动填充工具

package com.book.util;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;
//mp的自动填充时间处理
@Component
public class CustomMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("modifyTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

3.9.2 分页插件工具

package com.book.util;

import java.util.List;

// 分页工具类
public class PageUtil<T> {

    // 对象记录结果集
    private List<T> list;
    // 总记录数
    private int total = 0;
    // 每页显示记录数
    private int limit = 20;
    // 总页数
    private int pages = 1;
    // 当前页
    private int pageNumber = 1;
    // 是否为第一页
    private boolean isFirstPage = false;
    // 是否为最后一页
    private boolean isLastPage = false;
    // 是否有前一页
    private boolean hasPreviousPage = false;
    // 是否有下一页
    private boolean hasNextPage = false;
    // 导航页码数
    private int navigatePages = 8;
    // 所有导航页号
    private int[] navigatePageNumbers;
    // 尾页
    private int lastPage = 0 ;
    // 首页
    private int firstPage = 1 ;
    // 上一页
    private int prePage = 0;
    // 下一页
    private int nextPage = 0;


    public PageUtil(int pageNumber, int limit, List<T> list) {
        init(list, pageNumber, limit);
    }

    private void init(List<T> list, int pageNumber, int limit){
        //设置基本参数
        this.list = list;
        this.total = list.size();
        this.limit = limit;
        this.pages = (this.total-1)/this.limit+1;
        this.lastPage = pages;
        this.firstPage = 1;
        this.prePage = pageNumber-1;
        this.nextPage = pageNumber+1;
        //根据输入可能错误的当前号码进行自动纠正
        if(pageNumber<1){
            this.pageNumber=1;
        }else if(pageNumber>this.pages){
            this.pageNumber=this.pages;
        }else{
            this.pageNumber=pageNumber;
        }

        //基本参数设定之后进行导航页面的计算
        calcNavigatePageNumbers();

        //以及页面边界的判定
        judgePageBoudary();
    }

    /**
     * 计算导航页
     */
    private void calcNavigatePageNumbers(){
        //当总页数小于或等于导航页码数时
        if(pages<=navigatePages){
            navigatePageNumbers=new int[pages];
            for(int i=0;i<pages;i++){
                navigatePageNumbers[i]=i+1;
            }
        }else{ //当总页数大于导航页码数时
            navigatePageNumbers=new int[navigatePages];
            int startNum=pageNumber-navigatePages/2;
            int endNum=pageNumber+navigatePages/2;

            if(startNum<1){
                startNum=1;
                //(最前navPageCount页
                for(int i=0;i<navigatePages;i++){
                    navigatePageNumbers[i]=startNum++;
                }
            }else if(endNum>pages){
                endNum=pages;
                //最后navPageCount页
                for(int i=navigatePages-1;i>=0;i--){
                    navigatePageNumbers[i]=endNum--;
                }
            }else{
                //所有中间页
                for(int i=0;i<navigatePages;i++){
                    navigatePageNumbers[i]=startNum++;
                }
            }
        }
    }

    /**
     * 判定页面边界
     */
    private void judgePageBoudary(){
        isFirstPage = pageNumber == 1;
        isLastPage = pageNumber == pages && pageNumber!=1;
        hasPreviousPage = pageNumber!=1;
        hasNextPage = pageNumber!=pages;
    }

    /**
     * 得到当前页的内容
     * @return {List}
     */
    public List<T> getList() {

        int endIndex = total;
        if(pageNumber*limit <= total){
            endIndex = pageNumber*limit;
        }

        List<T> pagelist = list.subList((pageNumber-1)*limit, endIndex);
        return pagelist;
    }

    public int getLastPage() {
        return lastPage;
    }

    public void setLastPage(int lastPage) {
        this.lastPage = lastPage;
    }

    public int getFirstPage() {
        return firstPage;
    }

    public void setFirstPage(int firstPage) {
        this.firstPage = firstPage;
    }

    public int getPrePage() {
        return prePage;
    }

    public void setPrePage(int prePage) {
        this.prePage = prePage;
    }

    public int getNextPage() {
        return nextPage;
    }

    public void setNextPage(int nextPage) {
        this.nextPage = nextPage;
    }

    /**
     * 得到记录总数
     * @return {int}
     */
    public int getTotal() {
        return total;
    }

    /**
     * 得到每页显示多少条记录
     * @return {int}
     */
    public int getLimit() {
        return limit;
    }

    /**
     * 得到页面总数
     * @return {int}
     */
    public int getPages() {
        return pages;
    }

    /**
     * 得到当前页号
     * @return {int}
     */
    public int getPageNumber() {
        return pageNumber;
    }


    /**
     * 得到所有导航页号
     * @return {int[]}
     */
    public int[] getNavigatePageNumbers() {
        return navigatePageNumbers;
    }

    public boolean isFirstPage() {
        return isFirstPage;
    }

    public boolean isLastPage() {
        return isLastPage;
    }

    public boolean hasPreviousPage() {
        return hasPreviousPage;
    }

    public boolean hasNextPage() {
        return hasNextPage;
    }
}

4. 运行效果

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

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

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

相关文章

LabVIEW如何减少下一代测试系统中的硬件过时3

LabVIEW如何减少下一代测试系统中的硬件过时3 Initial System Configuration As shown in Figure 4, the test application is running on an NI PXIembedded controller with Windows XP. The PXI controller is connected to theAgilent 33220A signal generator through L…

只需几次点击即可创建一个Astra和LearnDash在线教育网站 – 简单快捷!

Astra为不喜欢从头开始设计网站的任何人提供了一个巨大的入门模板库。 这些网站是使用各种页面构建器制作的&#xff0c;例如 Elementor、Beaver Builder、Brizy 以及 Gutenberg——WordPress 的默认新编辑器。如果您喜欢这些网站中的任何一个&#xff0c;只需单击一下即可将其…

node.js+uni计算机毕设项目短视频管理小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

18、Mysql高级之日志

18、Mysql高级之日志 文章目录18、Mysql高级之日志1、错误日志2、二进制日志2.1、概述2.2、日志格式2.3、日志读取2.4、日志删除3、查询日志4、慢查询日志4.1、文件位置和格式4.2、日志的读取在任何一种数据库中&#xff0c;都会有各种各样的日志&#xff0c;记录着数据库工作的…

数据结构(1)前言

&#xff08;1&#xff09;学习数据结构前&#xff0c;需要掌握结构体和指针的使用&#xff0c;需要了解typedef这个关键字。对这部分知识欠缺的可以查看&#xff1a;C语言结构体详解&#xff1b;何为指针&#xff0c;与数组名有什么区别&#xff1b; &#xff08;2&#xff09…

一次性记录关键字,注释,字符串值,运算符,括号配对的位置,并设置自定义数据颜色。

未执行函数之前&#xff1a; 执行后参数未加数据&#xff1a; 执行后参数加上数据&#xff1a; 源代码&#xff1a; /// <summary> /// 一次性记录关键字&#xff0c;注释&#xff0c;字符串值&#xff0c;运算符&#xff0c;括号配对的位置,并设置自定义数据颜色 /// &l…

关于Spring的两三事:神奇的注解

一、前言 在之前的学习中我们介绍了注解实际上起到的是标记和注释的作用&#xff0c;其本身并不提供任何的逻辑处理能力。也就是说如果想让注解能够实现预期的作用&#xff0c;就必须给注解搭配一个能够读取并处理该注解的方法&#xff0c;这里为了方便描述我将这样一个方法定义…

小学生C++编程基础 课程11(共8题)

946.数的数字和(课程A&#xff09; 难度&#xff1a;1 登录 947.数的颠倒 ( 课程A&#xff09; 难度&#xff1a;1 登录 948.求8的个数 (课程A&#xff09; 难度&#xff1a;1 登录 949.删除数字0 (课程A&#xff09; 难度&#xff1a;1 登录 950.垒三角形 (课程A&#xff…

RabbitMQ 第二天 高级 7 RabbitMQ 高级特性 7.6 延迟队列

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级7 RabbitMQ 高级特性7.6 延迟队列7.6.1 延迟队列概述7.6.2 代码实现7.6.3 小结第二天 高级 7 RabbitMQ 高级特性 7.6 延迟队列 7.6.1 延迟队列概述 【重点】 延…

Leetcode 剑指 Offer II 007. 数组中和为 0 的三个数

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i…

微信开放平台之第三方平台开发,从哪里入手?

大家好&#xff0c;我是悟空码字 疫情之下&#xff0c;最近有不少兄弟没有挺进决赛&#xff0c;半途成了小羊人&#xff0c;可谓是出师未捷身先死。话说回来&#xff0c;不管怎么样&#xff0c;尽量保护好自己&#xff0c;能越晚变羊越好。 开始说正事&#xff0c;不管是自己…

46_SDIO实验

目录 SDIO相关结构体 SDIO初始化结构体 SDIO命令初始化结构体 SDIO数据初始化结构体 硬件连接 实验源码 SDIO相关结构体 标准库函数对SDIO外设建立了三个初始化结构体&#xff0c;分别为SDIO初始化结构体SDIO_InitTypeDef, SDIO命令初始化结构体SDIO_CmdInitTypeDef和SD…

小技巧2:Python 实现阿拉伯数字转化为中文数字

大家好&#xff0c;我是Kamen Black君&#xff0c;今天给大家介绍一个小技巧&#xff1a;如何用Python 代码实现阿拉伯数字转化为中文数字。 都说光阴似箭&#xff0c;日月如梭&#xff0c;2022年的车轮很快也要驶向了终点。不知道大家在平常的生活中&#xff0c;有没有碰到过…

【Python】Beta分布详解

投硬币&#xff0c;硬币是正还是反&#xff0c;这属于两点分布的问题。 疯狂投硬币&#xff0c;正面出现的次数&#xff0c;服从二项分布&#xff1a;【Python】从二项分布到泊松分布 二项分布中&#xff0c;若特定时间内的伯努利试验次数趋于无穷大&#xff0c;那么在某一时…

【Linux】进程控制(进程创建、进程终止、进程等待、进程替换)

文章目录一、进程创建1.1 认识系统调用 fork1.2 理解 fork 的返回值1.3 写时拷贝策略二、进程终止2.1 main 函数的返回值2.2 进程退出的几种情况(&#x1f31f;)2.3 进程退出码2.4 终止正常进程&#xff1a;return、exit、_exit ⭐2.5 站在 OS 角度&#xff1a;理解进程终止三、…

RV1126笔记二十:吸烟行为检测及部署<七>

若该文为原创文章,转载请注明原文出处。 部署到RV1126,Demo测试 一、介绍 通过训练转换后,得到了RKNN模型,接下来使用rknn_model_zoo里自带的C demo来测试模型是不是可以在RV1126上运行。 C demo直接编译是编译不过的,需要自己移植. 根据C demo提供的README,可以看出…

7段数码管和打印机接口

目录 七段发光二级管显示器接口&#xff08;重点&#xff09; 打印机适配器&#xff08;重点&#xff09; 例题 补充两个芯片(了解&#xff09; 数据输出寄存器 数据输入三态缓冲器 七段发光二级管显示器接口&#xff08;重点&#xff09; 灯泡的题最难就是7段数码管。重点…

【Web开发】Python实现Web服务器(Ubuntu下调试Flask)

&#x1f37a;基于Python的Web服务器系列相关文章编写如下&#x1f37a;&#xff1a; &#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask快速入门&#xff09;&#x1f388;&#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask案例测试&#xff09;&a…

工厂卖家如何借助TikTok突围?

众所周知&#xff0c;TikTok已然成为全球最受欢迎的社交媒体之一&#xff0c;拥有巨大的流量池&#xff0c;对于跨境电商卖家来说&#xff0c;TikTok也是最大的站外流量来源。作为月活跃用户接近16亿的应用程序&#xff0c;TikTok的发展速度让很多社交媒体平台望尘莫及&#xf…

node.js+uni计算机毕设项目基于微信小程序寸金校园租车平台(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…