当前位置:首页 » 编程语言 » hibernatesql日志
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

hibernatesql日志

发布时间: 2022-04-02 11:25:29

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