MyBatis-Plus结合Layui实现分页方法

MyBatis-Plus 使用简单,内置通用 Mapper、通用 Service,仅仅通过少量配置,即可实现单表大部分 CRUD 操作。下面介绍使用 service 中的 page 方法结合 Layui 前端框架,较快速的实现分页效果。

在 pom.xml 中引入依赖

<!--  mybatisplus -->
<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-boot-starter</artifactId>
 <version>${mybatisplus.version}</version>
</dependency>

使用 MyBatis-Plus 内置的 mapper。首先编写好实体类,然后编写 mapper 接口,并继承 BaseMapper。BaseMapper 中包含大部分的 CRUD 方法,不需要编写 mapper.xml 。如果需要多表查询的话,可根据自己的业务需要编写 mapper.xml 。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.systop.pojo.School;
import org.springframework.stereotype.Repository;

/**
 * @author: Miranda
 * @Date: 2021/8/2
 * @description:
 */
@Repository
public interface SchoolMapper extends BaseMapper<School> {

}

使用 MyBatis-Plus 内置的 service。编写 service 接口,并继承 IService。

import com.baomidou.mybatisplus.extension.service.IService;
import com.systop.pojo.School;

/**
 * @author: Miranda
 * @Date: 2021/8/2
 * @description:
 */
public interface SchoolService extends IService<School> {

}

编写 service 实现类,继承 MyBatis-Plus 的 ServiceImpl ,同时实现 SchoolService 接口。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.systop.mapper.SchoolMapper;
import com.systop.pojo.School;
import com.systop.service.SchoolService;
import org.springframework.stereotype.Service;

/**
 * @author: Miranda
 * @Date: 2021/8/2
 * @description:
 */
@Service
public class SchoolServiceImpl extends ServiceImpl<SchoolMapper, School> implements SchoolService {

}

使用 MyBatis-plus 分页,必须写一个配置类

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author: Miranda
 * @Date: 2021/8/3
 * @description:
 */
@Configuration
@MapperScan("com.systop.mapper")
public class MybatisPlusConfig {
    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

需要一个 Layui 返回值的类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;

/**
 * @author: Miranda
 * @Date: 2021/8/2
 * @description:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LayuiPage<T> {

    private int code;
    private String msg;
    private Long count;
    private List<T> data;

    /**
     * 只有总条数和分页数据的构造方法
     * @param count 总条数
     * @param data 分页数据
     */
    public LayuiPage( Long count, List<T> data) {
        this.count = count;
        this.data = data;
    }
}

controller 类

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.systop.pojo.School;
import com.systop.service.SchoolService;
import com.systop.utils.LayuiPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author: Miranda
 * @Date: 2021/8/2
 * @description:
 */
@Controller
public class SchoolController {

    @Autowired
    private SchoolService schoolService;

    @RequestMapping("schoolList")
    @ResponseBody
    public LayuiPage schoolList(int page,int limit){
        //传入分页的属性
        Page<School> pager = new Page<>(page,limit);
        //分页查询学校信息
        IPage<School> schoolPage = schoolService.page(pager, new QueryWrapper<>());
        // schoolPage.getTotal() 信息总条数
        // schoolPage.getRecords() 分页数据
        return new LayuiPage(schoolPage.getTotal(),schoolPage.getRecords());
    }
}

Layui 页面代码实现

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
 <meta charset="utf-8">
 <title>学校信息管理</title>
 <meta name="renderer" content="webkit">
 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
 <!-- 引入layuiadmin的样式 -->
 <link rel="stylesheet" href="../layuiadmin/layui/css/layui.css" rel="external nofollow"  th:href="@{layuiadmin/layui/css/layui.css}" rel="external nofollow"  media="all">
 <link rel="stylesheet" href="../layuiadmin/style/admin.css" rel="external nofollow"  th:href="@{layuiadmin/style/admin.css}" rel="external nofollow"   media="all">
</head>
<body>
 <div class="layui-fluid">
  <div class="layui-row layui-col-space15">
   <div class="layui-col-md12">
    <div class="layui-card">
     <div class="layui-card-body">
      <!-- id="test-table-simple" -->
      <table class="layui-table" id="test-table-simple" lay-filter="curd" ></table>
     </div>
    </div>
   </div>
  </div>
 </div>
 <script src="../layuiadmin/layui/layui.js" th:src="@{layuiadmin/layui/layui.js}"></script>
 <script>
  layui.use(['layer', 'table', 'element','form', 'layedit','util'], function(){
   var layer = layui.layer, //弹层
     table = layui.table, //表格
     element = layui.element, //元素操作
     form = layui.form,
     layedit = layui.layedit,
     util = layui.util;
   table.render({
    elem: '#test-table-simple',
    url: 'schoolList',
    method: 'post',
    cellMinWidth: 80, //全局定义常规单元格的最小宽度
    cols: [
     [{type: 'checkbox'},
     {field: 'sid', title: 'ID', sort: true, align: 'center', width:80},
     {field: 'sname', title: '名称', align: 'center'},
     {field: 'arrangement', title: '层次', align: 'center'},
     {title: '操作', align: 'center', toolbar: '#bar', width:150, fixed: 'right'}]
    ],
    // field 的值和实体类属性名称保持一致,如果数据表格没有渲染,可以看看浏览器解析后的名称
    done: function(res){
    // 在控制台输出后台传送的数据
     console.log(res);
    },
    page: true, //是否显示分页
    limits: [5, 7, 10],
    limit: 5 //每页默认显示的数量
   });
  });
 </script>
</body>
</html>

页面效果如下:

排雷:
刚开始定义 Layui 返回数据类的时候,将 code 定义成 Integer 类型,并且在 controller 类中使用的是两个参数的构造方法,导致传给前台数据中 code 的值是 null,所以数据渲染一直报 “返回的数据状态异常”。

解决:
将 code 定义成 int 类型,或者在 controller 中使用时,传四个参数。

到此这篇关于MyBatis-Plus结合Layui实现分页方法的文章就介绍到这了,更多相关MyBatis-Plus Layui分页内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis-Plus分页插件不生效的解决方法

    描述 项目中用到boot 整合 mybatis-plus , 个人在使用分页条件查询的时候一直查不出 total, pages, 终于找到原因了. 环境 <springboot.version>2.1.5.RELEASE</springboot.version> <mybatisplus.version>3.1.1</mybatisplus.version> 配置 1.自定义MybatisPlusConfig 配置分页插件 package com.eyela

  • springboot整合mybatis-plus 实现分页查询功能

    建一个config类 @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); } } 编写controller post /article/search/{page}/{size} @PostMapping("search/{page}/{size}") p

  • mybatis-plus分页查询的实现示例

    按照官方文档进行的配置:快速开始|mybatis-plus 引入依赖: <!-- 引入mybatisPlus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--

  • oracle+mybatis-plus+springboot实现分页查询的实例

    今天蠢了一上午才弄出这玩意,话不多说上代码! 1.建一个配置类 package com.sie.demo.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInte

  • springboot整合mybatis-plus实现多表分页查询的示例代码

    1.新建一个springboot工程 2.需要导入mybatis和mybatis-plus的依赖文件 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <dependency> &l

  • 解决Mybatis-Plus操作分页后数据失效问题

    业务场景 我们知道在使用PageHelper分页插件时,会对执行PageHelper.startPage(pageNum, pageSize);方法后的第一条查询语句进行分页操作.在开发中总会遇到这样的业务情景,在进行分页查询后,需要对获得的列表数据包装成另一种类型,此时需要对新类型的列表进行分页,然而由于PageInfo<T>因为泛型的原因,导致处理后的列表不能加入到该类中. 如,我在数据库分页后查询到的类为PageInfo<User>,此时改类中的list属性为User,在当前

  • Mybatis-Plus 多表联查分页的实现代码

    上一节,简单讲述了 Mybatis-Plus 搭建与使用入门,这一节,简单讲一下如何使用 MP 实现多表分页. 分析 使用的工程,依旧是 spring-boot,关于分页,官网给出了一个单表的demo,其实多表分页实现原理相同,都是通过 mybatis 的拦截器 (拦截器做了什么?他会在你的 sql 执行之前,为你做一些事情,例如分页,我们使用了 MP 不用关心 limit,拦截器为我们拼接.我们也不用关心总条数,拦截器获取到我们 sql 后,拼接 select count(*) 为我们查询总条

  • MyBatis-Plus结合Layui实现分页方法

    MyBatis-Plus 使用简单,内置通用 Mapper.通用 Service,仅仅通过少量配置,即可实现单表大部分 CRUD 操作.下面介绍使用 service 中的 page 方法结合 Layui 前端框架,较快速的实现分页效果. 在 pom.xml 中引入依赖 <!-- mybatisplus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus

  • layui+jquery支持IE8的表格分页方法

    工具(框架.插件) 1.layui-v1.0.9 2.jquery-1.8.3 代码 1.jsp代码(可忽略jsp部分,转成html) <%@ page language="java" contentType="text/html; charset=utf-8"%> <%@ include file="/common/include/taglib.jsp"%> <% <html> <head>

  • 基于LayUI分页和LayUI laypage分页的使用示例

    本文介绍了LayUI分页,LayUI动态分页,LayUI laypage分页,LayUI laypage刷新当前页,分享给大家,具体如下: 效果图:  一.引用js依赖 主要是jquery-1.11.3.min.js 和 layui.all.js , json2.js用来做json对象转换的 <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.11.3.m

  • springMVC+velocity实现仿Datatables局部刷新分页方法

    因为项目中之前的模块用的分页插件是Datatables,很方便,但是新做的模块表格中的布局有变化,Datatables插件满足不了了.为了风格的统一,同时也不希望查询参数再传递回显在页面上,所以就采用局部刷新分页的实现方案. 实现方案是这样的,将表格部分提取出来,用来作为页面局部刷新的部分,文件名为list-data.vm <table class="table text-center table_acolor"> <thead> <tr> <

  • SpringBoot整合mybatis结合pageHelper插件实现分页

    SpringBoot整合mybatis分页操作 SpringBoot整合Mybatis进行分页操作,这里需要使用Mybatis的分页插件:pageHelper, 关于pageHelper的介绍,请查看官方文档: https://pagehelper.github.io/ 1.使用前配置 关于pageHelper的使用配置,主要有以下2个步骤: 1.1.在pom文件中导入pageHelper依赖 <dependency> <groupId>com.github.pagehelper&

  • Mybatis迁移到Mybatis-Plus的实现方法

    由于原来项目中已有很多功能和包,想迁移到Mybatis-Plus,旧的还是继续用 Mybatis和PageHelper,新的准备全部用Mybatis-Plus.迁移遇到了各种错误,记录一下,特别是这个错误:mybatis-plus org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):,花了差不多一天时间,都差点准备撤子模块了,将旧的一个模块,新的一个模块. 一.Mybatis-Plus依赖

  • MyBatis Plus 实现多表分页查询功能的示例代码

    在Mybatis Plus 中,虽然IService 接口帮我们定义了很多常用的方法,但这些都是 T 对象有用,如果涉及到 多表的查询,还是需要自定义Vo 对象和自己编写sql 语句,Mybatis Plus提供了一个Page 对象,查询是需要设置其中的 size 字段 和 current 字段的值 一.分页配置 可以直接使用selectPage这样的分页,但返回的数据确实是分页后的数据,但在控制台打印的SQL语句其实并没有真正的物理分页,而是通过缓存来获得全部数据中再进行的分页,这样对于大数据

  • 基于Mybatis Plus实现多表分页查询的示例代码

    注意:Mybatis Plus 3.0.7 版本才开始用[自定义sql]+[QueryWrapper],低版本不能使用,还是老实写SQL进行条件拼接 1.源码分析 在Wrapper<T>接口中就有如下方法 /** * 获取自定义SQL 简化自定义XML复杂情况 * 使用方法:自定义sql + ${ew.customSqlSegment} * 1.逻辑删除需要自己拼接条件 (之前自定义也同样) * 2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦) * 3.用法 ${e

  • 解决Mybatis的@Param()注解导致分页失效的问题

    @Param注解导致分页失效-分页拦截器 问题描述 在使用mybatis分页时,使用@Param注解传入了两个对象,分页失效,查询出的总是全部的数据. 出现问题时,分页策略为:分页拦截器实现的分页 [错误写法] service写法: public Page<Entity> getByNidAndEntity(Page<Entity> page,String nid,Entity entity){ entity.setPage(page); page.setList(dao.getB

  • MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

    目录 1 MyBatisPlusConfig 2 UserPagination 3 Mapper 3.1 UserMapper.java 3.2 UserMapper.xml 4 Service 4.1 UserService 4.2 UserServiceImpl 5 UserController 6 调试结果 6.1 QueryWrapper查询分页 6.2 SQL查询分页 1 MyBatisPlusConfig MyBatisPlus配置类. package com.config; imp

随机推荐