国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

2022-04-28 08:05:05

數據庫數據庫交互

2020-06-18 08:18:35

密碼加密安全

2019-10-18 10:43:11

JPASpring Boot Flyway

2023-03-13 07:35:44

MyBatis分庫分表

2024-10-07 08:40:56

Spring應用程序Java

2024-08-02 09:15:22

Spring捕捉格式

2023-10-18 08:12:34

Spring自動配置

2020-08-05 08:30:25

Spring BootJavaSE代碼

2018-01-11 15:31:39

命令Linux關機

2023-11-03 07:58:54

CORSSpring

2022-11-10 07:53:54

Spring參數校驗

2010-06-17 15:33:16

SQL Server

2016-05-09 10:41:03

算法分析開發

2017-02-23 15:37:44

OptionObject容器
點贊
收藏

51CTO技術棧公眾號

天天操综合520| 精选一区二区三区四区五区| 亚洲小说欧美激情另类| 蜜桃视频在线观看一区二区| 欧美激情一区二区在线| 欧美视频在线一区二区三区| 久久久亚洲天堂| 久久综合久久八八| 国产成人福利视频| 久久久久免费精品| av基地在线| 91se在线| 久久久欧美精品sm网站| 91精品国产91久久久久| 亚洲一区在线视频| 欧美在线视频一区| 91午夜在线观看| 成人影院在线看| av免费精品一区二区三区| 国产黄色精品| 日日摸夜夜添夜夜添国产精品| 91美女福利视频高清| 国产精东传媒成人av电影| 国产亚洲欧洲高清一区| 香蕉视频亚洲一级| 亚洲国产另类久久精品| yellow91字幕网在线| 亚洲成人资源在线| 国产高潮av| 日本一区二区三区久久久久久久久不| 欧美伦理一区二区| 日本www.色| av福利精品导航| 国产精品久久久久福利| 日韩视频一区二区三区四区| 国产真实乱子伦精品视频| 国语精品中文字幕| 亚洲一区国产| 国产精品自拍首页| 国产精品一国产精品| 3d动漫啪啪精品一区二区免费| 欧美裸体在线版观看完整版| 国产精品色午夜在线观看| 精品视频99| 欧洲亚洲免费在线| 欧美激情综合| 国外成人免费视频| 亚洲永久网站| 青青草国产精品视频| 久久午夜国产精品| 116美女写真午夜一级久久| 亚洲午夜久久久久| 成人性生交大片免费看视频r| 亚洲免费色视频| 正在播放一区二区| 唐人社导航福利精品| 欧美在线三级电影| 国产精品影院在线| 亚洲黄色天堂| 一二三四视频社区在线| 国产成人精品免费网站| 久久精品国产精品国产精品污| 国产精品盗摄久久久| 久久婷婷成人综合色| 欧美日韩一卡| 国产精品㊣新片速递bt| 日韩精品免费一线在线观看| 国产欧美激情| 毛片网站大全| 成人蜜臀av电影| 六月婷婷久久| 深夜福利久久| 亚洲影视中文字幕| 亚洲另类春色校园小说| 久久久久久久久久久av| 日韩精品一区二区三区免费视频| 欧美xxxxx牲另类人与| 韩国三级大全久久网站| 欧美一区二粉嫩精品国产一线天| 欧美xxx在线观看| 日韩在线播放一区| 久久久亚洲欧洲日产| 国产欧美精品日韩精品| 一区二区三区国产盗摄 | 婷婷成人激情在线网| 看黄的a网站| 欧美久久久久久蜜桃| 免费观看不卡av| 99porn视频在线| 国产精品s色| 亚洲精品天堂成人片av在线播放| 久久久久久久久久久久久女国产乱| 成片免费观看视频| 欧美三级乱人伦电影| 日本综合视频| 日韩av在线一区二区三区| 粉嫩绯色av一区二区在线观看| 国产一级揄自揄精品视频| 久草在线资源福利站| 欧美精品成人91久久久久久久| 在线观看视频免费| 欧美午夜久久久| 成人免费av电影| 绯色av一区| 成年人视频网站免费| 国产精品久久久一区二区| 国产美女精品视频| 99亚洲伊人久久精品影院红桃| 欧美精品乱码久久久久久| 国产精品综合视频| 亚洲天天影视| 中文字幕巨乱亚洲| 亚洲啊v在线| 亚洲一区二区三区香蕉| 国产欧美日产一区| av资源一区| 亚洲综合色激情五月| 肉体视频在线| 国产精品国产三级国产aⅴ浪潮| 激情图区综合网| 污污的网站在线免费观看| 国产在线视频欧美| 国产香蕉久久精品综合网| 色综合桃花网| 精品久久精品久久| 午夜婷婷国产麻豆精品| 日本妇女一区| 韩国日本美国免费毛片| 日韩精品欧美国产精品忘忧草| 麻豆精品视频在线观看免费| av片在线看| 欧美日韩国产系列| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩加勒比系列| 欧美情侣性视频| 国产亚洲一区二区在线观看| 美女高潮在线观看| 亚洲线精品一区二区三区八戒| 久久91视频| 日韩成人手机在线| 精品国产一区二区三区四区四 | 国产高清自拍99| 一区二区三区国产豹纹内裤在线| 天堂久久av| 免费无码国产v片在线观看| 久久婷婷国产综合国色天香| 欧美日韩在线观看首页| 成人黄色大片网站| 亚洲女人天堂网| 国产日韩欧美一区| 国产大学生校花援交在线播放| 91精品久久久久久久久久入口| 色噜噜狠狠成人中文综合| 97人人精品| 怡红院红怡院欧美aⅴ怡春院| 亚洲v国产v在线观看| 日韩电影网在线| 成人精品电影在线观看| 99久热在线精品视频观看| 亚洲精品高清无码视频| 97在线观看视频| 亚洲成a人片在线不卡一二三区| 久久综合电影| 国产女人在线观看| 精品在线视频一区二区三区| 欧美猛男男办公室激情| 视频精品一区二区| 色在线中文字幕| 日本一区二区黄色| 性色av一区二区三区在线观看| 亚洲色图欧美在线| 国产欧美日韩精品一区二区三区 | 在线观看www91| 伊人久久亚洲美女图片| 黄在线免费观看| 色综合久久久久久久久五月| 日韩欧美国产骚| 日韩免费在线观看| 亚洲国产精彩中文乱码av| 欧美日韩中文国产| 欧美三级免费观看| 国产欧美日韩激情| 亚洲一区国产| 日韩88av| 中文字幕这里只有精品| √天堂8在线网| 97超级碰碰碰久久久| 亚洲精品v日韩精品| 99久久www免费| 黄视频网站在线看| 欧美日韩在线免费播放| 国产精品久久久91| 欧美唯美清纯偷拍| 视频一区二区中文字幕| 国产不卡人人| 精品无码国产一区二区三区av| 欧美大片欧美激情性色a∨久久| 亚洲一区在线电影| 首页亚洲欧美制服丝腿| 在这里有精品|