淺談mybatisPlus的Ipage分頁和map參數的問題

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);

問題解決。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: