前言:从 JDBC 到 Mybatis,开发效率的跃迁
在学习 MySQL 数据库时,我们常借助 IDEA、DataGrip 等图形化客户端工具操作数据库,编写 SQL 语句并获取执行结果。但作为后端开发人员,核心需求是用 Java 程序完成数据库操作,而 Mybatis 正是当下最主流的解决方案。
先回顾一个核心概念:持久层,即数据访问层(DAO),专门负责数据库操作,是 Java 程序与数据库交互的核心层级。
什么是 Mybatis?
Mybatis 是一款优秀的持久层框架,核心作用是简化 JDBC 开发。它的发展历程也颇具意义:本是 Apache 开源项目 iBatis,2010 年迁移至 Google Code 并更名 MyBatis,2013 年 11 月迁移至 Github,官网地址为 https://mybatis.org/mybatis-3/zh/index.html。
这里再明确两个关键概念:
- 持久层:即数据访问层(DAO),专门用于操作数据库,负责数据的增删改查等核心交互。
- 框架:是半成品软件,提供可重用、通用的基础代码模型,基于框架开发能提升效率、规范代码、增强可扩展性。
原始 JDBC 的痛点,你踩过几个?
Java 语言操作数据库的底层规范是 JDBC(Java DataBase Connectivity),它是一套操作关系型数据库的 API,由 Sun 公司定义接口,各数据库厂商提供驱动实现。但直接使用 JDBC 开发,存在诸多痛点:
- 硬编码严重:数据库连接四要素(驱动、链接、用户名、密码)直接写在 Java 代码中,修改需改动源码,维护成本高。
- 结果封装繁琐:查询结果需手动解析 ResultSet,逐行封装为实体类,代码冗余且易出错。
- 资源浪费严重:每次操作都需创建、销毁数据库连接,频繁的资源创建与销毁消耗系统性能。
Mybatis 的核心优势,解决开发痛点
Mybatis 作为 JDBC 的封装框架,完美解决了上述问题,核心优势如下:
- 配置化管理:数据库连接四要素统一配置在 application.properties 文件中,修改无需改动业务代码。
- 自动结果映射:查询结果自动封装为实体类,无需手动解析 ResultSet,简化开发流程。
- 连接池复用:内置数据库连接池,实现连接对象的重复使用,避免频繁创建销毁,提升系统性能。
🔧 第一步:准备工作(工程+数据+实体类)
1. 创建 Spring Boot 工程
创建 Spring Boot 工程,导入 Mybatis 起步依赖、MySQL 驱动包,核心依赖如下(pom.xml 片段):
xml
<dependencies>
<!-- mybatis起步依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!-- mysql驱动包依赖 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- spring单元测试 (集成了junit) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. 数据准备(表+测试数据)
创建用户表 user,并插入测试数据,SQL 语句如下:
sql
-- 用户表
create table user(
id int unsigned primary key auto_increment comment 'ID',
name varchar(100) comment '姓名',
age tinyint unsigned comment '年龄',
gender tinyint unsigned comment '性别, 1:男, 2:女',
phone varchar(11) comment '手机号'
) comment '用户表';
-- 测试数据
insert into user(id, name, age, gender, phone) VALUES (null,'白眉鹰王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛狮王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龙王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');
3. 创建实体类 User
实体类属性与数据库表字段一一对应,可通过 Lombok 简化代码(后续会介绍),基础代码如下:
java
public class User {
private Integer id; //id(主键)
private String name; //姓名
private Short age; //年龄
private Short gender; //性别
private String phone; //手机号
//省略GET, SET方法
}
⚙️ 第二步:配置 Mybatis(数据库连接信息)
在 application.properties 文件中配置数据库连接四要素,这是 Mybatis 与数据库交互的基础,配置如下:
properties
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234
第三步:编写 SQL 语句(Mapper 接口)
在引导类所在包下创建 mapper 包,新建 UserMapper 接口(持久层接口),通过注解编写 SQL 语句,代码如下:
java
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
//查询所有用户数据
@Select("select id, name, age, gender, phone from user")
public List<User> list();
}
核心注解说明:
- @Mapper:标识该接口为 Mybatis 的 Mapper 接口,程序运行时,框架会自动生成接口的代理对象,并交由 Spring IOC 容器管理。
- @Select:用于编写 select 查询语句,是 Mybatis 中编写 SQL 的常用注解之一。
第四步:单元测试(验证效果)
Spring Boot 工程中已自动生成测试类,添加 @SpringBootTest 注解,通过 @Autowired 注入 UserMapper,调用 list() 方法测试查询功能,代码如下:
java
@SpringBootTest
public class MybatisQuickstartApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testList(){
List<User> userList = userMapper.list();
for (User user : userList) {
System.out.println(user);
}
}
}
运行测试类,控制台输出结果如下,说明 Mybatis 入门程序成功运行:
text
User{id=1, name='白眉鹰王', age=55, gender=1, phone='18800000000'}
User{id=2, name='金毛狮王', age=45, gender=1, phone='18800000001'}
User{id=3, name='青翼蝠王', age=38, gender=1, phone='18800000002'}
User{id=4, name='紫衫龙王', age=42, gender=2, phone='18800000003'}
User{id=5, name='光明左使', age=37, gender=1, phone='18800000004'}
User{id=6, name='光明右使', age=48, gender=1, phone='18800000005'}
补充:SQL 提示与 Lombok 简化
1. 解决 SQL 无提示问题
默认情况下,IDEA 中 @Select 注解内的 SQL 语句无提示,可通过配置 IDEA 与 MySQL 的连接解决:打开 IDEA 右侧 Database 面板,配置 MySQL 连接,指定对应数据库(如 mybatis),配置完成后即可识别表名、字段名,实现 SQL 关键字提示。
2. Lombok 简化实体类代码
Lombok 可通过注解自动生成实体类的 getter/setter、toString 等方法,简化代码。使用步骤:
- 导入依赖(Spring Boot 父工程已集成,无需指定版本):
xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- 在实体类上添加注解:
java
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@Data //自动生成getter/setter、toString、equals、hashCode
@NoArgsConstructor //无参构造器
@AllArgsConstructor //全参构造器
public class User {
private Integer id;
private String name;
private Short age;
private Short gender;
private String phone;
}
今日总结:Mybatis 入门核心流程
今天我们完成了 Mybatis 快速入门,核心流程可总结为:准备工作(工程+数据+实体类)→ 配置数据库连接 → 编写 Mapper 接口与 SQL → 单元测试验证。通过这个流程,我们能清晰看到 Mybatis 简化 JDBC 开发的核心优势,后续我们将继续学习 Mybatis 的基础增删改查、动态 SQL 等进阶内容。
如果在实操过程中遇到问题,欢迎在评论区留言交流,我们一起解决!