1、概览 MyBatis 是一个开源 Java 持久层框架,可作为 JDBC 和 Hibernate 的替代品。它能简化持久层的代码,并自动封装结果集,开发者只需专注于编写自定义 SQL 查询或存储过程。
本文将带你了解如何在 Spring 中使用 MyBatis 插入(INSERT)数据时返回自动生成的 ID。
2、依赖设置 首先在 pom.xml 中添加 mybatis-spring-boot-starter 依赖:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> 3、示例 先创建一个简单的示例,在整个文章中都会用到。
3.1、定义实体 首先,创建一个代表汽车的简单实体类 Car:
public class Car { private Long id; private String model; // Getter / Setter 方法省略 } 其次,定义一条创建表的 SQL 语句,并将其放入 car-schema.sql 文件中:
CREATE TABLE IF NOT EXISTS CAR ( ID INTEGER PRIMARY KEY AUTO_INCREMENT, MODEL VARCHAR(100) NOT NULL ); 如上,ID 列是自增自主键(AUTO_INCREMENT)。
1、概览 MyBatis 是 Java 界流行的持久化框架,它通过将 SQL 查询映射到 Java 方法来简化数据库操作。
在使用 MyBatis 开发应用时,查看正在执行的 SQL 查询通常对调试很有用,本文将带你了解如何在 MyBatis 中将 SQL 查询日志输出到控制台。
2、支持的日志实现 MyBatis 是一个灵活的框架,可以与各种日志框架集成,包括 SLF4J、Apache Commons Logging、Log4j 2 和 JDK Logging。本文主要关注 Stdout (标准输出,即控制台)日志和 SLF4J。
Stdout 日志在本地功能开发过程中非常有用,它提供了一种简单的调试方法。而 SLF4J 更适合生产应用,它提供了更高级的抽象,可与其他的日志框架无缝集成。
3、在 MyBatis 中配置 Stdout 日志 使用 stdout 记录 MyBatis SQL,可以直接在控制台上查看执行的 SQL 语句。这种方法在开发和调试过程中非常方便。
要启用 MyBatis SQL 的 stdout 日志,需要在应用的 mybatis-config 文件中添加日志设置:
<configuration> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> </configuration> 将 logImpl 属性配置为 STDOUT_LOGGING 后,MyBatis 将在执行 SQL 查询时输出原始 SQL 语句、查询参数和查询结果。输出通常包括执行的 SQL、绑定的参数和返回的结果集等详细信息:
MyBatis 是一个流行的 Java 持久层框架,它简化了与关系型数据库的交互。通过将 SQL 语句与 Java 代码进行映射,MyBatis 提供了一种方便、灵活的方式来执行数据库操作。它支持动态SQL、缓存机制和插件扩展,使得开发人员能够更高效地编写和管理数据库访问代码。作为一种轻量级框架,MyBatis 在 Java 开发中被广泛应用于构建可靠的持久化解决方案。
本文将会指导你如何在 Spring Boot 中整合 MyBatis。
框架版本:
Spring Boot:3.1.3 MyBatis:3.5.13 创建 Spring Boot 项目 通过 start.springboot.io 创建工程(你可以直接点击 这个链接 快速创建)。
选择 MySQL Driver、Spring Web、MyBatis Framework 基本依赖,点击 “GENERATE” 下载到本地后,导入到IDEA中。
本文将在示例中使用 MySQL 数据库,如果你使用其他类型的数据库,需要把 MySQL Driver 替换为对应的依赖。
配置项目 定义 mapper 接口 创建专门存放 mapper 接口的包: cn.springdoc.mapper,并在其中定义一个 FooMapper,如下:
package cn.springdoc.mapper; import java.time.LocalDateTime; import org.apache.ibatis.annotations.Mapper; @Mapper // 使用 Mapper 注解 public interface FooMapper { /** * 获取数据库的当前时间 * @return */ LocalDateTime now(); } 该 Mapper 简单定义了一个 now 用于从数据库获取到当前时间。