浅谈mybatisPlus的Ipage分页和map参数的问题

目录
  • mybatisPlus的Ipage分页和map参数
    • 第一种情况
    • 第二种情况
  • mybatisPlus IPage分页常见问题(坑)
    • 1.TooManyResultsException

mybatisPlus的Ipage分页和map参数

前提:先有一个map类型的参数

Map params= new HashMap();
params.put("name","张三");
params.put("age","23");

第一种情况

List<Map<String,Object>> selectList(@Param("params") HashMap  params);

这种也是我们最常用的一种

不管参数是什么类型都可以省略,但是要写上返回值类型(根据自己的情况)

<select id="selectList" resultType="java.util.HashMap">

取值时只需要在xml文件内用map中的键值来取数据

<if test="name != '' and name != null">
    AND name=#{name}
</if>
<if test="age != '' and age != null">
    AND age=#{age}
</if>

第二种情况

dao层声明参数和返回值类型

IPage selectAll(IPage page,@Param("params") HashMap  params);
<select id="selectAll" resultType="java.util.HashMap">

一般我们在xxx.xml里面取map的值都是直接通过#{键}来取的

但是当传入的参数不止一个时,取map里面的值就需要用参数去取

<if test="params.name != '' and params.name != null">
    AND name=#{params.name}
</if>
<if test="params.age != '' and params.age != null">
    AND age=#{params.age}
</if>

这个params就是dao层传入的map类型的参数

直接通过键来取值无法取到值

mybatisPlus IPage分页常见问题(坑)

观前提示:

本文所使用的IDEA版本为ultimate 2019.1,JDK版本为1.8.0_141。

1.TooManyResultsException

最近在使用Mybatis-plus的IPage插件分页时,出现了以下的莫名其妙的错误

Resolved [org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 6]

然后检查我写的Controller、Service、Mapper、Mapper.xml,结果还是一无所获,以下是我的Mapper和Mapper.xml(大致内容一致)

Mapper

public interface ExampleMapper {
    IPage<EntityDto> selectEntityAndPage(@Param("param") Entity param, Page<Entity> page);
}

Mapper.xml的select部分

  <select id="selectEntityAndPage" parameterType="cn.com.example.enetity.Entity " resultType="cn.com.example.dto.EntityDto">
    select id, name from table
  </select>

百度了一下才发现了这个深坑

mybatis-plus 中page参数不在第一个位置,返回的结果集接收对象不被认为是一个集合,而放在第一位就没有问题。

所以我改写了Mapper参数的顺序

IPage<EntityDto> selectEntityAndPage(Page<Entity> page, @Param("param") Entity param);

问题解决。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

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

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

  • MybatisPlus的IPage失效的问题解决方案

    背景 之前做数据抽取的时候,搭了一个mybatis动态数据源切换的架子.方便他们写抽取的代码.今天同事问我,架子里面的mybatisplus的IPage失效了是什么问题.想了一下,应该是写动态数据源的时候,我自定义的mybatis的配置覆盖了已有的配置.于是我让他先把我写的配置进行删除,看是否正常.得到回复,删除后正常.那么到此问题原因找到,接下来的解决方法,只要在配置中增加分页器即可. 解决方案 建立一个分页器的bean配置 @Bean public PaginationInterceptor

  • Springboot中MyBatisplus使用IPage和Page分页的实例代码

    一.需求:实现Springboot中MyBatisplus使用IPage和Page分页 二.技术:MyBatisplus的IPage和Page 三.实现 1.代码结构 2.代码详情 (1)Controller package com.xkcoding.rbac.security.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; i

  • MyBatis-Plus 分页查询以及自定义sql分页的实现

    一.引言 分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页. 物理分页:相当于执行了limit分页语句,返回部分数据.物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景. 逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据.如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合. 那么MP中的物理分页怎么实现

  • mybatis-plus分页传入参数后sql where条件没有limit分页信息操作

    折腾了差不多两个小时,各种方法尝试,后来想想应该是where过滤后的数据量没有达到默认一页规定的数量所以干脆where就不显示limit信息了,试了一下还真是...这作者还真是把程序做的足够智能,可是这个智能也让我白白花掉了两个小时...还是自己太笨了-- 但是奇怪的是,如果我不设置QueryWrapper参数,where后面的分页限制又是可以出来的.百思不得其解作者的想法... 具体看代码: @Override public PageUtils queryPage(Map<String, Ob

  • 浅谈mybatisPlus的Ipage分页和map参数的问题

    目录 mybatisPlus的Ipage分页和map参数 第一种情况 第二种情况 mybatisPlus IPage分页常见问题(坑) 1.TooManyResultsException mybatisPlus的Ipage分页和map参数 前提:先有一个map类型的参数 Map params= new HashMap(); params.put("name","张三"); params.put("age","23"); 第一种

  • 浅谈Spark RDD API中的Map和Reduce

    RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RDD可以简单看成是一个数组.和普通数组的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理.因此,Spark应用程序所做的无非是把需要处理的数据转换为RDD,然后对RDD进行一系列的变换和操作从而得到结果.本文为第一部分,将介绍Spark RDD中与Map和Reduce相关的API中. 如何创建RDD? RDD可以从普通数组创建出来,

  • 浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    一.Oracle的主键Sequence设置简介 在Oracle数据库中不支持主键自增策略,它是通过Sequence序列来进行完成的,因此需要在MP中进行相关配置 二.相关配置如下 2.1.pom.xml 添加相关依赖 注意:由于oracle的授权问题,没办法从maven仓库中下载,因此可以手动从oracle官网中下载,并本地打包到仓库中 <!-- Oracle驱动: 因为Oracle授权的问题,不能从Maven的仓库中下载到Oracle驱动 --> <dependency> <

  • 浅谈MyBatis-plus入门使用

    一.初始化 SpringBoot 项目 首先使用 Spring Initializer 脚手架初始化一个 SpringBoot 项目.然后在 pom.xml 中添加相关的依赖: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency&g

  • 浅谈Mysql大数据分页查询解决方案

    目录 1.简介 2.分页插件使用 3.sql测试与分析 3.1 limit现象分析 3.2 解决之道 4 测试时走过的坑 4.1 百万数据内容都一样 4.2 写sql时,把"77"写成了77: 4.3 一个有趣的现象 总结 1.简介 之前,面阿里的时候,有个面试官问我有没有使用过分页查询,我说有,他说分页查询是有问题的,怎么解决:后来这个问题我没有回答出来:本着学习的态度,今天来解决一下这个问题: 2.分页插件使用 1.pom文件 <dependency> <grou

  • 浅谈C#9.0新特性之参数非空检查简化

    参数非空检查是缩写类库很常见的操作,在一个方法中要求参数不能为空,否则抛出相应的异常.比如: public static string HashPassword(string password) { if(password is null) { throw new ArgumentNullException(nameof(password)); } ... } 当异常发生时,调用者很容易知道是什么问题.如果不加这个检查,可能就会由系统抛出未将对象引用为实例之类的错误,这不利于调用者诊断错误. 由

  • 浅谈python requests 的put, post 请求参数的问题

    post, put请求的参数有两种形式 一种是把参数拼接在url中 对应postman 第二种是把参数放在body中 对应postman 在Python requests 库中 一般在的资料都会介绍 post,put请求的参数 用data 这种情况下参数会放在body中 但是有些接口参数通过body传入获取不到只能获取到URL中的参数 我们就需要用到 类似于get请求中的 params 传入参数 requests.post(url=url, params=data, verify=False,

  • 浅谈django框架集成swagger以及自定义参数问题

    介绍 我们在实际的开发工作中需要将django框架与swagger进行集成,用于生成API文档.网上也有一些关于django集成swagger的例子,但由于每个项目使用的依赖版本不一样,因此可能有些例子并不适合我们.我也是在实际集成过程中遇到了一些问题,例如如何自定义参数等问题,最终成功集成,并将结果分享给大家. 开发版本 我开发使用的依赖版本,我所使用的都是截止发稿日期为止最新的版本: Django 2.2.7 django-rest-swagger 2.2.0 djangorestframe

  • 浅谈基于SQL Server分页存储过程五种方法及性能比较

    在SQL Server数据库操作中,我们常常会用到存储过程对实现对查询的数据的分页处理,以方便浏览者的浏览. 创建数据库data_Test : create database data_Test GO use data_Test GO create table tb_TestTable --创建表 ( id int identity(1,1) primary key, userName nvarchar(20) not null, userPWD nvarchar(20) not null, u

  • 浅谈mysql使用limit分页优化方案的实现

    Mysql limit分页语句用法 与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭. --语法: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset --举例: select * from table limit 5; --返回前5行 select * from table limit 0,5; --同上,返回前5行 select * from table limit 5,10; --返回6

随机推荐