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

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

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

新建一個類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");
  }
 
}

添加測試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ù)的時候?qū)age和size傳入即可

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    java反射原理制作對象打印工具

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

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

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

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

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

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

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

    window版 IntelliJ IDEA 快捷鍵圖文教程

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

最新評論

奉贤区| 安福县| 民勤县| 新密市| 韶关市| 稷山县| 本溪| 瓦房店市| 济南市| 资中县| 神木县| 益阳市| 筠连县| 海宁市| 金门县| 柘荣县| 平塘县| 龙陵县| 和平县| 绥滨县| 修武县| 阿鲁科尔沁旗| 福建省| 巩义市| 芮城县| 南充市| 富顺县| 台前县| 钟山县| 孝感市| 布尔津县| 苍溪县| 屯门区| 梓潼县| 河西区| 将乐县| 海淀区| 衡南县| 临邑县| 麻江县| 新巴尔虎左旗|