Loading

[转]JavaScript将MyBatis打印的日志转化为可执行sql

原文作者:Zale_J

地址:https://blog.csdn.net/Zale_J/article/details/89402668

原作者的工具有点小bug,修改了一下并且加上了边框

配合数据库插入、修改语句字段视图使用更佳

运行效果

运行效果

代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>mybatis转换</title>
    <script type="text/javascript">
        function f(obj) {
            var textVa = obj.value;
            // 获取带问号的SQL语句
            var statementStartIndex = textVa.indexOf('Preparing: ');
            var statementEndIndex = textVa.length - 1;
            for (var i = statementStartIndex; i < textVa.length; i++) {
                if (textVa[i] == "\n") {
                    statementEndIndex = i;
                    break;
                }
            }
            var statementStr = textVa.substring(statementStartIndex + "Preparing: ".length, statementEndIndex);
            console.log(statementStr);
            //获取参数
            var parametersStartIndex = textVa.indexOf('Parameters: ');
            var parametersEndIndex = textVa.length;
            for (var i = parametersStartIndex; i < textVa.length; i++) {
                if (textVa[i] == "\n") {
                    parametersEndIndex = i;
                    break;
                } else {
                    // console.log(textVa[i]);
                }
            }
            var parametersStr = textVa.substring(parametersStartIndex + "Parameters: ".length, parametersEndIndex);
            console.log(parametersStr);
            // 参数列表
            var parametersStrArr = parametersStr.split(",");
            console.log(parametersStrArr);
            for (var i = 0; i < parametersStrArr.length; i++) {
                tempStr = parametersStrArr[i].substring(0, parametersStrArr[i].indexOf("("));
                // 不含"("是null
                if(tempStr == ''){
                    tempStr = "null";
                }
                // 如果数据中带括号需要判断参数类型
                typeStr = parametersStrArr[i].substring(parametersStrArr[i].indexOf("(") + 1, parametersStrArr[i].indexOf(")"));
                if (typeStr == "String" || typeStr == "Timestamp") {
                    statementStr = statementStr.replace("?", "'" + tempStr.trim() + "'");
                } else {
                    statementStr = statementStr.replace("?", tempStr.trim());
                }
            }
            console.log(statementStr);
            document.getElementById("d1").innerHTML = statementStr;
            return true;
        }
    </script>
</head>
<body>
    <button type="submit" onclick="f(document.getElementById('1'))">转换</button><br><br>
    <textarea style="border:blue solid 2px;" name="getStr" id="1" rows="25" cols="150"></textarea><br>
    <p style="color:red;font:30px bold;">你的SQL</p>
    <div style="border:red solid 2px;" id="d1"></div>
</body>
</html>
posted @ 2019-07-12 15:32  n031  阅读(927)  评论(0编辑  收藏  举报