当前位置: 首页 > 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/148358.html

相关文章:

  • 网站建设与安全汕头百度seo公司
  • 余姚哪里有做淘宝网站的怎么搭建自己的网站
  • 国家企业信用信息公示系统官网山东苏州seo关键词优化软件
  • 专业团队的梗关键词优化报价
  • 江苏华东建设基础工程有限公司网站合肥seo招聘
  • 辽宁建设工程信息网官网新网站如何进入下载班级优化大师
  • 宜春网站建设推广seo范畴有哪些
  • 幼儿园主题网络图如何设计广州seo关键字推广
  • vi设计概念seo综合查询是啥意思
  • 大连网站设计九首选仟亿科技seo优化对网店的推广的作用为
  • 购物帮做特惠的导购网站江苏网站推广
  • 企业英语网站推广类软文
  • 展览网站模板大全谷歌排名规则
  • 做公司网站windows 优化大师
  • 直销网站建设公司品牌运营管理有限公司
  • 网站建设的目的优网营销
  • 网站域名使用代理5118站长工具箱
  • 厦门制作企业网站青岛关键词排名提升
  • 重庆微信开发网站建设产品推广平台
  • 网页传奇哪个比较好玩高明公司搜索seo
  • wordpress 运行速度慢seo企业优化方案
  • 我的世界做图片的网站广州seo推广优化
  • it运维外包服务方案seo排名怎么做
  • wordpress文章自定义字段东莞网站建设优化排名
  • 常州想做个企业的网站找谁做深圳网络络推广培训
  • 在线网站制作模拟厦门seo屈兴东
  • 云畅网站建设快速网站排名提升
  • 山东建设报网站网络广告策划书范文
  • 武汉移动网站制作百度入驻商家
  • 响应式网站一般做几个版本长春疫情最新情况