Java前端基础到入门——16day

前言:从 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 开发,存在诸多痛点:

  1. 硬编码严重:数据库连接四要素(驱动、链接、用户名、密码)直接写在 Java 代码中,修改需改动源码,维护成本高。
  2. 结果封装繁琐:查询结果需手动解析 ResultSet,逐行封装为实体类,代码冗余且易出错。
  3. 资源浪费严重:每次操作都需创建、销毁数据库连接,频繁的资源创建与销毁消耗系统性能。

Mybatis 的核心优势,解决开发痛点

Mybatis 作为 JDBC 的封装框架,完美解决了上述问题,核心优势如下:

  1. 配置化管理:数据库连接四要素统一配置在 application.properties 文件中,修改无需改动业务代码。
  2. 自动结果映射:查询结果自动封装为实体类,无需手动解析 ResultSet,简化开发流程。
  3. 连接池复用:内置数据库连接池,实现连接对象的重复使用,避免频繁创建销毁,提升系统性能。

🔧 第一步:准备工作(工程+数据+实体类)

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 等进阶内容。

如果在实操过程中遇到问题,欢迎在评论区留言交流,我们一起解决!


相关推荐
abbgogo1 小时前
OSPF动态路由协议
开发语言·php
en.en..2 小时前
C 语言嵌入式事件驱动状态机完整教程(枚举配套)
c语言·开发语言
Tim_102 小时前
【C++】024、new[]与delete[]配对使用
java·开发语言
阿黎梨梨2 小时前
React 表单处理与性能优化:从入门到进阶
前端·react.js
Whbbit19992 小时前
发布自己的 shadcn-vue 扩展组件,并支持 CLI 安装
前端·开源
Yyyyyy~2 小时前
[C语言]break和continue作业
c语言·开发语言
Tian_Hang2 小时前
Vue3 父子组件通讯
前端·javascript·vue.js
breeze jiang2 小时前
React memo、useCallback 与 useMemo:父组件多状态时如何减少无效渲染
前端·javascript·react.js
此生决int2 小时前
深入理解C++系列(10)——lsit
开发语言·c++