首页 > 数据库 >一个小插件,将控制台的sql打印出来

一个小插件,将控制台的sql打印出来

时间:2023-05-26 19:55:05浏览次数:52  
标签:插件 statementStr parametersStr length textVa Preparing sql var 控制台

 

将下面的源码保存成一个.html文件,然后用浏览器打开,最后将它保存到浏览器标签里,就能方便下次打开啦:

 

源码如下:

<!DOCTYPE html>
<html lang="ch-zn">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Mybatis SQL 格式化工具</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta content="coder-lzh/JS-mybatis-log-plugin" itemprop="name" property="og:title">
    <meta name="description" content="" property="og:description">
    <link href="./Mybatis SQL 格式化工具_files/bootstrap.min.css" rel="stylesheet">
    <style>
        .btn-parent {
            display: flex;
            justify-content: center;
            align-items: center;
            padding-bottom: 7px;
        }

        .leftMain {
            margin: 4px 20px;
        }
    </style>
</head>
<body>

<div class="leftMain">

    <div>
        <textarea style="width:100%;" name="logBefore" id="logBeforeId" rows="10" placeholder="转换前的log

2021-08-13 22:33:32.666 DEBUG 15984 --- [nio-8080-exec-8] c.g.b.mapper.TbUserMapper.selectPage     : ==>  Preparing: SELECT COUNT(1) FROM tb_user
2021-08-13 22:33:32.666 DEBUG 15984 --- [nio-8080-exec-8] c.g.b.mapper.TbUserMapper.selectPage     : ==> Parameters:
2021-08-13 22:33:32.667 DEBUG 15984 --- [nio-8080-exec-8] c.g.b.mapper.TbUserMapper.selectPage     : ==>  Preparing: SELECT id,username,password,state,phone,email,createtime,updatetime,last_login_time FROM tb_user LIMIT ?,?
2021-08-13 22:33:32.667 DEBUG 15984 --- [nio-8080-exec-8] c.g.b.mapper.TbUserMapper.selectPage     : ==> Parameters: 0(Long), 10(Long)
2021-08-13 22:33:32.668 DEBUG 15984 --- [nio-8080-exec-8] c.g.b.mapper.TbUserMapper.selectPage     : <==      Total: 1

"></textarea>
    </div>
    <div class="btn-parent">
        <div class="btn-child">
            <button type="button" onclick="multiTransefer(document.getElementById('logBeforeId').value)"
                    class="btn btn-success">转换
            </button>
            <button type="button" onclick="clearContent()" class="btn btn-danger">清除</button>
        </div>
    </div>
    <div>
        <textarea style="width:100%;" name="logAfter" id="logAfterId" rows="20" placeholder="转换后的SQL;

SELECT COUNT(1) FROM tb_user ;

SELECT id,username,password,state,phone,email,createtime,updatetime,last_login_time FROM tb_user LIMIT 0,10 ;
"></textarea>
    </div>
</div>

</script>
<script type="text/javascript">

  function multiTransefer(inputText) {
    document.getElementById('logAfterId').value = ''
    // 将传入的字符串根据MyBatis的标识拆分成数组
    var mybatisSQLTexts = []

    while (inputText.lastIndexOf('Preparing: ') > -1) {
      // 因为是从尾部截取,所以需要从数组的头部添加
      mybatisSQLTexts.unshift(inputText.substring(inputText.lastIndexOf('Preparing: ')))

      inputText = inputText.substring(0, inputText.lastIndexOf('Preparing: '))
    }
    console.log(mybatisSQLTexts)

    // 将数组中的字符串挨个处理,以数组形式返回
    for (var i = 0; i < mybatisSQLTexts.length; i++) {
      parseSql(mybatisSQLTexts[i])
    }
  }

  // 单句的问号生成SQL
  function parseSql(textVa) {
    // 获取带问号的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 - 1
    for (var i = parametersStartIndex; i < textVa.length; i++) {
      if (textVa[i] === '\n') {
        parametersEndIndex = i
        break
      }
    }
    var parametersStr = textVa.substring(parametersStartIndex + 'Parameters: '.length, parametersEndIndex + 1)
    parametersStr = parametersStr.split(',')

    for (var i = 0; i < parametersStr.length; i++) {
      // 如果数据中带括号将使用其他逻辑
      tempStr = parametersStr[i].substring(0, parametersStr[i].lastIndexOf('('))
      // 获取括号中内容
      typeStr = parametersStr[i].substring(parametersStr[i].lastIndexOf('(') + 1, parametersStr[i].lastIndexOf(')'))
      // 如果为字符类型
      if (typeStr === 'String' || typeStr === 'Timestamp' || typeStr === 'Date') {
        statementStr = statementStr.replace('?', '\'' + tempStr.trim() + '\'')
      } else {
        // 数值类型
        statementStr = statementStr.replace('?', tempStr.trim())
      }
    }
    // console.log(statementStr);
    document.getElementById('logAfterId').value += '\n\n\n'
    document.getElementById('logAfterId').value += statementStr + ';'
    return textVa
  }

  function clearContent() {
    document.getElementById('logBeforeId').value = ''
    document.getElementById('logAfterId').value = ''
  }
</script>

</body>
</html>

 

标签:插件,statementStr,parametersStr,length,textVa,Preparing,sql,var,控制台
From: https://www.cnblogs.com/supiaopiao/p/17435681.html

相关文章

  • rhel 7.3安装mysql 8.0.27
    文档课题:rhel7.3安装mysql8.0.27.系统:rhel7.364位数据库:mysql8.0.27安装包:mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz1、安装前检查1.1、系统版本[root@leo-mysql-master~]#cat/etc/*releaseNAME="RedHatEnterpriseLinuxServer"VERSION="7.3(Maipo)"ID=......
  • 阿里云服务器Linux MySQL root 密码忘记了如何操作?
    阿里云服务器Linux MySQL root密码忘记了如何操作?假如我们使用的MySQL数据库忘记的账号密码,是能够土工调节配置文件,然后跳过密码方式登录到数据库的。然后在数据库里面修改账号和密码,通常在默认情况下账号为root具体操作步骤如下:1】编辑MySQL配置文件my.cnf【注】在具体的操作......
  • DBeaver连接mysql数据库和备份恢复那些事
    引言上一篇文章,主要讲解的是如何使用DBeaver连接oracle数据库,同时和大家扩展的聊了聊oracle的监听器了。在DBeaver这套文章的第1篇中,我就介绍了为什么要引入DBeaver?为了替换掉团队中现有的商用软件,比如大家连接mysql时,最喜欢使用的navicat。既然要替换掉navicat,那DBeaver就要满足na......
  • SQL Server通过钉钉机器人直接发送消息
    /**启用OleAutomationProcedures选项execsp_configure'showadvancedoptions',1;goreconfigure;gosp_configure'OleAutomationProcedures',1;goreconfigure;go*/declare@PostDatanVARCHAR(max)='',@ResponseTextVARCHAR(max)=&......
  • DBeaver连接sqlserver数据库
    引言上一篇文章,主要讲解的是如何使用DBeaver连接mysql数据库,同时和大家扩展的聊了聊使用DBeaver备份恢复mysql数据。大部分的兄弟们连接sqlserver数据库,使用的是MicrosoftSQLServerManagementStudio,本篇文章主要讲解的是:如何使用DBeaver连接sqlserver数据库,我们操作起来吧。DBe......
  • 解决mysqldump 导出中文乱码的问题
    导数据库mysqldump-uroot-p111111-P3306-h127.0.0.1test>/data/test.sql导出后的数据库打开是乱码,如下:开始以为打开的方式不对,就用记事本打开后,用utf-8的编码格式另保存下结果打开后,仍然是乱码。这时候,猜测是不是数据库的字符集的编码有问题,然后进入数据库,输入命......
  • python操作mysql数据pymysql-执行语句select查询返回值直接返回dict字典类型或者list
    一、返回tuple元组类型(默认)fetchall()将结果放在二维数组里面,每一行的结果在元组里面importpymysqldefexport(table_name):conn=pymysql.connect(host='118.24.3.40',user='jxz',password='123456',db......
  • 源码安装mysql
    前言1.在下面网站找到需要安装的mysql版本https://downloads.mysql.com/archives/community/注意要选择的操作系统为linux-generic2.kafka安装方式链接有空可测试下:https://blog.csdn.net/m0_46192647/article/details/123424090一.mysql部署systemctlstopfirewalld&&s......
  • 一文教会你用Apache SeaTunnel Zeta离线把数据从MySQL同步到StarRocks
    在上一篇文章中,我们介绍了如何下载安装部署SeaTunnelZeta服务(3分钟部署SeaTunnelZeta单节点Standalone模式环境),接下来我们介绍一下SeaTunnel支持的第一个同步场景:离线批量同步。顾名思意,离线批量同步需要用户定义好SeaTunnelJobConfig,选择批处理模式,作业启动后开始同步数据,当......
  • discoDSP Vertigo for Mac(声音合成插件) v4.4S中文版
    通过加法合成发现声音设计的无限可能性,加法合成是一种通过将两个或多个音频信号相加而产生新声音的合成。VertigoAdditiveSynthesizer提供了一系列功能来增强您的创作潜力,包括256个振荡器,双滤波器和8种易于操作和修改的效果。discoDSPVertigo中文版插件功能特色我们的合成器......