java分页工具集合

2023-11-06

说明

更新时间:2020/11/6 17:36,更新完基本内容

本文现对目前常见的java分页工具进行一次总结与记录,主要是基于自己的主观来进行总结,本文会持续更新,不断地扩充

注意:本文仅为记录学习轨迹,如有侵权,联系删除

一、PageHelper

这个工具只要是使用过mybatis的人基本都听过,这个工具个人觉得只适用于mytatis这个持久层框架,而且在使用上有很多的坑。

(1)pom

新建springboot项目之后,引入对应的pom坐标依赖

        <!-- mybatis-spring-boot-starter :整合-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>

        <!--Druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>

        <!--log4j:日志框架,建议引入-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--pageHelper分页工具-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>

(2)配置

引进坐标依赖后需要进行yml文件的配置

#参考链接:https://www.cnblogs.com/hellokuangshen/p/12497041.html
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test1?userSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    password: 123
    username: root

    #切换为druid数据源
    type: com.alibaba.druid.pool.DruidDataSource

    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #druid 数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    #需要导入log4j依赖
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500




# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  reasonable: true  #开启优化,如果开启优化,在分页页码结果没有数据的时候,会显示有数据的页码数据
  supportMethodsArguments: true #是否支持接口参数来传递分页参数,默认false
  pageSizeZero: false #pageSize=0 返回所有
  params: count=countSql



mybatis:
  mapper-locations: classpath*:mapper/**/*.xml

(3)使用

在使用之前必须要注意一件事,pageHelper只适用于mybatis,如果没有经过mybayis直接进行分页就会分页失败

正确使用

@Override
public PageInfo<User> pageQuery() {
    /**
     * 注意顺序不能乱,PageHelper.startPage设置完之后,下一句必须用mapper进行查询,
     * 也就是说userMapper.queryAll();这个语句必须放在PageHelper.startPage的下一句,不然分页失败
     * 然后再 new PageInfo<>(list);返回分页结果
     * 
     * 
     * 同时注意:mybatis的sql语句后面不能有";"结束符号
     */

    //设置分页参数,当前页数1,每页数据条数5条
    PageHelper.startPage(1, 5);

    //查询数据
    List<User> list = userMapper.queryAll();

    //分页查询
    PageInfo<User> userPageInfo = new PageInfo<>(list);

    return userPageInfo;
}



@Override
public PageInfo<User> queryQueryAllByUserDto(UserDto userDto) {
    /**
     * 多条件的分页查询,查询条件用UserDto封装好
     */
    

    //分页参数默认值
    Integer pageNum = 1;
    Integer pageSize = 10;

    if (userDto != null && userDto.getPageIndex() != null) {
        pageNum = userDto.getPageIndex();
    }

    if (userDto != null && userDto.getPageSize() != null) {
        pageSize = userDto.getPageSize();
    }

    //分页参数设置
    PageHelper.startPage(pageNum,pageSize);


    //多条件查询
    List<User> userList = userMapper.queryAllByUserDto(userDto);

    //分页
    PageInfo<User> page = new PageInfo<>(userList);

    return page;
}

同时注意查询的sql语句不能有分号,不然会分页失败
在这里插入图片描述

注意上面语句的使用顺序,不然会分页失败,同时注意sql语句的结尾不能有“;”符号

错误使用

出现分页失败的情况有很多种,例如不是用的mybatis框架,语句的调用顺序不对或者用的mybatis但是sql语句后面用了分号结束sql等

    public PageInfo<User> pageQuery() {
        /**
         * 这种使用分页会失败,因为语句的调用顺序不对
         */


        //查询数据
        List<User> list = userMapper.queryAll();

        //设置分页参数,当前页数1,每页数据条数5条
        PageHelper.startPage(1, 5);

        //分页查询
        PageInfo<User> userPageInfo = new PageInfo<>(list);

        return userPageInfo;
    }

分页失败,设置的分页参数失效
在这里插入图片描述

二、mybatis-plus的分页插件

这个插件是mybats-plus用的一个分页插件,它在mybatis-plus里面有现应的集成,所以这个要结合mybatis-plus一起使用。

(1)pom

新建完springboot项目后,引入项目的坐标依赖

        <!--Druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>

        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>


        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

        <!--mybatis-plus代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.0</version>
        </dependency>

        <!--mybatis-plus代码生成器默认模板-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>

        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.4.7</version>
        </dependency>

(2)配置

mybatis-plus的分页配置可以参考mybatis-plus官网,这里给出我这边的配置

新建config包,创建配置类

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName : MybatisPlusConfig
 * @Description : mybatis-plus配置分页插件
 * @Author : CJH
 * @Date: 2020-11-05 17:14
 */
@MapperScan("com.zsc.mapper")
@Configuration
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

然后是yml的文件配置

#参考链接:https://www.cnblogs.com/hellokuangshen/p/12497041.html
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test1?userSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    password: 123
    username: root

    #切换为druid数据源
    type: com.alibaba.druid.pool.DruidDataSource

    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #druid 数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    #需要导入log4j依赖
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml

(3)使用

它的使用在mybatis-plus中已经有集成了,使用的时候也必须按照它的说明来使用,按照官网,这个分页工具的使用要结合mybatis-plus的条件构造器来使用,下面给出两个例子,一个是简单的分页查询,一个是多条件分页查询

package com.zsc.service.impl;

import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zsc.dto.UserDto;
import com.zsc.entity.User;
import com.zsc.mapper.UserMapper;
import com.zsc.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

/**
 * <p>
 * user 服务实现类
 * </p>
 *
 * @author 最强菜鸟
 * @since 2020-11-04
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Resource
    private UserMapper userMapper;

    @Override
    public Page<User> pageQuery() {

        //设置分页的当前页以及每页的数据条数
        Page<User> userPage = new Page<>(1,5);

        //通过条件构造器设置设置要查询的数据,条件构造器什么都不设置的情况下默认查询所有
        QueryWrapper<User>  userQueryWrapper= new QueryWrapper<>();

        //分页查询用selectPage这个方法
        Page<User> page = userMapper.selectPage(userPage, userQueryWrapper);

        return page;
    }

    @Override
    public Page<User> pageQueryByUserDto(UserDto userDto) {

        //设置请求页数,默认1页5条数据
        Page<User> userPage = new Page<>(1,5);
        if (userDto.getPageIndex()!=null) {
            userPage.setCurrent(userDto.getPageIndex());
        }
        if(userDto.getPageSize() != null){
            userPage.setSize(userDto.getPageSize());
        }



        //条件构造器构造查询条件
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();


        //主要是name,age,password三个字段构成的多条件查询
        if(!StringUtils.isEmpty(userDto.getName())){
            userQueryWrapper.like("name",userDto.getName());
        }
        if(userDto.getAge() != null){
            userQueryWrapper.like("age",userDto.getAge());
        }
        if(!StringUtils.isEmpty(userDto.getPassword())){
            userQueryWrapper.like("password",userDto.getPassword());
        }


        //分页查询
        Page<User> page = userMapper.selectPage(userPage, userQueryWrapper);

        return page;
    }
}

三、自定义工具类

上面的两个分页工具分别对应mytatis和mybatis-plus框架,只有在对应的框架下使用才有分页效果,但有些时候我们只是写一个简单的增删改查,甚至都不是springboot项目和maven项目,就只是用最传统的jdbc连接进行数据库操作,这个时候就需要用到我们的自定义分页工具类了,下面的这个工具类是在网上找的一个个人觉得比较好的一个工具类,然后进行了相应的修改,得到一个最符合自己需求的一个分页工具类。

(1)创建分页工具类

这里创建了一个普通的java项目,新建一个config包用来存放该分页工具类

package com.zsc.utils;

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

/**
 * @ClassName : PageUtil
 * @Description : 自定义分类工具
 * @Author : CJH
 * @Date: 2020-11-06 10:36
 */
public class PageUtil<T> {

    /**
     * 要分页的list数据
     */
    private List<T> myList;

    /**
     * 请求的页号,默认第1页
     */
    private int pageNum = 1;

    /**
     * 每页条数,默认10条
     */
    private int pageSize = 10;

    /**
     * 分页后的数据
     */
    private List<T> data;

    /**
     * 分页后的总页数
     */
    private int pageCount;

    /**
     * 总数据条数
     */
    private int recordCount;

    public boolean isHasPrePage() {
        return isHasPrePage;
    }

    public void setHasPrePage(boolean hasPrePage) {
        isHasPrePage = hasPrePage;
    }

    public boolean isHasNextPage() {
        return isHasNextPage;
    }

    public void setHasNextPage(boolean hasNextPage) {
        isHasNextPage = hasNextPage;
    }

    /**
     * 上一页
     */
    private int prePageIndex;
    /**
     * 下一页
     */
    private int nextPageIndex;

    /**
     * 是否第一页
     */
    private boolean firstPage; // 是否第一页

    /**
     * 是否最后一页
     */
    private boolean lastPage; // 是否最后一页

    /**
     * 是否有上一页
     *
     * @return
     */
    private boolean isHasPrePage;

    /**
     * 是否有下一页
     *
     * @return
     */
    private boolean isHasNextPage;


//    /**
//     * 返回分页结果集合
//     *
//     * @return
//     */
//    public PageUtil<T> getResult() {
//        PageUtil<T> p = new PageUtil<>();
//
//        //总数据条数
//        p.setRecordCount(this.recordCount);
//
//        //总页数
//        p.setPageCount(this.pageCount);
//
//
//        //每页的数据条数
//        p.setPageSize(this.pageSize);
//
//        //是否有上一页
//        p.setHasPrePage(this.isHasPrePage);
//
//        //是否有下一页
//        p.setHasNextPage(this.isHasNextPage);
//
//        //上一页页码
//        p.setPrePageIndex(this.prePageIndex);
//
//        //下一页页码
//        p.setNextPageIndex(this.nextPageIndex);
//
//        //分页数据
//        p.setData((ArrayList<T>) this.data);
//
//        //请求的页数
//        p.setPageNum(this.pageNum);
//
//        return p;
//    }


    /**
     * 设置请求的页数
     *
     * @param pageNum
     */
    public void setPageNum(int pageNum) { // 每当页数改变,都会调用这个函数,筛选代码可以写在这里
        this.pageNum = pageNum;

        // 上一页,下一页确定
        prePageIndex = pageNum - 1;
        nextPageIndex = pageNum + 1;
        // 是否第一页,最后一页
        if (pageNum == 1) {
            firstPage = true;
        } else {
            firstPage = false;
        }
        if (pageNum == pageCount) {
            lastPage = true;
        } else {
            lastPage = false;
        }

        // 筛选工作
        data = new ArrayList<T>();
        for (int i = (pageNum - 1) * pageSize; i < pageNum
                * pageSize
                && i < recordCount; i++) {
            data.add(myList.get(i));
        }
    }

    /**
     * 返回请求页数
     *
     * @return
     */
    public int getPageNum() {
        return pageNum;
    }

    /**
     * 返回要分页的list数据
     *
     * @return
     */
    public List<T> getMyList() {
        return myList;
    }

    @Override
    public String toString() {
        return "{" +
                "recordCount=" + recordCount+
                ", pageCount=" + pageCount +
                ", pageNum=" + pageNum +
                ", pageSize=" + pageSize +
                ", isPrePage=" + isHasPrePage +
                ", isNextPage=" + isHasNextPage +
                ", prePageIndex=" + prePageIndex +
                ", nextPageIndex=" + nextPageIndex +
                ", data=" + data +
                '}';
    }

    /**
     * 设置要分页的数据
     *
     * @param myList
     */
    public PageUtil<T> setMyList(List<T> myList) {
        this.myList = myList;
        // 计算条数
        recordCount = myList.size();
        // 计算页数
        if (recordCount % pageSize == 0) {
            pageCount = recordCount / pageSize;
        } else {
            pageCount = recordCount / pageSize + 1;
        }



        //计算是否有上一页
        if(pageNum == 1){
            isHasPrePage = false;
        }else{
            isHasPrePage = true;
        }

        //计算是否有下一页
        if(pageNum == pageCount){
            isHasNextPage = false;
        }else {
            isHasNextPage = true;
        }


        // 筛选工作
        data = new ArrayList<T>();
        for (int i = (pageNum - 1) * pageSize; i < pageNum
                * pageSize
                && i < recordCount; i++) {
            data.add(myList.get(i));
        }

        return this;
    }

    /**
     * 返回每页请求的数据条数
     *
     * @return
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 设置每页的请求条数
     *
     * @param pageSize
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 返回分页后的数据
     *
     * @return
     */
    public List<T> getData() {
        return data;
    }

    public void setData(ArrayList<T> data) {
        this.data = data;
    }


    public int getPageCount() {
        return pageCount;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public int getRecordCount() {
        return recordCount;
    }

    public void setRecordCount(int recordCount) {
        this.recordCount = recordCount;
    }

    public int getNextPageIndex() {
        return nextPageIndex;
    }

    public void setNextPageIndex(int nextPageIndex) {
        this.nextPageIndex = nextPageIndex;
    }

    public int getPrePageIndex() {
        return prePageIndex;
    }

    public void setPrePageIndex(int prePageIndex) {
        this.prePageIndex = prePageIndex;
    }

    public boolean isFirstPage() {
        return firstPage;
    }

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

    public boolean isLastPage() {
        return lastPage;
    }

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


}

(2)使用

下面给出两个例子,其中User类是自定义的类

package com.zsc.service;

import com.zsc.entity.User;
import com.zsc.utils.PageUtil;

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

/**
 * @ClassName : PageService
 * @Description :
 * @Author : CJH
 * @Date: 2020-11-06 13:05
 */
public class PageService {

    static List<String> getListString(){
        ArrayList<String> list = new ArrayList<String>();

        for (int i = 0; i < 36; i++) {
            list.add("hello"+i);
        }

        return list;
    }

    static List<User> getListUser(){
        ArrayList<User> list = new ArrayList<User>();

        for (int i = 0; i < 36; i++) {
            User user = new User(i,"zs"+i,10+i,"男");
            list.add(user);
        }
        return list;
    }


    public static void main(String[] args) {
        
        //例子1
        List<String> listString = getListString();
        PageUtil<String> pageUtil = new PageUtil<>();
        //请求页数
        pageUtil.setPageNum(1);
        //每页是数据条数
        pageUtil.setPageSize(4);
        //将要分页的数据传入,得到返回的分页结果
        PageUtil<String> list = pageUtil.setMyList(listString);
        System.out.println("list = " + list);



        //例子2
        List<User> listUser = getListUser();
        PageUtil<User> userPageUtil = new PageUtil<>();
        userPageUtil.setPageNum(1);
        userPageUtil.setPageSize(10);
        PageUtil<User> userPageUtil1 = userPageUtil.setMyList(listUser);
        System.out.println("userPageUtil1 = " + userPageUtil1);


    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java分页工具集合 的相关文章

随机推荐

  • C# SuperSocket 手把手教你入门 傻瓜教程---11(FixedSizeReceiveFilter - 固定请求大小协议)不使用COMMAND

    SuperSocket内置的常用协议实现模版如下 1 TerminatorReceiveFilter SuperSocket SocketBase Protocol TerminatorReceiveFilter SuperSocket S
  • linux命令:修改用户密码

    修改用户密码用passwd命令 假设现在已经用root用户登陆 1 修改root用户密码 在终端直接输入 root armbian passwd New password 输入第一次密码 Retype new password 输入第二次密
  • 3个字节的空txt文本文件

    运行下面代码可以建立一个3个字节的空txt文本文件 想了解其原因的请参考文本文件的编码方式和unicode的具体资料 google上就有很多 System IO FileStream fs new System IO FileStream
  • matlab实现数值积分 【一】(trapz函数)

    目录 总述 函数调用格式 应用举例 例1 梯形法求积分 例2 不同步长对积分结果的影响 总述 数值积分问题是传统数值分析课程中的重要内容 如果被积函数的数学表达式未知 则需要由实测数据通过梯形算法求出积分的近似值 本文将介绍被积函数的数学表
  • 门面设计模式

    github GitHub QiuliangLee pattern 设计模式 1 什么是门面设计模式 门面设计模式是一种软件设计模式 也被称为外观 Facade 模式 它提供了一个简单的接口 让客户端能够访问复杂系统中的一组接口 通过门面模
  • 打包部署也这么内卷--springboot项目的打包及一键服务器部署

    一 环境准备 1 cenos7服务器一台 2 更换yum源 yum install y wget mv etc yum repos d CentOS Base repo etc yum repos d CentOS Base repo ba
  • C++常见编译WARNING小结

    首先要说的是大家不要对Warning视而不见 有时候通过Warning确实可以找到一些隐患 其次 未来新增代码应不允许Warning出现 有Warning需要修改掉 以下是常见的Warning小结 常见十大Warning 1 warning
  • 对象序列化(2):objectMapper.readValue详解

    1 反序列化方式 1 简单的直接Bean class 2 复杂的用 TypeReference 2 反序列化方法 首先说明 readValue 针对String 一共有3个重载 如下 public
  • 【UE4】4.26安卓打包流程

    前言 本教程适用于UE4 26 文章最后部分有常见问题解决与性能优化 教程开始 1 下载 Android Studio最新版 默认安装 请先关闭UE相关程序 2 打开Android Studio if启动时提示access SDK错误 点C
  • FPGA实现Cordic算法——向量模式

    FPGA实现Cordic算法 向量模式 FPGA实现Cordic算法 向量模式 1 cordic算法基本原理 2 FPGA实现cordic算法向量模式 i FPGA串行实现cordic ii FPGA流水线实现cordic iii 实验结果
  • 音视频是怎样实现传输的

    音视频传输时的基本步骤 1 发起会话 Sip协议 2 编码 硬件编码 软件编码 3 传输 RTP 4 解码 硬件解码 软件解码 5结束会话 Sip协议 视频格式 视频数据格式可以发展分为一个适合本地播放的本地影像视频和适合在网络中播放的网络
  • 洞悉MySQL底层架构:游走在缓冲与磁盘之间

    觉得写的很好 特转载便记录 提起MySQL 其实网上已经有一大把教程了 为什么我还要写这篇文章呢 大概是因为网上很多网站都是比较零散 而且描述不够直观 不能系统对MySQL相关知识有一个系统的学习 导致不能形成知识体系 为此我撰写了这篇文章
  • SQLyog中如何导入mysql数据库

    SQLyog是一种mysql的图形界面软件 有时需要把外部的mysql数据库导入到SQLyog里面去 下面是详细的操作步骤 1 打开SQLyog软件 输入密码 点击连接 打开软件界面 如下图所示 2 创建一个与要导入数据库相同名字的数据库
  • Maven项目报错:Plugin ‘maven-project-info-reports-plugin‘ not found

    一 报错原因 在创建项目的时候 没有加入依赖 二 解决办法 导入相关的依赖即可 可在pom xml中加入下面的依赖代码
  • 蓝桥杯 马虎的算式

    标题 马虎的算式 小明是个急性子 上小学的时候经常把老师写在黑板上的题目抄错了 有一次 老师出的题目是 36 x 495 他却给抄成了 396 x 45 但结果却很戏剧性 他的答案竟然是对的 因为 36 495 396 45 17820 类
  • 【React】 20课 解决reactn内的redux异步执行函数报错方法

    redux内异步函数执行如图所示 本项目的目录结构如下 redux内实现异步方法首先我们需要安装redux thunk cnpm install redux thunk save 在创建数据仓库的过程我们通过compose方法与applyM
  • 【OpenCV学习笔记】【函数学习】八(序列数据结构)

    序列是内存存储器中可以存储的一种对象 序列是某种结构的链表 OpenCV中 序列可以存储多种不同的结构 你可以将序列想象为许多编程语言中都存在的容器类或容器类模版 如C 中的vector 学列在内存被实现为一个双端队列 deque 因此序列
  • 修复mysql语句_怎样修复已经损坏的SQL数据库?

    展开全部 有两种方法 一种方法使用mysql的check table和repair table 的sql语句 另一种方法是使用MySQL提供的多个myisamchk isamchk数据检测恢复62616964757a686964616fe7
  • u-view使用轮播组件u-swiper不能正常显示

    问题 写了半天一直显示的是播放视频 但是我的路径是图片 一直黑屏 解决方法 Swiper 轮播图 uView 2 0 全面兼容nvue的uni app生态框架 uni app UI框架 设置type类型
  • java分页工具集合

    java分页工具集合 说明 一 PageHelper 1 pom 2 配置 3 使用 正确使用 错误使用 二 mybatis plus的分页插件 1 pom 2 配置 3 使用 三 自定义工具类 1 创建分页工具类 2 使用 说明 更新时间