mybatis查看执行的sql语句

MyBatis SQL日志输出
本文介绍如何在MyBatis中轻松开启SQL语句的日志输出,通过简单配置即可在控制台查看执行的SQL语句及参数,适用于开发调试阶段。

mybatis在开发期间需要查看当前mybatis执行的sql语句,有很多种办法,例如使用log4j等方式,最简单的做法是利用mybatis自带功能设置

  <setting name="logImpl" value="STDOUT_LOGGING" />

这样一句话,就可以在执行的时候看到执行的sql语句以及参数情况了
具体做法:在mybatis配置文件中:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <settings>
        <!-- 打印查询语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
	<typeAliases>
		<package name="com.hehe.gogo.pojo"/>
	</typeAliases>
</configuration>
### MyBatis 执行 SQL 语句的工作机制及流程 MyBatis 是一个优秀的持久层框架,它通过动态代理和反射机制将 SQL 映射到 Java 对象中。以下是 MyBatis 执行 SQL 语句的工作机制及详细流程[^1]。 #### 1. 配置解析 在 MyBatis 启动时,会加载 `mybatis-config.xml` 文件以及 Mapper XML 文件。这些文件定义了数据库连接信息、SQL 映射规则等。MyBatis 会将这些配置解析为内存中的对象结构,例如 `Configuration` 和 `MappedStatement`[^2]。 ```java SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); ``` #### 2. 创建 SqlSession 用户通过 `SqlSessionFactory` 创建 `SqlSession` 对象。`SqlSession` 是 MyBatis 的核心接口,提供了执行 SQL、管理事务等功能。每次操作数据库都需要通过 `SqlSession` 实现[^3]。 ```java try (SqlSession session = factory.openSession()) { // 使用 SqlSession 进行数据库操作 } ``` #### 3. 动态代理生成 Mapper 接口实现 当调用 Mapper 接口方法时,MyBatis 会通过动态代理技术生成该接口的实现类。代理对象会在方法调用时拦截请求,并将其转换为对应的 SQL 执行逻辑[^4]。 ```java UserMapper mapper = session.getMapper(UserMapper.class); ``` #### 4. 构建 SQL 语句 根据 Mapper XML 文件或注解定义的 SQL 模板,MyBatis 会解析并生成最终的 SQL 语句。如果使用了动态 SQL(如 `<if>` 标签),则会根据参数值进行条件拼接[^5]。 ```xml <select id="selectUser" parameterType="int" resultType="User"> SELECT * FROM users WHERE id = #{userId} </select> ``` #### 5. 参数处理 MyBatis 会将传入的方法参数(如 `Integer` 或 `Map`)映射为 SQL 中的占位符值。例如,`#{userId}` 会被替换为实际的参数值[^6]。 #### 6. 执行 SQL 通过 JDBC,MyBatis 将生成的 SQL 语句发送到数据库执行。在此过程中,MyBatis 会管理数据库连接、预编译 SQL 语句(PreparedStatement)、设置参数等操作[^7]。 ```java PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, userId); ResultSet rs = ps.executeQuery(); ``` #### 7. 结果集映射 执行SQL 后,MyBatis 会将结果集(`ResultSet`)映射为 Java 对象。这一步依赖于 Mapper XML 文件中的 `resultMap` 定义或注解中的返回类型声明[^8]。 ```xml <resultMap id="userResultMap" type="User"> <id property="id" column="user_id"/> <result property="username" column="user_name"/> </resultMap> ``` #### 8. 返回结果 最后,MyBatis 将映射后的 Java 对象返回给调用方。整个过程对开发者透明,只需关注业务逻辑即可[^9]。 ```java User user = mapper.selectUserById(1); ``` ### 总结 MyBatis 的工作机制涵盖了配置解析、动态代理生成、SQL 构建、参数处理、SQL 执行以及结果集映射等多个环节。每个步骤都经过精心设计,以确保灵活性和高性能[^10]。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值