saas架构之druid解析表名

复制代码
    public void preHandle(BoundSql boundSql, RequestEntity requestEntity) {
        System.out.println("要执行的SQL:" + boundSql.getSql());
        System.out.println("要执行的SQL参数:" + Arrays.toString(boundSql.getParameters()));
// 用druid解析出表名
        List<String> tableNameList = new ArrayList<String>();
        String dbType = JdbcConstants.MYSQL;
        List<SQLStatement> stmtList = SQLUtils.parseStatements(boundSql.getSql(), dbType);
        for (SQLStatement sqlStatement : stmtList) {
            MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
            sqlStatement.accept(visitor);
            Map<TableStat.Name, TableStat> tables = visitor.getTables();
            System.out.println("druid解析sql的结果集:");
            System.out.println(tables);
            Set<TableStat.Name> tableNameSet = tables.keySet();
            for (TableStat.Name name : tableNameSet) {
                String tableName = name.getName();
                if (StrUtil.isNotBlank(tableName)) {
                    tableNameList.add(tableName);
                }
            }
        }
    }
复制代码

 

posted @   wujf  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示