成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot中記錄JDBC、JPA及MyBatis執行SQL及參數的正確姿勢

開發 前端
本文將介紹在Spring Boot中使用JDBC、JPA及MyBatis進行數據庫操作時記錄執行的SQL語句。這些方法包括配置日志級別以捕獲SQL輸出、自定義數據源輸出SQL語句,以及使用第三方庫來增強SQL記錄的功能。

環境:SpringBoot3.4.0


1. 簡介

在Spring Boot應用開發中,監控和記錄SQL執行語句對于調試、性能優化以及確保數據訪問層的正確性至關重要。無論是使用JDBC直接操作數據庫,還是通過JPA或MyBatis等ORM框架,他們都有不同的SQL語句的記錄方式。

本文將介紹在Spring Boot中使用JDBC、JPA及MyBatis進行數據庫操作時記錄執行的SQL語句。這些方法包括配置日志級別以捕獲SQL輸出、自定義數據源輸出SQL語句,以及使用第三方庫來增強SQL記錄的功能。

2. 實戰案例

2.1 JDBC記錄SQL

如下數據庫操作:

private final JdbcTemplate jdbcTemplate ;
public JdbcService(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate;
}
  
public void query() {
  String sql = "select id, name, age from user x where x.id = ?" ;
  User user = this.jdbcTemplate.queryForObject(sql, new RowMapper<User>() {
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
      return new User(rs.getLong(1), rs.getString(2), rs.getString(3)) ;
    }
  }, 8) ;
  System.err.printf("user = %s\n", user) ;
}

默認情況下,執行上面操作是不會輸出任何SQL語句的,我們可以通過如下的配置:

logging:
  level:
    '[org.springframework.jdbc.core.JdbcTemplate]': debug

圖片圖片

如果你還希望輸出動態參數,則再添加如下日志配置:

logging:
  level:
    '[org.springframework.jdbc.core.StatementCreatorUtils]': trace

圖片圖片

2.2 JPA記錄SQL

如下數據庫操作:

private final UserRepository userRepository ;
public UserService(UserRepository userRepository) {
  this.userRepository = userRepository;
}
public User findById(Long id) {
  return this.userRepository.findById(id).orElse(null) ;
}

最常見的輸出執行SQL方式

spring:
  jpa:
    show-sql: true
    properties:
      hibernate:
        '[format_sql]': true

圖片圖片

但是此種方式是直接通過System.out方式進行輸出,并且還不會記錄預處理語句的參數;不推薦此做法。

使用日志框架記錄

在application.yml或properties中進行日志的配置:

logging:
  level:
    '[org.hibernate.SQL]': debug
    '[org.hibernate.orm.jdbc.bind]': trace

org.hibernate.SQL:記錄執行的SQL。

org.hibernate.orm.jdbc.bind:記錄預處理語句的參數。

圖片圖片

2.3 MyBatis記錄SQL

如下數據庫操作:

@Select("select id, age, name, deleted from user where id = ${id}")
User queryUserById(@Param("id") Long id) ;

注意:${xx}有注入風險?我重寫了mybatis處理SQL的一個核心類,不再有任何注入風險

比較常見的配置日志方式

mybatis:
  configuration: 
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

如上配置日志輸出結果如下:

圖片圖片

不僅僅輸出的是sql還將數據也輸出了,并且這里是通過System.out進行輸出的,并且還不管你是否配置的debug級別都會進行輸出,下面是源碼部分:

圖片圖片

使用SLF4j日志實現

mybatis:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

如上配置后并不會輸出sql日志,還需要進行如下的配置:

logging:
  level:
    '[com.pack.mapper]': DEBUG

圖片

2.4 萬能SQL記錄方式

使用攔截器是記錄各種SQL查詢的最佳方法。在這種方法中,我們可以攔截JDBC調用,對其進行格式化,然后以自定義格式記錄SQL查詢。

下面介紹一個第三方開源庫datasource-proxy,該組件用于攔截SQL查詢并記錄。

<dependency>
  <groupId>com.github.gavlyukovskiy</groupId>
  <artifactId>datasource-proxy-spring-boot-starter</artifactId>
  <version>1.10.0</version>
</dependency>

日志級別配置如下:

logging:
  level:
    '[net.ttddyy.dsproxy.listener]': debug

這時候不論你使用JDBC,JPA還是MyBatis都能優雅的記錄SQL信息。

圖片圖片

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2021-09-15 16:20:02

Spring BootFilterJava

2025-03-11 00:55:00

Spring停機安全

2025-02-12 08:07:40

2024-08-01 09:10:03

2024-08-12 10:13:01

2024-12-06 10:43:27

2020-06-18 08:18:35

密碼加密安全

2022-04-28 08:05:05

數據庫數據庫交互

2019-10-18 10:43:11

JPASpring Boot Flyway

2024-08-02 09:15:22

Spring捕捉格式

2024-10-07 08:40:56

Spring應用程序Java

2020-08-05 08:30:25

Spring BootJavaSE代碼

2018-01-11 15:31:39

命令Linux關機

2023-10-18 08:12:34

Spring自動配置

2016-05-09 10:41:03

算法分析開發

2017-02-23 15:37:44

OptionObject容器

2023-03-13 07:35:44

MyBatis分庫分表

2022-11-10 07:53:54

Spring參數校驗

2023-11-03 07:58:54

CORSSpring

2010-06-17 15:33:16

SQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91社影院在线观看 | 久久久免费在线观看 | 亚洲视频一区二区 | 蜜桃视频在线观看免费视频网站www | 欧美精品久久久久久久久老牛影院 | 久久久av中文字幕 | 天天干视频 | 亚洲国产一区二区三区 | 精品动漫一区 | 欧美精品在线一区二区三区 | 国产成人黄色 | 在线播放国产一区二区三区 | 久久中文字幕一区 | 91精品国产一二三 | 国产伦精品一区二区三区照片91 | 一区二区三区亚洲视频 | 免费观看的av毛片的网站 | 国产成人精品午夜 | 亚洲精品一区二区网址 | 国产精品区二区三区日本 | 夜夜爽99久久国产综合精品女不卡 | 欧美一级片在线 | 国产aaaaav久久久一区二区 | 91xxx在线观看 | 伊人超碰 | 久久99精品国产99久久6男男 | 91婷婷韩国欧美一区二区 | 一区二区三区中文字幕 | 亚洲精品一区二三区不卡 | 国产一区二区在线播放 | 精品久久香蕉国产线看观看亚洲 | 国产伦一区二区三区 | 亚洲国产成人精品久久久国产成人一区 | 一区二区三区四区不卡视频 | 亚洲精品美女视频 | 国产成人免费 | 精品国产18久久久久久二百 | 在线视频成人 | 9久久婷婷国产综合精品性色 | 香蕉av免费 | 天天久久 |