1. 怎麼樣配置log4j 才能將hibernate在控制台輸出sql語句
因為hibernate在輸出sql時使用的logger名為org.hibernate.SQL,所以想讓SQL語句輸出到log4j,只要在log4j.properties或log4j.xml的配置中加上如下語句:
log4j.logger.org.hibernate.SQL=DEBUG
記得同時把hibernate中配置文件hibernate.show_sql設置為false,避免同時在控制台和log日誌中雙份輸出sql語句。
2. hibernate 的sql語句老是要增加transaction日誌 有沒有簡單的方法
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
Hibernate的核心介面一共有5個,分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個核心介面在任何開發中都會用到。通過這些介面,不僅可以對持久化對象進行存取,還能夠進行事務控制。下面對這五的核心介面分別加以介紹。
·Session介面:Session介面負責執行被持久化對象的CRUD操作(CRUD的任務是完成與資料庫的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對象是非線程安全的。同時,Hibernate的session不同於JSP應用中的HttpSession。這里當使用session這個術語時,其實指的是Hibernate中的session,而以後會將HttpSesion對象稱為用戶session。
·SessionFactory介面:SessionFactroy介面負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。這里用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個資料庫時,可以為每個資料庫指定一個SessionFactory。
·Configuration介面:Configuration介面負責配置並啟動Hibernate,創建SessionFactory對象。在Hibernate的啟動的過程中,Configuration類的實例首先定位映射文檔位置、讀取配置,然後創建SessionFactory對象。
·Transaction介面:Transaction介面負責事務相關的操作。它是可選的,開發人員也可以設計編寫自己的底層事務處理代碼。
·Query和Criteria介面:Query和Criteria介面負責執行各種資料庫查詢。它可以使用HQL語言或SQL語句兩種表達方式。
Hibernate源碼中幾個包的作用簡要介紹
net.sf.hibernate.*
該包的類基本上都是介面類和異常類
net.sf.hibernate.cache.*
JCS的實現類
net.sf.hibernate.cfg.*
配置文件讀取類
net.sf.hibernate.collection.*
Hibernate集合介面實現類,例如List,Set,Bag等等,Hibernate之所以要自行編寫集合介面實現類是為了支持lazy loading
net.sf.hibernate.connection.*
幾個資料庫連接池的Provider
net.sf.hibernate.dialect.*
支持多種資料庫特性,每個Dialect實現類代表一種資料庫,描述了該資料庫支持的數據類型和其它特點,例如是否有AutoIncrement,是否有Sequence,是否有分頁sql等等
net.sf.hibernate.eg.*
Hibernate文檔中用到的例子
net.sf.hibernate.engine.*
這個包的類作用比較散
net.sf.hibernate.expression.*
HQL支持的表達式
net.sf.hibernate.hq.*
HQL實現
net.sf.hibernate.id.*
ID生成器
net.sf.hibernate.impl.*
最核心的包,一些重要介面的實現類,如果Session,SessionFactory,Query等
net.sf.hibernate.jca.*
JCA支持,把Session包裝為支持JCA的介面實現類
net.sf.hibernate.jmx.*
我不懂JMX,只知道JMX是用來編寫App Server的管理程序的,大概是JMX部分介面的實現,使得App Server可以通過JMX介面管理Hibernate
net.sf.hibernate.loader.*
也是很核心的包,主要是生成sql語句的
net.sf.hibernate.lob.*
Blob和Clob支持
net.sf.hibernate.mapping.*
hbm文件的屬性實現
net.sf.hibernate.metadata.*
PO的Meta實現
net.sf.hibernate.odmg.*
ODMG是一個ORM標准,這個包是ODMG標準的實現類
net.sf.hibernate.persister.*
核心包,實現持久對象和表之間的映射
net.sf.hibernate.proxy.*
Proxy和Lazy Loading支持
net.sf.hibernate.ps.*
該包是PreparedStatment Cache
net.sf.hibernate.sql.*
生成JDBC sql語句的包
net.sf.hibernate.test.*
測試類,你可以用junit來測試Hibernate
net.sf.hibernate.tool.hbm2ddl.*
用hbm配置文件生成DDL
net.sf.hibernate.transaction.*
Hibernate Transaction實現類
net.sf.hibernate.type.*
Hibernate中定義的持久對象的屬性的數據類型
net.sf.hibernate.util.*
一些工具類,作用比較散
net.sf.hibernate.xml.*
XML數據綁定
hibernate官方網站
以上是來自 Internet
說白了就是 數據持久層
3. hibernate如何獲取執行的sql,用於操作日誌。
hibernate可以用? 不過不是SQL 是HQL語句
具體的是 其中表名 跟欄位名都用類名和屬性名替換 還有就是你如過是用的oracle的話 可以寫一個過程來處理這些日誌。
具體的東西太多了 你去差下資料吧
4. 如何將Hibernate生成的SQL語句列印到日誌文件
1 操作
只需要在log4j.properties中加入以下兩行代碼即可
#輸出sql語句到日誌
log4j.logger.org.hibernate.SQL=debug
#將對應的參數佔位符?換成傳入的參數
log4j.logger.org.hibernate.type=trace
實驗效果:
2017-09-05 16:51:26 [DubboServerHandler-thread-1] DEBUG org.hibernate.SQL (104) -
select
cpsysparm0_.CODE as CODE65_0_,
cpsysparm0_.NAME as NAME65_0_,
cpsysparm0_.PARMVALUE as PARMVALUE65_0_,
cpsysparm0_.PARMDESC as PARMDESC65_0_,
cpsysparm0_.MODIFIABLE as MODIFIABLE65_0_,
cpsysparm0_.VIEWABLE as VIEWABLE65_0_,
cpsysparm0_.OPERUSER as OPERUSER65_0_,
cpsysparm0_.OPERTIME as OPERTIME65_0_
from
CP_SYSPARM cpsysparm0_
where
cpsysparm0_.CODE=?
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicBinder (83) - binding parameter [1] as [VARCHAR] - 012
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [當前場次 ] as column [NAME65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [1] as column [PARMVALUE65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (67) - Found [null] as column [PARMDESC65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [0] as column [MODIFIABLE65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [1] as column [VIEWABLE65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [init ] as column [OPERUSER65_0_]
2017-09-05 16:51:26 [DubboServerHandler-thread-1] TRACE org.hibernate.type.descriptor.sql.BasicExtractor (72) - Found [2011-11-23 10:06:47.0] as column [OPERTIME65_0_]
可以看到查詢的過程和結果都進行了輸出。
5. 如何設置hibernate列印sql語句
只要加上下面這個語句就可以了 Log4j.propreties代碼 #輸出sql語句到日誌 log4j.logger.org.hibernate.SQL=debug #將對應的參數佔位符?換成傳入的參數 log4j.logger.org.hibernate.type=trace
6. HIBERNATE怎樣查看sql語句
弄hibernate時,想顯示sql語句,可以設置show_sql為true來達到這個目的,但是參數值全是像PreparedStatement一樣,用?來代替的。用p6spy可以達到顯示的那些參數原值的目的,但可讀性差。可以利用SQL Profiler來處理這個事情。p6spy: http://www.p6spy.com/SQL Profile: http://www.jahia.net/jahia/page597.htmlp6spy安裝:* 將p6spy.jar放到WEB-INF/lib目錄下,將spy.properties放到WEB-INF/classes目錄下。* 修改你 原有 JDBC Driver為:com.p6spy.engine.spy.P6SpyDriver* 修改 spy.properties 中的 realdriver 值為 原有 的JDBC Driver,比如我的是:com.mysql.jdbc.Driver* 完成,運行web server。我的日誌記錄產生在 %TOMCAT_HOME%\bin下,此log位置可以能過修改 logfile = x:\x_dir\spy.log 來控制打開看看,看裡面的日誌是不是看起來比較不爽?下面我們安裝SQL Profiler來讓自已的視線爽一點。SQL Profiler安裝:(須p6spy成功安裝)* 將SQL Profiler自帶的spy.properties覆蓋原來的classes目錄下文件* 修改現在spy.properties中realdriver 值為 原有 的JDBC Driver看後看看readme注意這幾句 ^__^ :1. Start the GUI2. Start the webapp, in starts doing some JDBC requests we will ignore3. Press the "reset" button on the GUI4. Make a request to the webapp5. Press the "pause" button after the request has finished executing6. Press the "report" button to save profiling results as a CSV file* 我們先用java -jar sqlprofiler.jar 運行 sql profiler* 然後啟動web server :-)一切盡在眼前了吧?
7. 用hibernate查詢sql資料庫並輸出
你這只是一個實體類 無從下手的 你可以定義一個實體對象 完了賦值userid=3 再通過hibernate的get方法 +你這個有值的對象做參數去獲得這個資料庫記錄
也可以通過excuteSQL(SQL語句去執行)
8. HIbernate 顯示sql語句
用這個setParamertment(1,「」)方法,給「?」傳參數
「1」代表第一參數,第二個要傳的值,
如果要傳的是整型可以用setInt(,)
字元串類型 可以用setString
這幾個方法都是PreparedStatement類的具體的你可以訪問
http://ke..com/view/890310.html?wtp=tt