配置 mybatis 打印出执行的 sql 及返回的结果集

这篇具有很好参考价值的文章主要介绍了配置 mybatis 打印出执行的 sql 及返回的结果集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在开发过程中, 经常会遇到想要看到应用所执行的 sql 这样的需求.

比如你写了一个查询的功能, 但查询出来的结果与你预期的不符合, 你想搞清楚到底哪里出了问题, 你自然需要看看所执行的 sql 语句, 必要的话甚至还要亲自拷贝到数据库里去查查.

自然, 这就要求应用要能把执行的 sql 输出出来. 以常用的 mybatis 框架为例, 来看一个最终的效果:

14:48 ==>  Preparing: select * from user where id = ? 
14:48 ==> Parameters: 1(Integer)
14:48 <==      Total: 1

另注: 这里的日志布局我启用了一种极简的风格, 只有"分钟:秒数", 具体见 配置简化开发阶段日志输出布局 的介绍.

那么, 在 mybatis 里, 这个要怎么做到呢?

配置 sql 输出

具体来说, 是要增加一个日志级别的配置, 将 dao(或 mapper) 包级别调整到 DEBUG.

示例:

# log sql statement
logging.level.net.xiaogd.sample.mybatis.dao=DEBUG

注: 上述配置建议放在你的本地开发环境配置文件中, 通常为 application-dev.properties, 关于 spring-boot 的 分环境配置profile 机制, 如不熟悉请自行查阅网络了解.

对应工程代码包结构如下:

mybatis配置打印查询结果,日志,开发技巧,mybatis,sql,数据库,日志

注: 我的代码结构下, mybatis 相关的类放到了 dao 这个包下, 你的如果不是这样, 可以根据自己的情况加以调整.

在上述配置下, 执行以下测试:

package net.xiaogd.sample.mybatis.dao.user;

import lombok.extern.slf4j.Slf4j;
import net.xiaogd.sample.mybatis.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@Slf4j
@RunWith(SpringRunner.class)
@MybatisTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class SimpleTest {

	@Autowired
	private UserDao userDao;

    @Test
    public void testGetUserById() {
        User user = userDao.findUserById(1);
        log.info("user find id: {}", user.getId());
    }
}

相应的 dao 接口:

package net.xiaogd.sample.mybatis.dao.user;

import net.xiaogd.sample.mybatis.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserDao {

	@Select("select * from user where id = #{id}")
	User findUserById(int id);
}

相应的 sql 语句, 参数值及查询的总数都会打印出来:

14:48 ==>  Preparing: select * from user where id = ? 
14:48 ==> Parameters: 1(Integer)
14:48 <==      Total: 1

输出结果集

如果想进一步输出结果集, 则可以进一步把日志级别提升到 TRACE. 如下:

# log sql statement and result set
logging.level.net.xiaogd.sample.mybatis.dao=TRACE

警告: 可能导致大量的日志输出, 非必要情况下不要启用, 且仅可以在本地开发环境调试情况下启用!

对于下述的数据表:

mybatis配置打印查询结果,日志,开发技巧,mybatis,sql,数据库,日志

最终的输出如下:

17:36 ==>  Preparing: select * from user 
17:36 ==> Parameters: 
17:36 <==    Columns: id, username, password, nick_name
17:36 <==        Row: 1, admin, 123456, 管理员
17:36 <==        Row: 2, root, root, 根用户
17:36 <==      Total: 2

可以看到字段及每行的值都被打印出来了.

遗留问题

当然了, 上述在输出 sql 语句时还有一个问题, 就是在有参数的情况下, 这个还不是最终的 sql, 而是类似于 jdbc 中的那种 prepare statement:

select * from user where id = ? 

可以看到参数的值是用一个问号占位符代替的, 真正的参数值输出到了另一行.

如果要真的拷贝到数据库查看工具里执行, 比如 navicat 或者 mysql workbench 抑或是最简单的 mysql console 中, 我们还是得自行替换及拼凑最终的 sql.

虽然多数情况下这也不是特别麻烦, 但在特别多参数的情况下, 如果你发现执行结果不对, 用眼睛看输出的参数值似乎也没有问题, 自行去拼凑就有点麻烦了, 能否直接输出最终的 sql 呢? 也是有方式的, 我们将在下一篇再介绍这种方式.

参考文档

更多打印 sql 日志相关的配置, 请参考其官网: https://mybatis.org/mybatis-3/logging.html文章来源地址https://www.toymoban.com/news/detail-723081.html

到了这里,关于配置 mybatis 打印出执行的 sql 及返回的结果集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot打印系统执行的sql语句以及日志的配置

    直接在application.yml/properties文件中进行配置 引入依赖: Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具: slf4j Apache Commons Logging Log4j 2 Log4j JDK logging 具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)

    2024年02月07日
    浏览(37)
  • mybatis plus 控制台和日志文件中打印sql配置

    配置mybatis-plus的日志实现类为StdOutImpl,该实现类中打印日志是通过 System.out.println(s) 的方式来打印日志的 日志文件中输入sql需要配置mybatis-plus的日志类为项目中的日志框架实现类,还需要配置mapper接口所在包的日志打印级别为 DEBUG或者TRACE,mybatis提供了log4j、slf4g等实现 经测

    2024年02月11日
    浏览(67)
  • Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

    MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。想查看官网相关内容的化我这里提供了官网地址:https://baomidou.com/ 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般

    2024年02月04日
    浏览(68)
  • mybatis查询多个结果返回map--@MapKey使用方法

    目录         介绍  源码分析: 在使用mybatis的时候遇到一种情况,查询结果集返回多个,想用map接收,以前是用List对象接收,然后java代码中转换成map。其实mybatis是支持返回map的。下面就介绍使用方法。 测试代码: 下面@MapKey中的id是BusinessPricePO中的一个属性id,否则会报错

    2024年02月12日
    浏览(36)
  • 鸿蒙开发,使用http返回的响应数据无法正常获取 ,利用hilog打印日志一直结果是object或者代码凭空消失,根本没有打印日志(灵异事件???)

    这里简述项目相关背景:前后端分离项目,使用鸿蒙做前端,后端SpringBoot写好接口(通过商品分类id查询商品列表),鸿蒙前端页面使用Tabs组件导航,展示商品分类,点击分类标签,查询后端接口,返回对应分类商品列表数据 项目场景:鸿蒙开发,使用http返回的响应数据无

    2024年04月27日
    浏览(41)
  • mybatis打印sql日志

    我们日常操作数据库的过程一般都是使用mybatis中执行sql操作,有时候为了确认mybatis拼接的sql是否正确,就需要在日志中打印出具体的sql语句,对应的入参以及数据库的返回值 一.sql日志输出到控制台,修改mybatis-config文件,指定如下配置: 二.sql日志输出到文件,修改mybatis

    2024年02月15日
    浏览(46)
  • Mybatis设置sql打印日志

    第一种:使用 mybatis 自带的打印 第二种:使用 log4j 日志打印 备注:log4j 运行级别调到DEBUG,可以在控制台打印出mybatis运行的sql语句。 #将等级为DEBUG的日悲信虑出到console和file这网个日的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置

    2024年02月06日
    浏览(53)
  • MyBatis动态SQL、模糊查询与结果映射

    目录 前言 一、MyBatis动态SQL 1.动态SQL是什么 2.动态SQL的作用 3.常用动态SQL元素 1. where + if 元素 2. set + if 元素 3. choose + when + otherwise 元素 4. 自定义 trim 元素  1. 自定义 trim 元素改写上面的 where + if 语句 2. 自定义 trim 元素改写上面的 set + if 语句 5. foreach 元素 6.SQL片段重用 二、

    2024年02月11日
    浏览(37)
  • Mybatis-Plus 打印sql日志

    先说一下springboot 和mybatis-plus版本 再给一份logback.xml文件配置 配置打印日志的两种方式 控制台打印,很简单,在application.yml配置 日志文件打印,在application.yml配置 还需要再logback.xml中将mapper 包的logger日志级别设置为debug,看上方 有用的话,帮忙点赞,谢谢,如果因为版本问

    2024年02月15日
    浏览(53)
  • 【LogBack日志】打印mybatis中sql日志并存放到指定文件中

    在springboot中使用logbac-spring.xml单独打印mybaits中的sql,另存一个单独的日志中。 几个关键点 a. 文件名需要为​​logback-spring.xml​​; 动态日志路径才会生效; 属性文件中配置 ​​log.path=xxx​​; 【Log日志】logback.xml动态配置属性值(包括接入的第三方配置) b. levle 需要是DEBUG等级

    2023年04月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包