返回顶部
首页 > 资讯 > 精选 >mybatis插件怎么实现自定义改写表名
  • 706
分享到

mybatis插件怎么实现自定义改写表名

2023-06-30 10:06:57 706人浏览 安东尼
摘要

这篇文章主要介绍“mybatis插件怎么实现自定义改写表名”,在日常操作中,相信很多人在mybatis插件怎么实现自定义改写表名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mybatis插件怎么实现自定义改

这篇文章主要介绍“mybatis插件怎么实现自定义改写表名”,在日常操作中,相信很多人在mybatis插件怎么实现自定义改写表名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mybatis插件怎么实现自定义改写表名”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

代码如下:

@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),    @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),})public class RerouteToTableInterceptor implements Interceptor {    private Map map;    private Set<String> tableSet;    public static boolean openInterceptor = false;    public RerouteToTableInterceptor() {        //标识使用了该插件        setOpenInterceptor(true);    }    @Override    public Object intercept(Invocation invocation) throws Throwable {        Object[] args = invocation.getArgs();        MappedStatement ms = (MappedStatement) args[0];        Object parameterObject = args[1];        Boundsql boundSql = ms.getBoundSql(parameterObject);        String sql = boundSql.getSql();        MySqlStatementParser MysqlStatementParser = new mysqlStatementParser(sql);        SQLStatement statement = mySqlStatementParser.parseStatement();        SQLExprTableSource sqlTableSource = null;        if(statement instanceof SQLSelectStatement){            SQLSelect selectQuery = ((SQLSelectStatement)statement).getSelect();            MySqlSelectQueryBlock sqlSelectQuery = (MySqlSelectQueryBlock)selectQuery.getQuery();            sqlTableSource = (SQLExprTableSource)sqlSelectQuery.getFrom();        }else if(statement instanceof SQLInsertStatement){            SQLInsertStatement sqlInsertStatement = (SQLInsertStatement)statement;            sqlTableSource = sqlInsertStatement.getTableSource();        }else if(statement instanceof SQLUpdateStatement){            SQLUpdateStatement sqlUpdateStatement = (SQLUpdateStatement)statement;            sqlTableSource = (SQLExprTableSource)sqlUpdateStatement.getTableSource();        }else if(statement instanceof SQLDeleteStatement){            SQLDeleteStatement sqlUpdateStatement = (SQLDeleteStatement)statement;            sqlTableSource = (SQLExprTableSource)sqlUpdateStatement.getTableSource();        }        String tableName = sqlTableSource.toString();        if(tableSet.contains(tableName)){            SQLIdentifierExpr sqlExpr = (SQLIdentifierExpr)sqlTableSource.getExpr();            String newTableName = (String)map.get(tableName);            if(!StringUtils.isEmpty(newTableName) && null != newTableName)                sqlExpr.setName(newTableName);        }         BoundSql bs = new BoundSql(ms.getConfiguration(),statement.toString(),boundSql.getParameterMappings(),parameterObject);         MappedStatement newMs = copyFromMappedStatement(ms, new BoundSqlSqlSource(bs));        for (ParameterMapping mapping : boundSql.getParameterMappings()) {            String prop = mapping.getProperty();            if (boundSql.hasAdditionalParameter(prop)) {                bs.setAdditionalParameter(prop, boundSql.getAdditionalParameter(prop));            }        }        args[0] = newMs;         return invocation.proceed();    }     @Override    public Object plugin(Object target) {        return Plugin.wrap(target, this);    }     @Override    public void setProperties(Properties properties) {}     public Map getMap() {        return map;    }     public void setMap(Map map) {        tableSet = map.keySet();        this.map = map;    }    public boolean isOpenInterceptor() {        return openInterceptor;    }     public void setOpenInterceptor(boolean openInterceptor) {        this.openInterceptor = openInterceptor;    }     private MappedStatement copyFromMappedStatement(MappedStatement ms, SqlSource newSqlSource) {        MappedStatement.Builder builder = new MappedStatement.Builder(ms.getConfiguration(), ms.getId(), newSqlSource, ms.getSqlCommandType());        builder.resource(ms.getResource());        builder.fetchSize(ms.getFetchSize());        builder.statementType(ms.getStatementType());        builder.keyGenerator(ms.geTKEyGenerator());        if (ms.getKeyProperties() != null && ms.getKeyProperties().length > 0) {            builder.keyProperty(ms.getKeyProperties()[0]);        }        builder.timeout(ms.getTimeout());        builder.parameterMap(ms.getParameterMap());        builder.resultMaps(ms.getResultMaps());        builder.resultSetType(ms.getResultSetType());        builder.cache(ms.getCache());        builder.flushCacheRequired(ms.isFlushCacheRequired());        builder.useCache(ms.isUseCache());        return builder.build();    }     public static class BoundSqlSqlSource implements SqlSource {        private BoundSql boundSql;        public BoundSqlSqlSource(BoundSql boundSql) {            this.boundSql = boundSql;        }        public BoundSql getBoundSql(Object parameterObject) {            return boundSql;        }    }}

到此,关于“mybatis插件怎么实现自定义改写表名”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: mybatis插件怎么实现自定义改写表名

本文链接: https://lsjlt.com/news/327984.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mybatis插件怎么实现自定义改写表名
    这篇文章主要介绍“mybatis插件怎么实现自定义改写表名”,在日常操作中,相信很多人在mybatis插件怎么实现自定义改写表名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mybatis插件怎么实现自定义改...
    99+
    2023-06-30
  • mybatis插件实现自定义改写表名实例代码
    代码如下: @Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatem...
    99+
    2024-04-02
  • 学会自己编写Mybatis插件(拦截器)实现自定义需求
    前言 最近在考虑写什么的时,想到自己在项目中使用过的mybatis的插件,就想趁这个机会聊一聊我们接触频繁的Mybatis. 如果是使用过Mybatis的小伙伴,那么我们接触过的第一个Mybatis的插件自然就是分页插件(Mybati...
    99+
    2023-08-31
    mybatis java mysql
  • Vue3怎么编写自定义指令插件
    今天小编给大家分享一下Vue3怎么编写自定义指令插件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。编写自定义插件//&nbs...
    99+
    2023-07-02
  • SkyWalking自定义插件怎么用
    这篇文章将为大家详细讲解有关SkyWalking自定义插件怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。RabbitMQ插件问题skywalking官方提供的RabbitMQ插件存在缺陷,其只针对R...
    99+
    2023-06-29
  • 怎么创建自定义Nagios插件
    要创建自定义Nagios插件,您可以按照以下步骤进行: 决定插件类型:您可以选择编写一个脚本插件、C语言插件、Perl插件或Py...
    99+
    2024-04-02
  • Vue3 中自定义插件的实现方法
    目录1. Vue 插件2. 自定义插件2.1 基本用法2.2 加入组件2.3 加入指令2.4 provide & inject3. 小结最近在录 TienChin 项目,项目...
    99+
    2022-11-13
    Vue自定义插件 Vue3自定义插件
  • ionic2中自定义cordova插件怎么用
    这篇文章主要介绍了ionic2中自定义cordova插件怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。假设需求是 写一个日志插件,可以...
    99+
    2024-04-02
  • JavaScript自定义插件实现tabs切换功能
    本文实例为大家分享了JavaScript实现tabs切换功能的具体代码,供大家参考,具体内容如下 自定义插件实现tabs切换功能 这是HTML代码: <script src...
    99+
    2024-04-02
  • Qt自定义控件实现仪表盘
    目录1.预览图2. 代码头文件源文件3. 用法1.预览图 2. 代码 头文件 #ifndef MOTORMETER_H #define MOTORMETER_H #include...
    99+
    2024-04-02
  • MyBatis中怎么实现自定义的SQL拦截器
    在 MyBatis 中实现自定义的 SQL 拦截器,通常可以通过实现 org.apache.ibatis.plugin.Interc...
    99+
    2024-05-08
    MyBatis SQL
  • 怎么使用AOP+反射实现自定义Mybatis多表关联查询
    这篇“怎么使用AOP+反射实现自定义Mybatis多表关联查询”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用AOP+...
    99+
    2023-06-30
  • Android Gradle 插件自定义Plugin实现注意事项
    目录Android Gradle PluginGradle 是什么?Gradle 插件分类使用插件实现一个插件发布插件引用插件Android Gradle Plugin 在 Andr...
    99+
    2024-04-02
  • Android实现Ant Design 自定义表单组件
    Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法(使用起来确实很爽),这时需要...
    99+
    2023-05-31
    ant design 表单组件
  • winform怎么自定义控件列表
    要在WinForm中自定义控件列表,可以按照以下步骤进行操作:1. 创建一个新的类,继承自Control或者其子类(如Panel)。...
    99+
    2023-09-08
    winform
  • winform列表控件怎么自定义
    在Winform中,可以通过继承自列表控件(如ListBox、ListView等)来自定义列表控件。以下是一个自定义ListBox的...
    99+
    2023-10-20
    winform
  • ExtJs怎么使用自定义插件动态保存表头配置
    这篇文章将为大家详细讲解有关ExtJs怎么使用自定义插件动态保存表头配置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关于保存列表表头的配置,一般我们不需要与后台交互,直...
    99+
    2024-04-02
  • 怎么为Nagios创建自定义通知插件
    创建自定义通知插件可以让Nagios监控系统发送特定的通知信息给管理员或其他相关人员,以下是创建自定义通知插件的一般步骤: 创建...
    99+
    2024-04-02
  • mybatis plus怎么实现动态表名
    Mybatis Plus 可以通过使用 TableNameParser 接口来实现动态表名。你需要自定义一个实现了 TableNameParser 接口的类,并在 Mybatis Plus 的配置中将其注册为自定义的 TableNamePa...
    99+
    2023-09-03
    mybatis java mysql 开发语言 数据库
  • Vue怎么实现自定义组件自动生成
    本文小编为大家详细介绍“Vue怎么实现自定义组件自动生成”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么实现自定义组件自动生成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。就目前三大前端主流数据驱动框架...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作