MyBatis基础教程:Java持久层框架入门

卓越的月亮
2025-06-22 15:14
阅读 615

开篇:MyBatis是什么?我们为什么要用它?

开篇:MyBatis是什么?我们为什么要用它?

在Java开发中,我们常常需要和数据库打交道。比如写一个网站的注册系统,用户输入的信息就需要保存到数据库里。但是原生的JDBC操作非常繁琐,代码量大、重复性高。

这个时候,我们就需要用到MyBatis这个工具 —— 它是一个轻量级的 持久层框架(Persistence Framework)。简单来说,它可以帮助我们在Java程序和数据库之间建立桥梁,让我们更轻松地操作数据库。

✅ 持久层是什么?
程序运行时数据存在内存中,断电就没有了。而“持久层”就是负责把数据长期保存到硬盘或数据库中的那一层。


环境准备:搭建你的第一个MyBatis环境

环境准备:搭建你的第一个MyBatis环境

1. 所需工具清单:

  • Java 开发环境(推荐JDK 1.8以上)
  • Maven(项目构建工具)
  • IntelliJ IDEA 或 Eclipse(IDE)
  • MySQL(或其他支持的数据库)

2. 创建Maven项目

使用IDE创建一个Maven项目,或者在命令行执行:

mvn archetype:generate -DgroupId=com.example -DartifactId=mybatis-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

3. 添加MyBatis依赖

打开 pom.xml 文件,在 <dependencies> 部分加入以下内容:

<!-- MyBatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

<!-- MySQL驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

然后执行 mvn install 下载依赖。


核心概念:什么是SQL映射文件、Mapper接口?

核心概念:什么是SQL映射文件、Mapper接口?

理解下面几个核心概念,是学会MyBatis的关键:

1. Mapper XML 文件(SQL 映射文件)

这是一个 .xml 文件,里面专门写我们与数据库交互的 SQL 语句。

举个例子:

<!-- src/main/resources/UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="findUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

2. Mapper 接口(Java接口)

这是Java中定义方法的地方,每个方法对应一条SQL语句。

public interface UserMapper {
    User findUserById(int id);
}

MyBatis会自动将这个接口的方法与XML中的SQL语句绑定。

3. Configuration 配置文件(全局配置)

我们需要告诉MyBatis数据库怎么连接,例如账号、密码、驱动等信息。

<!-- src/main/resources/mybatis-config.xml -->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test_db?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

实战项目:做一个简单的查询用户功能

现在我们来一起做个小项目:从数据库中查找一个用户的信息。

步骤一:创建数据库和表

在MySQL中执行下面的SQL:

CREATE DATABASE test_db;
USE test_db;

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(50)
);

INSERT INTO user (name, email) VALUES ('张三', 'zhangsan@example.com');

步骤二:编写实体类 User.java

public class User {
    private int id;
    private String name;
    private String email;

    // getters and setters...
}

步骤三:编写 UserMapper 接口

public interface UserMapper {
    User findUserById(int id);
}

步骤四:编写 UserMapper.xml 文件

<mapper namespace="com.example.mapper.UserMapper">
    <select id="findUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

步骤五:测试主函数入口

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class App {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = mapper.findUserById(1);
            System.out.println(user.getName());
        }
    }
}

如果一切正常,控制台会输出:张三 ✅


常见问题解答

Q1:找不到Mapper接口怎么办?

确保你在配置文件中正确引入了对应的XML文件:

<mappers>
    <mapper resource="UserMapper.xml"/>
</mappers>

同时确认命名空间(namespace)和接口的全限定名一致。

Q2:报错提示字段名不匹配?

可能是数据库字段名和Java类属性名不同。可以在SQL中使用别名:

<select id="findUserById" resultType="com.example.model.User">
    SELECT id as id, name as name, email as email FROM user WHERE id = #{id}
</select>

Q3:连接不上数据库怎么办?

检查一下:

  • 数据库是否启动?
  • 用户名、密码是否正确?
  • URL格式有没有错误?

学习建议:下一步该怎么学?

服务器部署方案-1

学会了基本的查询之后,你可以继续学习以下内容:

内容 说明
插入、更新、删除操作 编写 insert/update/delete 语句
动态SQL 使用 <if><foreach> 等实现条件拼接SQL
注解方式 不用XML也能写SQL,适合简单项目
多表关联查询 查询两个表之间的数据
事务管理 控制数据库操作的一致性

📚 推荐资料:

  • MyBatis官方文档
  • B站视频《尚硅谷MyBatis教程》
  • 书籍:《MyBatis从入门到精通》

希望这篇教程能帮助你迈出学习 MyBatis 的第一步!如果你遇到了任何问题,欢迎留言交流。祝你编码愉快 😊

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝