当前位置: 首页 > wzjs >正文

页游网站百度收录网站提交入口

页游网站,百度收录网站提交入口,用开源源码做淘宝客网站,青浦门户网站1、背景 在我们开发的过程中,一般需要编写各种SQL语句,万一生产环境出现了慢查询,那么我们如何快速定位到底是程序中的那个SQL出现的问题呢? 2、解决方案 如果我们的数据访问层使用的是mybatis的话,那么我们可以通过…

1、背景

在我们开发的过程中,一般需要编写各种SQL语句,万一生产环境出现了慢查询,那么我们如何快速定位到底是程序中的那个SQL出现的问题呢?

2、解决方案

如果我们的数据访问层使用的是mybatis的话,那么我们可以通过mybatis提供的拦截器拦截系统中的SQL,然后将 mapper的命名空间和id追加到原始SQL的末尾,当作一个注释,这样不就可以实现吗? 类似效果如下:

select * from customer where phone = 'aaaaa';/**com.huan.study.mybatis.mappers.CustomerMapper.findCustomer*/

3、核心实现步骤

1、拦截器拦截SQL进行打标

package com.huan.study.mybatis.plugin;import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;import java.sql.Connection;/*** 在原始的Sql语句后面追加 sql id,方面知道当前查询语句是那个mapper文件中的** @author huan* @date 2025/3/11 - 00:30*/
@Slf4j
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}
)
public class PrintSqlIdInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {StatementHandler statementHandler = (StatementHandler) invocation.getTarget();MetaObject metaStatementHandler = MetaObject.forObject(statementHandler,SystemMetaObject.DEFAULT_OBJECT_FACTORY,SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,SystemMetaObject.NULL_META_OBJECT.getReflectorFactory());BoundSql boundSql = statementHandler.getBoundSql();MappedStatement mappedStatement = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement");String id = mappedStatement.getId();log.info("sql语句的id : {}", id);String sql = boundSql.getSql();if (!sql.endsWith(";")) {sql += ";";}sql = sql + "/**" + id + "*/";metaStatementHandler.setValue("delegate.boundSql.sql", sql);return invocation.proceed();}@Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}
}

2、配置插件

mybatis-config.xml中进行插件的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><plugins><plugin interceptor="com.huan.study.mybatis.plugin.PrintSqlIdInterceptor"/></plugins></configuration>

4、实现效果如下

select * from customer where phone = 'aaaaa';/**com.huan.study.mybatis.mappers.CustomerMapper.findCustomer*/
insert into customer(phone,address) values ('12345','湖北');/**com.huan.study.mybatis.mappers.CustomerMapper.addCustomer*/

可以看到我们对每个SQL都进行了打标,方便SQL的追踪

5、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/mybatis/mybatis-sql-marking

http://www.dtcms.com/wzjs/110662.html

相关文章:

  • 营销网站建设哪家便宜网站之家查询
  • 免费个人网站空间中国时事新闻网
  • 唐山建设造价信息网的网站爱网站关键词挖掘工具
  • 设计网站下载视频号最新动作
  • 桂林市七星区疫情最新消息google优化排名
  • 东莞网站建设 汇卓创建网站怎么创
  • wordpress js加载位置seo官网
  • 合肥免费招聘网站网站自然排名优化
  • 营销型网站大全武汉seo顾问
  • 企业网站推广的名词解释东莞最新疫情
  • 500强企业seo服务商金华seo
  • 宽带办理网站建设中国唯一没有疫情的地方
  • 企业形象网站用什么语言开发百度推广运营公司
  • 我国政府门户网站建设现状及对策研究青岛seo网站关键词优化
  • 福州网站建设多少钱网站子域名查询
  • 一品威客做的网站好用吗网络销售平台有哪些软件
  • 网站域名注册证书是什么网络营销期末考试试题及答案
  • 杜桥做网站哪家好免费外贸接单平台
  • 河北建设工程信息网招标网站seo规划
  • 扬中网站推广佛山全市核酸检测
  • 网站被301怎样做百度推广
  • 网站维护建设需要什么花费seo排名教程
  • 做网站排名优化是怎么回事郑州seo代理外包
  • 网站建设大学泉州全网推广
  • 电商常用的erp系统有哪些国内seo排名分析主要针对百度
  • 网络营销推广方法和工具seo网站优化培训公司
  • 国务院网站建设神马关键词快速排名软件
  • 网站开发与硬件合同百度app关键词优化
  • 网站返回首页怎么做的好看长沙seo网络优化
  • 哈尔滨网站设计定制seo销售