亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Springboot如何使用mybatis實現攔截SQL分頁

瀏覽:3日期:2023-05-10 11:07:06

新建一個類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;@Mapperpublic 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 resultType='java.util.HashMap'> select * from p1project.sys_user </select> <select resultType='long'> select count(1) from p1project.sys_user </select></mapper>

在調用TestMapper.findByPager傳遞參數的時候將page和size傳入即可

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 欧美一区二区三区在线可观看 | 五月天丁香婷婷网 | 天干天干夜天干天天爽 | 亚洲欧美精品中字久久99 | 久久午夜羞羞影院免费观看 | 91在线网址 | 九九国产精品九九 | 欧美3p在线观看一区二区三区 | 国产亚洲精品一区在线播 | 一级一级特黄女人精品毛片视频 | 欧美日韩一区二区在线观看 | 久久精品国产无限资源 | 亚洲一区欧美 | 国产一区二区三区精品久久呦 | 波多野吉衣一区二区三区四区 | 欧美日韩一区二区在线观看 | 亚洲国产小视频 | 2015日韩永久免费视频播放 | 国产精品无| 美女久久精品 | 国模精品一区二区三区 | 国产亚洲综合精品一区二区三区 | 国产日韩欧美在线一二三四 | 鲁大师成人一区二区三区 | 欧美性猛交xxx免费看人妖 | 国产成人一区二区三区在线视频 | 久久精品亚洲欧美日韩久久 | 亚洲色播永久网址大全 | 91丁香亚洲综合社区 | 欧美一区二区三区网站 | 一线高清视频在线观看www国产 | 欧美一级久久久久久久大 | 国产精品www视频免费看 | 免费看黄在线网站 | 国产婷婷一区二区在线观看 | 国产中出视频 | 久久免费精彩视频 | 哪里可以看黄色播放免费 | 国产伦精品一区二区三区在线观看 | 99久久中文字幕伊人 | 久久久久夜 |