kookob / mybatis-log-plugin Goto Github PK
View Code? Open in Web Editor NEWRestore mybatis sql log to original whole executable sql.
Home Page: https://plugins.jetbrains.com/plugin/13905-mybatis-log-plugin
License: Other
Restore mybatis sql log to original whole executable sql.
Home Page: https://plugins.jetbrains.com/plugin/13905-mybatis-log-plugin
License: Other
sql log的控制台窗口的优先级比自带的database console优先级更高;
1.ctrl+shift+alt+o 呼出mybatis sql log console
2.输出解析的sql
3.idea db插件执行sql,explain
4.explain结果显示在database console中,但是被sql log console遮挡住
项目启动或者debug,插件都识别不出sql。但手工进行转换可以。
使用一段时间后会记IDEA CPU的使用率很高,并且一直降不下来
如题idea 2019.1多线程情况下只打印控制台的第一个sql,插件版本2.0.9
原SQL语句的长度大概7200个字符,使用 Restore sql from text 功能格式化SQL的时候,输出的结果只有1800多个字符了,后面的字符都被截断了。
日志满足你所说的有:Preparing和Parameters,但插件无任何输出。
现在每次要手动去tools里点击才能在底部显示
大概作者已经发现这些小问题了,期待下一次更新
IDEA 版本:2018.2.5
插件版本:2.0.6
启用插件后在 Run Dashboard
中输出的日志不能自动滚动(Scroll to the end 失效)
异常信息类名无高亮显示,不可点击跳转定位。
禁用插件后恢复正常。
preparing和executing应该都支持才好。
多个线程输出mybatis日志时,SQL语句错位。
日志输出顺序:
thread1: Preparing
thread2: Preparing
thread1: Parameters
thread2: Parameters
我配合远程调试时发现Terminal里打印的日志无法捕获,而且也没有选中右键菜单。能否增加这个功能?
这样的格式识别不出来
2018-04-18 13:43:55
[DEBUG]-[Thread: http-apr-8080-exec-2]-[org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug()]: ==> Preparing: SELECT count(0) FROM p_ordrer WHERE 1 = 1 AND user_id = ? AND is_delete != 1 AND order_status = ? AND logistic_status = ?
2018-04-18 13:43:55
[DEBUG]-[Thread: http-apr-8080-exec-2]-[org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug()]: ==> Parameters: 1(String), W(String), LW(String)
IDEA 版本:2018.2.3
插件版本:2.0.4
程序运行期间,点击 Close 关闭 mybatis-log 的窗口后抛出 NPE
异常信息:
update failed for ActionGroup: Format Sql (Format Sql)[Format Sql]
java.lang.NullPointerException
at mybatis.log.MyBatisLogConfig.getConfigVo(MyBatisLogConfig.java:23)
at mybatis.log.tail.TailContentExecutor$FormatAction.isSelected(TailContentExecutor.java:248)
at com.intellij.openapi.actionSystem.ToggleAction.update(ToggleAction.java:65)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareUpdate(ActionUtil.java:136)
at com.intellij.openapi.actionSystem.impl.Utils.doUpdate(Utils.java:256)
at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:199)
at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.updateActionsImpl(ActionToolbarImpl.java:1100)
at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.access$000(ActionToolbarImpl.java:53)
at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl$2.updateActionsImpl(ActionToolbarImpl.java:175)
at com.intellij.openapi.actionSystem.impl.ToolbarUpdater$MyUpdateRunnable.run(ToolbarUpdater.java:186)
at com.intellij.openapi.actionSystem.impl.ToolbarUpdater.updateActions(ToolbarUpdater.java:101)
at com.intellij.openapi.actionSystem.impl.ToolbarUpdater.updateActions(ToolbarUpdater.java:93)
at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.updateActionsImmediately(ActionToolbarImpl.java:1093)
at com.intellij.openapi.actionSystem.impl.ActionButton.performAction(ActionButton.java:163)
at com.intellij.openapi.actionSystem.impl.ActionButton.processMouseEvent(ActionButton.java:388)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:781)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:718)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
虽然此异常并不影响使用~
Executing: update SYS_LOG SET.....
Parameters: ccbc79b43ac44a.....
如果可是设置 Executing、Parameters这两个关键字就很好用了
id=1,pass=123,
id=2,pass=223,
转换成这种效果显示处理就好了。
IDEA 2018.03的时候还可以用,最近更新到2019版本了,什么都打印不出来了,不知道为什么
生成的sql语句 截取部分
AND ts.order_date >= '2019-03-10 00:00:00.0'
AND ts.order_date < '2019-04-10 23:59:59.0'
执行报错
ORA-01861: literal does not match format string
转换后可执行
AND ts.order_date >= to_date('2019-03-10 00:00:00' , 'yyyy-mm-dd hh24:mi:ss')
AND ts.order_date < to_date('2019-04-10 23:59:59' , 'yyyy-mm-dd hh24:mi:ss')
oracle版本
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
IntelliJ IDEA 2019.3.2 (Ultimate Edition)
java.lang.Throwable: Runner MyBatisLogPlugin is not registered
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
at com.intellij.execution.ui.RunContentManagerImpl.getContentManagerForRunner(RunContentManagerImpl.java:472)
at com.intellij.execution.ui.RunContentManagerImpl.showRunContent(RunContentManagerImpl.java:260)
at com.intellij.execution.ui.RunContentManagerImpl.showRunContent(RunContentManagerImpl.java:252)
at mybatis.log.tail.TailContentExecutor.run(TailContentExecutor.java:153)
at mybatis.log.action.ShowLogInConsoleAction.showLogInConsole(ShowLogInConsoleAction.java:59)
at mybatis.log.action.TailMyBatisLog.actionPerformed(TailMyBatisLog.java:16)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:298)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:315)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:294)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:263)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:284)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:83)
at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:107)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:116)
at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:121)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:401)
at java.desktop/javax.swing.AbstractButton.doClick(AbstractButton.java:369)
at java.desktop/com.apple.laf.ScreenMenuItemCheckbox.itemStateChanged(ScreenMenuItemCheckbox.java:198)
at java.desktop/java.awt.CheckboxMenuItem.processItemEvent(CheckboxMenuItem.java:396)
at java.desktop/java.awt.CheckboxMenuItem.processEvent(CheckboxMenuItem.java:364)
at java.desktop/java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:375)
at java.desktop/java.awt.MenuComponent.dispatchEvent(MenuComponent.java:363)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:781)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:781)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
如题
当sql中含有中文,例如 :CASE WHEN status = 'REFUSE' THEN '拒绝' 时替换出来的sql是把 '拒绝' 替换成了参数
设置了filter之后发现无法清除设置,那个filter框一定要填东西。
第一次选Restore Sql from Selection的时候那个背景颜色可以自己更换吗,那片黄色实在太刺眼了
replacefirst的方法抛异常
原SQL语句的长度大概7200个字符,使用 Restore sql from text 功能格式化SQL的时候,输出的结果只有1800多个字符了,后面的字符都被截断了。
首先很喜欢作者的这个插件,本地调试很方便,但是我更多的痛点问题是把项目发布到服务器上,sql都在日志里,作者能否提供一个输入框让我直接粘贴进来?
最后先给个star,持续关注下
啊啊啊啊啊啊啊啊
sql里正则表达式里有?,格式化会被替换成参数
输入过滤的字符没有任何反应
与sprint boot集成时,配置mybatis.typeAliasesPackage或mybatis.type-aliases-package能设置alias。但mapper xml中使用alias会标红显示错误,但代码实际是可以编译运行的。
如题
[DEBUG][2018/04/09 17:38:04][http-nio-7001-exec-7] (BaseJdbcLogger.java:159) - ==> Preparing: insert into sql_execute_fact ( hash_code, sql_scripts, sql_type, execute_time, result_size, created_at ) values ( ?, ?, ?, ?, ?, ? )
[DEBUG][2018/04/09 17:38:04][http-nio-7001-exec-7] (BaseJdbcLogger.java:159) - ==> Parameters: d26e232643e79e6dd00f73a3dc770684(String), H4sIAAAAAAAAAIWMywrCMBBFf+XuWiHgY+vHDDGMTcGZSDIx5u+rhSKC4PJezjmFbxwMpcqo3Cjz
RFplB1/QD+7rb7NFeg9jLx/q6PAH2/+snxxC0uCNWhmHwcEiU2efHYSCknrhlXwC15wEW+FlPTgb
ppzqHZe+ipLU4nkBWJrAG84AAAA=(String), 0(Integer), 62(Long), 442(Long), 2018-04-09 17:38:04.761(Timestamp)
154 restore sql from selection - ==>
insert into sql_execute_fact ( hash_code, sql_scripts, sql_type, execute_time, result_size, created_at ) values ( 'd26e232643e79e6dd00f73a3dc770684', H4sIAAAAAAAAAIWMywrCMBBFf+XuWiHgY+vHDDGMTcGZSDIx5u+rhSKC4PJezjmFbxwMpcqo3Cjz, error, error, error, error );
---This is an error sql!---
谢谢 ^_^
是因为设定了,第三个项目需要是收费的相关东西吗?
可能是因为版本问题吧,我这里输出的不是Preparing:和Executing:
而是Preparing Statement:和Executing Statement:
是否能支持一下呢。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.