最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot如何使用mybatis實(shí)現(xiàn)攔截SQL分頁(yè)

 更新時(shí)間:2020年06月18日 15:07:44   作者:理舞  
這篇文章主要介紹了Springboot使用mybatis實(shí)現(xiàn)攔截SQL分頁(yè),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

新建一個(gè)類MyPageInterceptor.java(注意在springboot中要添加注解@Component)

package com.grand.p1upgrade.mapper.test;

import java.sql.Connection;
import java.util.Map;
import java.util.Properties;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.springframework.stereotype.Component;

@Component
@Intercepts({@Signature(type=StatementHandler.class,method="prepare",args={Connection.class,Integer.class})})
public class MyPageInterceptor implements Interceptor {
  
  private int page;
  private int size;
  @SuppressWarnings("unused")
  private String dbType;
 
  @SuppressWarnings("unchecked")
  @Override
  public Object intercept(Invocation invocation) throws Throwable {
    System.out.println("plugin is running...");
    StatementHandler statementHandler = (StatementHandler)invocation.getTarget();
    MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
    while(metaObject.hasGetter("h")){
      Object object = metaObject.getValue("h");
      metaObject = SystemMetaObject.forObject(object);
    }
    while(metaObject.hasGetter("target")){
      Object object = metaObject.getValue("target");
      metaObject = SystemMetaObject.forObject(object);
    }
    MappedStatement mappedStatement = (MappedStatement)metaObject.getValue("delegate.mappedStatement");
    String mapId = mappedStatement.getId();
    if(mapId.matches(".+ByPager$")){
      ParameterHandler parameterHandler = (ParameterHandler)metaObject.getValue("delegate.parameterHandler");
      Map<String, Object> params = (Map<String, Object>)parameterHandler.getParameterObject();
      page = (int)params.get("page");
      size = (int)params.get("size");
      String sql = (String) metaObject.getValue("delegate.boundSql.sql");
      sql += " limit "+(page-1)*size +","+size;
      metaObject.setValue("delegate.boundSql.sql", sql);
    }
    return invocation.proceed();
  }
 
  @Override
  public Object plugin(Object target) {
    return Plugin.wrap(target, this);
  }
 
  @Override
  public void setProperties(Properties properties) {
    String limit = properties.getProperty("limit","10");
    this.page = Integer.parseInt(limit);
    this.dbType = properties.getProperty("dbType", "mysql");
  }
 
}

添加測(cè)試TestMapper.java

package com.grand.p1upgrade.mapper.test;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TestMapper {
  public List<Map<String,Object>> findByPager(Map<String, Object> params);
  public long count();
}

TestMapper.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.grand.p1upgrade.mapper.test.TestMapper">

  <select id="findByPager" resultType="java.util.HashMap">
    select * from p1project.sys_user
  </select>
  <select id="count" resultType="long">
    select count(1) from p1project.sys_user
  </select>
</mapper>

在調(diào)用TestMapper.findByPager傳遞參數(shù)的時(shí)候?qū)age和size傳入即可

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Spring Boot、MyBatis、MyBatis-Plus 依賴版本對(duì)應(yīng)關(guān)系

    淺談Spring Boot、MyBatis、MyBatis-Plus 依賴版本對(duì)應(yīng)關(guān)系

    本文主要介紹了SpringBoot、MyBatis和MyBatis-Plus的依賴版本對(duì)應(yīng)關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Java中Hashtable類與HashMap類的區(qū)別詳解

    Java中Hashtable類與HashMap類的區(qū)別詳解

    Hashtable的應(yīng)用非常廣泛,HashMap是新框架中用來(lái)代替Hashtable的類,也就是說(shuō)建議使用HashMap,不要使用Hashtable。可能你覺(jué)得Hashtable很好用,為什么不用呢?這里簡(jiǎn)單分析他們的區(qū)別。
    2016-01-01
  • Java基礎(chǔ)之教你如何正確運(yùn)用依賴注入

    Java基礎(chǔ)之教你如何正確運(yùn)用依賴注入

    最近發(fā)現(xiàn)很多使用Spring框架的Java代碼存在依賴注入方式的誤用,甚至是濫用.因此整理了這篇文章,歡迎大家一起探討,需要的朋友可以參考下
    2021-05-05
  • Spring中的事務(wù)隔離級(jí)別的介紹

    Spring中的事務(wù)隔離級(jí)別的介紹

    今天小編就為大家分享一篇關(guān)于Spring中的事務(wù)隔離級(jí)別的介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • mybatisPlus更新字段值為null的解決方案

    mybatisPlus更新字段值為null的解決方案

    在使用mybatis-plus時(shí),發(fā)現(xiàn)當(dāng)前端傳入的值為null值時(shí),結(jié)果無(wú)論怎么操作后端都不執(zhí)行更新null字段的操作,下面這篇文章主要給大家介紹了關(guān)于mybatisPlus更新字段值為null的解決方案,需要的朋友可以參考下
    2023-04-04
  • java反射原理制作對(duì)象打印工具

    java反射原理制作對(duì)象打印工具

    本文主要給大家介紹了java反射原理制作對(duì)象打印工具的方法和代碼,以及一個(gè)熱心網(wǎng)友給出的更加簡(jiǎn)潔方便的代碼,小伙伴們需要的話可以參考下。
    2015-12-12
  • JavaWeb之會(huì)話技術(shù)案例詳解

    JavaWeb之會(huì)話技術(shù)案例詳解

    這篇文章主要介紹了JavaWeb之會(huì)話技術(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 簡(jiǎn)單了解Java synchronized關(guān)鍵字同步

    簡(jiǎn)單了解Java synchronized關(guān)鍵字同步

    這篇文章主要介紹了簡(jiǎn)單了解Java synchronized關(guān)鍵字同步,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java中的Vector詳細(xì)解讀

    Java中的Vector詳細(xì)解讀

    這篇文章主要介紹了Java中的Vector詳細(xì)解讀,Vector是實(shí)現(xiàn)了List接口的子類,其底層是一個(gè)對(duì)象數(shù)組,維護(hù)了一個(gè)elementData數(shù)組,是線程安全的,Vector類的方法帶有synchronized關(guān)鍵字,在開(kāi)發(fā)中考慮線程安全中使用Vector,需要的朋友可以參考下
    2023-09-09
  • window版 IntelliJ IDEA 快捷鍵圖文教程

    window版 IntelliJ IDEA 快捷鍵圖文教程

    本文通過(guò)圖文并茂的形式給大家介紹了window版 IntelliJ IDEA 快捷鍵的操作方法,需要的朋友參考下吧
    2018-02-02

最新評(píng)論

兴山县| 桃园市| 宝丰县| 铜川市| 九龙城区| 嘉荫县| 长治市| 高州市| 文登市| 和林格尔县| 紫阳县| 双牌县| 曲阜市| 辉县市| 确山县| 溆浦县| 奉贤区| 伽师县| 太白县| 东城区| 徐水县| 余江县| 梅河口市| 准格尔旗| 如东县| 洱源县| 萍乡市| 荆州市| 浦东新区| 灵山县| 连南| 唐海县| 中方县| 保康县| 洛扎县| 绥芬河市| 宣城市| 和田市| 油尖旺区| 多伦县| 盐源县|