欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot單獨在指定地方輸出sql的方法

 更新時間:2023年10月12日 09:01:11   作者:枯楓葉  
一般線上項目都是將日志進行關閉,因為mybatis日志打印,時間長了,會占用大量的內(nèi)存,如果我想在我指定的地方進行打印sql情況,本文就給大家介紹了springboot單獨在指定地方輸出sql的方法,需要的朋友可以參考下

一般線上項目都是將日志進行關閉,因為mybatis日志打印,時間長了,會占用大量的內(nèi)存,如果我想在我指定的地方進行打印sql情況,怎么玩呢!

下面這個場景:

某天線上的項目出bug了,日志打印出來是更新成功的,但是數(shù)據(jù)庫的數(shù)據(jù)卻沒有更新,這時候我想給執(zhí)行這條sql打印出來,方便查看,但是一旦開啟mybatis的日志打印功能,就回去全局打印所有的日志,我只想在我想打印的地方打印sql,這時候怎么辦呢!見下面的列子:

我想在下面紅色箭頭處打印這句sql

這時候怎么做呢,咱們可以這樣,先將SqlSessionFactory對象注入進來,

如下圖:

private final SqlSessionFactory sqlSessionFactory;
    @Autowired
    public LoginService(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

然后在需要打印的地方加上下面的代碼即可:

// 獲取執(zhí)行的SQL語句并打印
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            Configuration sqlSessionConfiguration = sqlSession.getConfiguration();
            BoundSql boundSql = sqlSessionConfiguration
                    .getMappedStatement("com.green.testlocalhost.mapper.AdminUserMapper.selectOneByExample")
                    .getSqlSource()
                    .getBoundSql(userExample);
            String sql = StringUtils.getExecSql(sqlSessionConfiguration, boundSql);
            System.out.println("本次執(zhí)行的sql語句::" + sql);
        }

注意:com.green.testlocalhost.mapper.AdminUserMapper.selectOneByExample 這個是StatementId,也就是你主動調用db框架的那個類或者接口的包路徑(com.green.testlocalhost.mapper.AdminUserMapper),然后在路徑后面拼接調用的方法(selectOneByExample )即可

用到的工具方法如下:

/**
     * 獲取執(zhí)行的sql語句
     * @param configuration
     * @param boundSql
     * @return
     */
    public static String getExecSql(Configuration configuration, BoundSql boundSql) {
        try {
            Object parameterObject = boundSql.getParameterObject();
            List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
            String sql = boundSql.getSql().replaceAll("[\\s]+", " ");
            if (!parameterMappings.isEmpty() && parameterObject != null) {
                TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
                if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
                    sql = sql.replaceFirst("\\?", getParameterValue(parameterObject));
                } else {
                    MetaObject metaObject = configuration.newMetaObject(parameterObject);
                    for (ParameterMapping parameterMapping : parameterMappings) {
                        String propertyName = parameterMapping.getProperty();
                        Object obj;
                        if (metaObject.hasGetter(propertyName)) {
                            obj = metaObject.getValue(propertyName);
                            sql = sql.replaceFirst("\\?", getParameterValue(obj));
                        } else if (boundSql.hasAdditionalParameter(propertyName)) {
                            obj = boundSql.getAdditionalParameter(propertyName);
                            sql = sql.replaceFirst("\\?", getParameterValue(obj));
                        }
                    }
                }
            }
            return sql;
        } catch (Exception var11) {
            return "";
        }
    }
    private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static String getParameterValue(Object obj) {
        String value;
        if (obj instanceof String) {
            value = "'" + obj + "'";
        } else if (obj instanceof Date) {
            value = "'" + SIMPLE_DATE_FORMAT.format(obj) + "'";
        } else if (obj != null) {
            value = obj.toString();
        } else {
            value = "";
        }
        return value;
    }

這樣就可以在你指定的代碼地方打印sql而不是全局打印sql了

以上就是springboot單獨在指定地方輸出sql的方法的詳細內(nèi)容,更多關于springboot輸出sql的資料請關注腳本之家其它相關文章!

相關文章

  • 詳談jpa中表的@OneToMany等關聯(lián)關系

    詳談jpa中表的@OneToMany等關聯(lián)關系

    這篇文章主要介紹了詳談jpa中表的@OneToMany等關聯(lián)關系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JUnit 5中擴展模型的深入理解

    JUnit 5中擴展模型的深入理解

    幾乎所有的Java 開發(fā)人員都會使用JUnit 來做測試,但其實很多自動化測試人員也會使用Junit 。下面這篇文章主要給大家介紹了關于JUnit 5中擴展模型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-08-08
  • Java將文件夾保留目錄打包為 ZIP 壓縮包并下載的教程詳解

    Java將文件夾保留目錄打包為 ZIP 壓縮包并下載的教程詳解

    這篇文章主要介紹了Java將文件夾保留目錄打包為 ZIP 壓縮包并下載的教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java受檢異常的一些思考

    Java受檢異常的一些思考

    受檢異常是否真的有必要?這是一個爭論了很久的問題,至今仍然沒有一個確定的答案。Java的受檢異常,被很多人吐槽,也被很多人喜愛,當然他們都可以拿出很多的理由來證明自己的觀點。
    2020-12-12
  • Java實現(xiàn)的漢語拼音工具類完整實例

    Java實現(xiàn)的漢語拼音工具類完整實例

    這篇文章主要介紹了Java實現(xiàn)的漢語拼音工具類,結合完整實例形式分析了java基于pinyin4j包實現(xiàn)編碼轉換的相關操作技巧,需要的朋友可以參考下
    2017-11-11
  • 深入理解Java設計模式之觀察者模式

    深入理解Java設計模式之觀察者模式

    這篇文章主要介紹了JAVA設計模式之觀察者模式的的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解
    2021-11-11
  • 三分鐘快速掌握Java中枚舉(enum)

    三分鐘快速掌握Java中枚舉(enum)

    enum的全稱為enumeration, 是 JDK 1.5中引入的新特性,存放在 java.lang包中。下面這篇文章是我在使用enum過程中的一些經(jīng)驗和總結,分享出來方便大家快速的掌握Java中枚舉(enum),有需要的朋友們下面跟著小編來一起看看吧。
    2016-12-12
  • Spring Boot項目中實現(xiàn)文件上傳功能的示例

    Spring Boot項目中實現(xiàn)文件上傳功能的示例

    這篇文章主要介紹了Spring Boot項目中實現(xiàn)文件上傳功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Spring項目集成RabbitMQ及自動創(chuàng)建隊列

    Spring項目集成RabbitMQ及自動創(chuàng)建隊列

    這篇文章主要介紹了Spring項目集成RabbitMQ及自動創(chuàng)建隊列,本文內(nèi)容分別在Spring(V5.2.6)和Spring Boot(V2.5.14)兩個項目中經(jīng)過了驗證,需要的朋友可以參考下
    2024-02-02
  • 詳解Java分布式Session共享解決方案

    詳解Java分布式Session共享解決方案

    這篇文章主要介紹了詳解Java分布式Session共享解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04

最新評論