mybatis插件怎么实现自定义改写表名
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"mybatis插件怎么实现自定义改写表名",在日常操作中,相信很多人在mybatis插件怎么实现自定义改写表名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年11月02日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 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插件怎么实现自定义改写表名"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
插件
学习
更多
帮助
实用
接下来
代码
文章
方法
标识
理论
知识
篇文章
网站
资料
跟着
问题
好用
实践
解答
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技海报
互联网加科技
互联网科技战争
互联网金融 科技
极限挑战互联网科技
润盈互联网科技
猫创互联网科技
长亮科技 互联网金融
蓝色互联网科技
互联网科技产品
互联网之后的科技是什么
移动互联网科技股
互联网媒体平台算高科技产业
无锡工业互联网科技有限公司
科技互联网的核心竞争力
锡山区互联网智能科技产品供应
互联网时代科技型公司的机会
盐城市攀科互联网科技有限公司
知域互联网科技有限公司官网
武汉亿视互联网科技有限公司
百单网互联网科技有限公司怎么样
高科技互联网
科技互联网政务服务
智能科技公司是互联网公司吗
科技信息互联网
长亮科技 互联网金融
广州优美互联网科技
北京互联网科技类企业分布
中国互联网公司的科技投入
高科技和互联网的现代国家