當前位置:首頁 » 編程語言 » springboot查看執行的sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

springboot查看執行的sql

發布時間: 2022-09-14 00:12:30

1. springboot集成了mybatis為什麼控制台不顯示sql語句

:mybatis默認使用log4j,當有self4j這個日誌jar包存在時會無法列印sql,請移除或者在工程啟動

2. spring boot jpa如何列印sql

其實很簡單,只需要在application.properties中加入兩句配置就行了。

這個時候我們啟動spring boot的時候就可以看見jpa會幫我創建表並在調用jpa的時候會幫我列印出相應的sql.

啟動的時候生成的sql

調用jpa介面的時候生成的sql

只需要在application.properties中加入我上面所寫的兩個配置就行了。

3. SpringBoot進階之事務管理及並發問題

大家好,一直以來我都本著用最通俗的話理解核心的知識點, 我認為所有的難點都離不開 「基礎知識」 的鋪墊。目前正在出一個 SpringBoot 長期系列教程,從入門到進階, 篇幅會較多~

「大佬可以繞過 ~」

如果你是一路看過來的,很高興你能夠耐心看完。之前帶大家學了 Springboot 基礎部分,對基本的使用有了初步的認識, 接下來的幾期內容將會帶大家進階使用,會先講解基礎 中間件 的使用和一些場景的應用,或許這些技術你聽說過,沒看過也沒關系,我會帶大家一步一步的入門,耐心看完你一定會有 收獲 ~

上期帶大家學習了 SpringBoot 中如何去攔截請求, 本期將帶大家學習 MyBatis 中如何進行 事務管理 ,同樣的,我們集成到 Springboot 中。最近github可能會被牆,所以我把源碼放到了國內gitee上,本節我們依然使用上期的代碼

我們先了解一下它的基本概念。其實 事務 它不僅是在這里我們提到的 mybatis ,其實它在資料庫中也是存在的。 事務 我們從字面意思理解,它好比烤麵包,經過一些列的步驟之後,最終提供給客戶完整的麵包,也就是說中間出現差錯,就得回退。可能舉這個例子不大合適,再舉一個我們業務中的場景吧。用戶購買一個商品,首先下單,下完單之後進行支付,支付成功後訂單為支付成功狀態,跳轉成功頁,這一系列操作就是一個事務,要麼成功要麼失敗。

在通過上面的例子有了大概了解之後,我們再看看它的基本概念。

下面帶大家看看 sql 如何執行事務操作。下面舉個例子比較一下

沒有事務操作的時候:

以之前的場景給大家舉例, 用戶支付減少余額 並改訂單狀態為成功。 當我們的程序執行了上邊的兩條 sql ,大家覺得有問題嗎?這肯定得出事,這不得被人薅死。雖然語句沒報錯,但是邏輯錯了,為啥 因為余額變成負數了,這不是沒錢白嫖,還指望用戶給你沖上嗎。然後訂單還給成功了,如果遇到並發大的時候,這得多少錢,發還是不發貨呢?告訴用戶系統問題?老闆看了得哭死。

所以不管是程序上的錯誤(sql執行錯誤),還是邏輯上的錯誤都不能進行下一步操作,所以事務顯的尤為重要。那麼 sql 怎麼提交事務呢?

上邊只是給大家舉個例子,生成中我們還得用 mybatis 去操作。

SpringBoot 中執行事務非常簡單,首先要開啟事務 @EnableTransactionManagement ,在啟動類上加上:

添加控制器方法:

我們訪問 http://localhost:8877/api/user/trans?name=xiaohong , 發現資料庫並沒有產生新紀錄和更新記錄, @Transactional(rollbackFor = Exception.class) 表示開啟一個事務,當捕獲到 Exception 異常就進行回滾。把 name 換掉會發現,執行成功了。

執行失敗的時候:

那有沒有 手動 去執行回滾操作的呢?有時候,我們總不能靠異常來判斷,需要通過邏輯判斷:

上邊的方法 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 就是干這個的。

其實本節到這里差不多就結束了,給大家多講一點, 其實這一塊內容理論知識點還是比較多多的,這也是面試比較喜歡問的,因為這里真就靠大家自己去理解和學習了,寫代碼誰都會,但是講出來,不一定每個人都講的好和清楚,因為每個人的理解和認知不一樣。

有時候,客戶反饋有 bug ,反饋到你這邊,你可能會說,我這都是好的。因為我們是本地的,不是跑在線上的,本地就你自己完,所以覺得沒啥問題。但線上是很多用戶在使用,當多用戶使用的時候就會產生並發問題,所以也就是在介面測試的時候為什麼要進行一下測試環境的壓測,合格後上線。

那麼在並發大的時候,我們資料庫可能會產生什麼問題呢?

好,我們一個一個講,首先說說什麼是丟失更新?

一個事務覆蓋另一個事務已提交的更新數據叫丟失更新。這里提到過它存在兩種丟失情況,為了讓大家能夠更加直觀的感受,我以存錢和取錢為例講一下。

首先說說第一種丟失情況

先分配一下角色,事務A,事務B,賬戶C。 首先A對C進行賬戶查詢,余額為5000,B對A查詢,余額為5000,此時余額一樣沒啥問題。緊接著B對C進行存錢操作,存了1000, 存完B提交事務。而此時A呢,正對著C進行取錢,取了1000, 它也提交了事務。那麼問一下大家, C還有多少錢?

最後A查了一下賬戶,發現只有4000, 發現少了1000。

下邊我們把壓力給到A這邊,第二種其實跟上邊是反過來,情況是怎麼樣的呢?首先A,B跟之前一樣,查了下C,余額為5000。此時,A對C進行取錢操作,取了1000,然後提交事務,B呢對A進行存錢操作,存了1000,提交事務。最後B一查,發現賬戶有6000, C開心極了, 多了1000

上邊這兩種情況都屬於丟失更新的情況

一個事務讀取到另一個事務還沒提交的數據叫臟讀。我們還以上邊的為例:

這個稍微好理解一點,事務A和B, 事務A對C進行取錢操作,取了1000, 余額還剩 4000, 此時B呢對C進行查詢操作,讀到余額為4000。這時產生問題了,因為A現在還是一個未提交的事務,A對賬戶C取錢操作進行了 回滾 , 緊接著存了1000, 然後進行了 事務提交 , 此時余額為6000。而我們的B讀到的數據是4000,所以這就是 臟讀

一個事務先後讀到另一個事務提交之前的數據和已提交的更新數據。同樣的以上邊為例,這個大家可能不好理解,下面好好分析一下:

首先事務A和B, A先查詢C余額還有 5000, B 查詢C,余額還有5000, 緊接著A對C執行取錢操作,取了1000, 提交事務, 此時B執行查詢操作,發現C只有4000了。你可能想,這沒問題啊,取了1000還有4000,沒毛病啊。沒問題嗎?重復讀了兩次,結果不一致,這肯定是有問題的。

事務在操作過程中進行兩次查詢,第二次查詢的結果包含了第一次查詢中未出現的數據或者缺少了第一次查詢中出現的數據。這有點抽象,同樣的,還以上邊為例

事務A和B,B查詢C,余額5000, A注銷了C,提交了事務,此時B又去查詢C, 發現C沒了,B事務查詢兩次,結果確不一致,跟產生了幻覺一樣,剛剛還在的,這會沒了。

通過上邊的幾個例子,帶大家認識了,並發中可能產生的事務問題,下邊給大家總結一下事務的特點, 事務有4個特性,被稱為 ACID

下邊就給大家講講這幾個特性:

事務處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。

資料庫允許多個並發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務並發執行時由於交叉執行而導致數據的不一致。

在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞

一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成

隔離級別就不給大家講了,這不是本節的重點內容。本節的重點是大家要學會在 SpringBoot 中如何去執行 事務操作 ,如果你對上邊提到的一些概念性的東西還不能理解,也沒關系,等以後回過頭來看看也許就明白了,做個簡單的了解。

有時候我們的系統需要對用戶進行區分,也就是不同的用戶角色訪問不同的資源,比如管理員可以訪問後台,而普通用戶只能訪問前台的頁面,再或者只有登錄的用戶才能訪問特定功能,高級管理員可以掌管大局,普通的管理員只能查看某一個菜單。這就是涉及到許可權問題了,幾乎所有的系統都需要許可權管理,這樣能保證系統資源的安全性。下期將會帶大家學習 Shiro許可權 框架, 它是一個輕量級框架,但它的功能確不小, 我會從入門到進階講起, 會分為多期去講。

下期見,關注我,不迷路~

4. SpringBoot 中的 Mybatis 列印 執行過的SQL語句

在SpringBoot 中使用基於 Mybatis 框架,開發過程中,想看 Mybatis 生成的 sql語句 情況,做下配置即可。

非常簡單,如果使用的是application.yml文件,加入如下配置:

注意上面的 com.example.demo. 是個包名,指向你的mapper的包即可。

5. spring boot2.0後配置自動執行schema.sql無效

  • 需要配置log4j;

  • 2. 在log4j.properties文件里增加以下配置;

    12345678log4j.appender.Console=org.apache.log4j.ConsoleAppender

    log4j.appender.Console.layout=org.apache.log4j.PatternLayout

    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

    log4j.logger.java.sql.ResultSet=INFO

    log4j.logger.org.apache=INFO

    log4j.logger.java.sql.Connection=DEBUG

    log4j.logger.java.sql.Statement=DEBUG

    log4j.logger.java.sql.PreparedStatement=DEBUG

6. 使用spring-boot-starter-data-jpa 怎麼配置使運行時輸出SQL語句

Spring Boot充分利用了JavaConfig的配置模式以及「約定優於配置」的理念,能夠極大的簡化基於Spring MVC的Web應用和REST服務開發。 Spring 4倡導微服務的架構,針對這一理念,近來在微博上也有一些有價值的討論,如這里和這里。微服務架構倡導將功能拆分到離散的服務中,獨立地進行部署,Spring Boot能夠很方便地將應用打包成獨立可運行的JAR包,因此在開發模式上很契合這一理念。目前,Spring Boot依然是0.5.0的里程碑版本,因此相關的文檔尚不完善,本文將會以一個簡單的樣例來介紹基於這個項目的開發過程。 要Spring Boot進行功能開發,需要使用Gradle或者Maven作為構建工具。在本例中,我們會使用Eclipse和Maven插件進行開發。要使用Spring Boot,首先創建一個Maven工程,並修改Maven主要的配置文件pom.xml,如下所示: org.springframework.boot spring-boot-starter-parent 0.5.0.M7 org.springframework.boot spring-boot-sta...

7. 使用spring-boot-starter-data-jpa 怎麼配置使運行時輸出SQL語句

如下:
創建可以獨立運行的 Spring 應用。
直接嵌入 Tomcat 或 Jetty 伺服器,不需要部署 WAR 文件。
提供推薦的基礎 POM 文件來簡化 Apache Maven 配置。
盡可能的根據項目依賴來自動配置 Spring 框架。
提供可以直接在生產環境中使用的功能,如性能指標、應用信息和應用健康檢查。
沒有代碼生成,也沒有 XML 配置文件。

8. springboot mybatis 整合後怎麼答應輸出sql語句

  1. 需要配置log4j;

2. 在log4j.properties文件里增加以下配置;

12345678log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

log4j.logger.java.sql.ResultSet=INFO

log4j.logger.org.apache=INFO

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

9. spring boot集成mybatis 怎樣查看執行sql

# Output pattern : date [thread] priority category - message
log4j.rootLogger=WARN, Console, RollingFile

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#RollingFile
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=../logs/fgw.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#Project defalult level
log4j.logger.dl=DUBUG
log4j.logger.org.springframework=WARN
log4j.logger.org.mybatis=DUBUG
這樣就行了。

10. springboot如何獲取sql的值

我也想知道,取到的值,如何調用,我是想驗證一下取的值里有沒有我要的值,想在SQL語句外加個 if 判斷,這個select是在函數里用的,因為沒得到相應的結果,不知道是哪兒出的問題,想用if判斷一下這個值取到沒有,如何處理,謝謝!代碼如下(---後面是個判斷,不知對否):
set HyTRs=nothing
set HyTRs=server.CreateObject("adodb.recordset")
sql = "select * from HyClub where KeyString like '" & KeyString & "%' and KeyString<>'"&KeyString&"' and IsApproved=true"
HyTRs.Open sql,conn
if HyTRs.RecordCount>0 then '如果有此number
Do While Not HyTRs.eof
ind = len(HyTRs("KeyString")) - len(KeyString)
if ind <= 5 then
user = CFANDPD(HyTRs("HyNumber"))『----調用一個函數
『------------------------
if HyNumber="CF60016811" then
response.write("---------222222--------無痕秋水"&user&"長度差"&ind)
end if
請指教,謝謝!
已經搞定,我寫的還是對的:)

樓主可以用我這個方法 HyNumber就是結果集中的,直接用欄位名就可以調用!