如何将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_]

可以看到查询的过程和结果都进行了输出。

时间: 2024-10-12 20:14:05

如何将Hibernate生成的SQL语句打印到日志文件的相关文章

Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate 如果是在配置文件的话那就是dynamic -insert 和 dynamic-update 这两个注解在一定程度上可以增加与数据库操作相关的速度,可以节省SQL语句的执行时间,提高程序的运行效率. 使用这两个注解只需要在实体类上加入即可,或者在*.hbm.xml配置.这两个注解是boolean值,true或者false. 1.首先使用false来看一下执行的结果,我们就拿更新

使用SQLQuery 在Hibernate中使用sql语句

session.createSQLQuery.转载 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar queries) 最基本的SQL查询就是获得一个标量(数值)的列表. sess.createSQLQuery("SELECT * FROM CATS").list();sess.createSQLQuery("SELECT ID,

hibernate中使用sql语句进行表链接查询,对结果集的遍历方法

今天做了一个在hibernate中使用sql语句进行表链接查询的功能,得到的属性是来自两个表中的字段.下面对结果集遍历的方法进行记录. sql语句不写了.部分代码如下: List<Course_Material> list = new ArrayList<Course_Material>(); @SuppressWarnings("rawtypes") List accountList = query.list(); if(accountList.size()&

【分享】通过Excel生成批量SQL语句,处理大量数据的好办法

我们经常会遇到这样的要求:用户给发过来一些数据,要我们直接给存放到数据库里面,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL里面用Insert into来实现,但是如果有几十条几百条甚至上千条数据的时候继续写单独的SQL语句的话那就惨了,其实有两种简单的方法: 第一,将Excel数据整理好了之后,通过SQL的导入功能直接导进数据库,但是得保证数据库字段和Excel的字段一致. 第二,通过Excel来生成对应的SQL语句,直接将SQL语句复制到分析器

使用EntityFramework6.1的DbCommandInterceptor拦截生成的SQL语句

开始 EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我们更加方便的了解到EF运行时的一些信息,当然我们最想看的还是EF生成的Sql语句,话不多讲,开始干吧; view sourceprint? 01.class EFIntercepterLogging : DbCommandInterceptor 02.{ 03.private readonly

oracle问题:新建了一个PDM文件,建表后生成的sql语句中含有clustered

问题描述 为了在oracle中新增表,在PDM中建表,使用其生成的sql语句,但是建表不能成功,提示 ORA-00906: 缺失左括号 原因是多了clustered 关键字 情景重现 1. 新建一个pdm文件 2. 建表后预览sql 是有clustered 这个关键字的 3. 建表时报错 问题解决 调查发现数据库的问题,右键数据库属性 查看DBMS 发现是 SQL SERVER ! 解决办法就是切换DBMS: 点击确定 再次查看sql语句,一切正常.问题最终解决.

Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题

在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp { [Key] public Guid No { get; set; } public int Age { get; set; } [Required] [StringLength(50)] public string Name { get; set; } } 如果我们进行分页的话,一般使用Skip和Take方法,这里一行最简单的代码如下: mContext.Emp.OrderBy(e

使用SQL语句打印直角三角形五角星阵的N种方法

相信学习编程的,大多都做过下面或者类似下面的这样一道题: 打印如下图案: ★★★★★★★★★★★★★★★ 不管使用什么高级编程语言,都能很轻松地使用二重循环完成对该图形的打印,例如想使用C#语言在控制台程序实现, 可以在程序主函数里面这样写: 1 for (int i = 1; i <= 5; i++) 2 { 3 for (int j = 1; j <= i; j++) 4 { 5 Console.Write('★'); 6 } 7 Console.WriteLine(); 8 } 9 Co

Ibatis,Mybatis利用log4j将SQL语句打印在控制台

在做一个项目Demo的时候,使用MyBatis+Spring,发现写好的SQL查询出来不对劲,但是也没报错, 所以想到用日志把SQL语句打出来.也参考了部分网友的代码,最后总结了一下,发现正常运行. 本人项目为Mybatis+SpringMVC,所有都已配置好,且正常运行. 此过程无需配置,直接在classPath目录创建log4j.properties,文件,并将下列代码粘贴进去即可,此代码部分参考网友. ### set log levels ### log4j.rootLogger = de