Mybatis日志参数如何快速替换占位符工具

  介绍

这篇文章主要为大家展示了Mybatis日志参数如何快速替换占位符工具,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

Mybatis执行的sql的打印格式为:

2020-08-04 09:16:44调试——(io - 8888 - exec - 5] .mapper.operation.OperationMapper.insert只,,,,,,调试145:==祝辞,准备:插入图·图鲁。t_log_operation (id、模块module_description、类型、方法、运营商operate_time)值(# 63和# 63;,,,,,# 63;,,# 63;,,# 63;,,# 63;,unix_timestamp(现在()))
2020-08-04 09:16:44调试——(io - 8888 - exec - 5] .mapper.operation.OperationMapper.insert只,,,,,,调试145:==比;参数:2743672230717162752(长),1(整数),登录(字符串),3(整数),com.simba.tuloosa.controller.auth.LoginController.nativeLogin(字符串),6 d63b98cbe5e42d18c126da149162404(字符串)
2020-08-04 09:16:44调试——(io - 8888 - exec - 5] .mapper.operation.OperationMapper.insert只,,,,,,调试145:& lt;==,,,更新:1

想法里有一个插件Mybatis日志插件可以帮我们快速的提取参数拼成完整的SQL语句执行,以快速排错,但是很可惜,他是收费的ε=(及急性;ο' *)))唉,整来整取也没法破解,算的了,不如自己写一个挂到公网上,也能复制SQL随时拼接,纯js即可。

<强>下面我们来逐步分析一下需要的步骤:

    <李>首先需要提取出preparedStatement语句李 <>李提取出所有的参数,字符串类型还需要手动添加引号 <李>将声明中的占位符?替换为对应的参数

很简单吧,就这三步即可。接下来动手操作。

<强> 1,提取声明:只需截取从准备到行尾的\ n即可

//str为完整的三行或两行SQL提取预编译语句
  让准备=str.substring (str.indexOf(& # 39;准备# 39;)+ 11,str.indexOf (& # 39; \ n # 39;)) 

indexOf (str: string):提取第一个匹配到的字符串的位置,返回其索引值

<强> 2,提取参数:只需截取从参数到其行尾的\ n即可

这时我们需要提取到str的第二个\ n换行符,怎么提取某个字符串中的第n个字符串呢?

indexOf()函数在js中是有重载的,默认提取第一个匹配的。它可以接受第二个参数,可以传入一个起始位置,即从位置(索)引开始取第一个匹配的。

//js api
  indexOf (searchString:字符串,position& # 63;:数字):数量;

分析:取第二个\ n,我们可以将第一个\ n的索引传入再加1;取第三个\ n,则将第二个\ n的索引传入加1,以此类推,所以这是一个递归函数,实现如下

//返回字符串str中的第n字符串reg在str中的索引值指数
  函数索引(str, reg, n) {
  如果(!str | | ! reg | | n & lt;=0)返回1//先求出第一个,再递归n - 1
  如果(n===1) {
  返回str.indexOf(注册)
  }//注意n - 1的索引后一定要加1,负责会一直是第一个注册的索引
  返回str.indexOf (reg,指数(str, reg, n - 1) + 1)
  }

接下来先测试一下指数函数,打印正确

 const str=& # 39; hello world好# 39;
  const reg=& # 39; 0 & # 39;
  控制台。日志(指数(str, reg, 3))//求第三个的阿索引,打印结果是12日正确

完成函数提取,所以回到上面的步骤,继续提取第二个\ n的位置

//获取参数字符串,去掉所有空格
  const params=str.substring (str.indexOf(& # 39;参数# 39;)+ 12,指数(str, & # 39; \ n # 39; (2))。取代(//g, & # 39; & # 39;) 

获取参数后以逗号切割,返回是一个字符串参数数组

常量数组=params.split (& # 39; & # 39;)//[& # 39;2743672230717162752(长)& # 39;,& # 39;1(整数)& # 39;,& # 39;登录(字符串)& # 39;,& # 39;3(整数)& # 39;]

提取完毕,则进行第三步的替换

<强> 3,替换参数

//遍历数组,每次调用一次替换(旧的,新的)即可,对字符串参数需要加上引号
  数组中。地图(项=比;{//获取每个参数的值
  让newValue=https://www.yisu.com/zixun/item.substring (0, item.indexOf (' ('))//获取参数类型
  const类型=item.substring (item.indexOf (“(”) + 1, item.indexOf ()))
  如果('字符串'===类型){
  newValue=" + newValue +“”
  }
  准备=准备.replace (& # 63;, newValue)
  
  })//遍历完毕,所有的占位符也就被参数替换完成啦
  console.log(准备)//插入图·图鲁。t_log_operation (id、模块module_description、类型、方法、运营商operate_time)值(2743672230717162752,1,“登录”,3,com.simba.tuloosa.controller.auth.LoginController。nativeLogin”、“6 d63b98cbe5e42d18c126da149162404’, unix_timestamp(现在()))

Mybatis日志参数如何快速替换占位符工具