首页 > 数据库 >mybatis插件实现sql修改

mybatis插件实现sql修改

时间:2024-08-12 12:42:04浏览次数:6  
标签:插件 plugin sql ibatis apache org mybatis import

package com.xf.config;

import java.sql.Connection;
import java.util.Properties;

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
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.DefaultReflectorFactory;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
import org.springframework.stereotype.Component;

@Intercepts({
        @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class, Integer.class }) })
@Component
public class SqlAspect implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
        MetaObject metaStatementHandler = MetaObject.forObject(statementHandler, new DefaultObjectFactory(),
                new DefaultObjectWrapperFactory(), new DefaultReflectorFactory());
        BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql");
        String sql = boundSql.getSql();
        // 这里改下sql了
        metaStatementHandler.setValue("delegate.boundSql.sql", sql + " limit 1");
        return invocation.proceed();
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {

    }
}

 

标签:插件,plugin,sql,ibatis,apache,org,mybatis,import
From: https://www.cnblogs.com/wujf/p/18292403

相关文章

  • SQL Server数据库字段类型-日期和时间类型
    SQLServer数据库字段类型-日期和时间类型官方地址:日期和时间类型类型格式示例值日期范围timehh:mm:ss[.nnnnnnn]12:35:29.1234567dateyyyy-MM-dd2022-05-080001-01-01到9999-12-31(对于Informatica,则为1582-10-15到9999-12-31)datetimeyyyy-MM-ddTHH:mm:ss[.mmm]......
  • 通过Shell脚本创建指定ip上的MySQL非系统库的所有表的表结构
    dbaloginSource='/data/dba/mysql8/bin/mysql-uroot_dba-ppassword-hxxx'dbaloginTarget='mysql-h127.0.0.1-P3340-uroot-proot'#showdatabases过滤出数据库名dbs=`$dbaloginSource-e"showdatabases\G"2>/dev/null|grep......
  • MySQL——删除数据(二)DELETE 删除全部数据
            在DELETE语句中如果没有使用WHERE子句,则会将表中的所有记录都删除。        例如,删除student表中的所有记录,在删除数据之前首先使用查询语句查看student表中的所有记录,执行结果如下所示:mysql>select*fromstudent;+------+---------+---......
  • MySQL——删除数据(一)DELETE 删除部分数据
            删除数据是指对表中存在的记录进行删除,这是数据库的常见操作,比如一个学生转学了,就需要在student表中将其信息记录删除。MySQL中使用DELETE语句来删除表中的记录,其语法格式如下所示:DELETEFROM表名[WHERE条件表达式]    在上面的语法格式中,......
  • 【MYSQL】表的设计
    目录数据库约束notnull约束unique(唯一)约束default默认值约束primarykey(主键)约束foreignkey(外键)约束check约束总结表的设计三大范式第一范式第二范式第三范式表的关系数据库约束是关系型数据库的一个重要功能,主要作用是保证数据的完整性,也可能理解数据......
  • Golang中使用redis,mysql
    一、redis简介redis(REmoteDIctionaryServer)是一个由SalvatoreSanfilippo写key-value存储系统,它由C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value类型的数据库,并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(......
  • 【学习笔记4】论文MAC-SQL: A Multi-Agent Collaborative Framework for Text-to-SQL
    Abstract        最近基于大型语言模型(LLM)的Text-to-SQL方法在处理“庞大”数据库和需要多步推理的复杂用户问题时,通常会遭遇显著的性能下降。此外,大多数现有方法忽视了LLM利用外部工具和模型协作的重要性。为了解决这些挑战,我们提出了MAC-SQL,这是一种新颖的基于......
  • 一款强大的burpsuite漏洞扫描插件--gatherBurp
    一款强大的burpsuite漏洞扫描插件目前功能fastjson扫描权限绕过扫描未授权检测扫描sql注入检测多层级路由扫描工具调用log4j检测复杂数据提交一键生成nuclei模板生成指定kb大小的随机字符串代理池功能子域名收集(复刻https://github.com/Acmesec/Sylas)使用说明请使用m......
  • 贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)
    目录标题:贷齐乐系统最新版SQL注入(绕过WAF可unionselect跨表查询)内容:一,环境部署二,源码分析三,sql注入总结:[回到顶部](#article_top)一,环境部署本漏洞由于是2015年爆出的,所以这里源码使用的PHP版本不支持7版本,这里我们可以使用PHP5.4.45版本,只需小皮进行下载更改即......
  • SQL注入之sqli-labs靶场第三关
    标题:SQL注入之sqli-labs靶场第三关目录:1.寻找注入点2.进行字段猜解3.信息收集4.sql注入总结:1.寻找注入点http://localhost/sqli-labs/Less-3/?id=1%27)%20and%201=2--+通过尝试发现注入点,使用双引号和)闭合,进行and1=1and1=2进行尝试2.进行字段猜解......