MyBatis基础入门教程
2025/9/17大约 5 分钟
MyBatis基础入门教程
前置知识
在开始本教程之前,建议您具备以下基础知识:
- Java 基础语法
- Maven 构建工具
- MySQL 数据库基础
- JDBC 基础概念
什么是 MyBatis?
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 历史
- MyBatis 最初是 Apache 的一个开源项目 iBatis
- 2010年6月这个项目由 Apache Software Foundation 迁移到了 Google Code
- 随着开发团队转投 Google Code 旗下,iBatis 3.x 正式更名为 MyBatis
- 代码于 2013年11月迁移到 Github
名称由来
iBatis 一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
MyBatis 特性
- 支持定制化 SQL:可以编写复杂的SQL语句
- 避免JDBC代码:不需要手动设置参数和获取结果集
- 支持XML和注解配置:可以使用简单的XML或注解进行配置
- 半自动ORM框架:比Hibernate更灵活,比JDBC更简洁
与其他持久化技术对比
技术 | 优点 | 缺点 |
---|---|---|
JDBC | 性能最好,控制最灵活 | SQL夹杂在Java代码中,耦合度高,维护困难 |
Hibernate/JPA | 操作简便,开发效率高 | 复杂SQL难以优化,全映射框架不够灵活 |
MyBatis | 轻量级,性能出色,SQL与Java分离 | 开发效率稍逊于Hibernate |
环境准备
开发环境要求
- IDE:IntelliJ IDEA 2019.2+
- 构建工具:Maven 3.5.4+
- 数据库:MySQL 5.7+
- MyBatis版本:MyBatis 3.5.7+
创建Maven项目
创建一个新的Maven项目,打包方式选择 jar
,并添加以下依赖:
<dependencies>
<!-- MyBatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
项目结构搭建
创建项目目录结构
src/main/java/com/example/mybatis/
├── bean/
│ └── User.java
├── mapper/
│ └── UserMapper.java
└── utils/
└── SqlSessionUtils.java
src/main/resources/
├── mybatis-config.xml
├── log4j.xml
└── mappers/
└── UserMapper.xml
创建用户实体类
package com.example.mybatis.bean;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
}
创建Mapper接口
package com.example.mybatis.mapper;
public interface UserMapper {
/**
* 添加用户信息
*/
int insertUser();
}
MyBatis核心配置文件
在 src/main/resources
目录下创建 mybatis-config.xml
文件:
<?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>
<!-- 设置连接数据库的环境 -->
<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/mybatis"/>
<!-- 设置连接数据库的用户名 -->
<property name="username" value="root"/>
<!-- 设置连接数据库的密码 -->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件 -->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
创建映射文件
在 src/main/resources/mappers
目录下创建 UserMapper.xml
文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.mapper.UserMapper">
<!-- int insertUser(); -->
<insert id="insertUser">
insert into t_user values(null,'张三','123',23,'女')
</insert>
</mapper>
重要说明
映射文件的命名规则:
- 表所对应的实体类的类名 + Mapper.xml
- 例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
- 一个映射文件对应一个实体类,对应一张表的操作
配置日志
在 src/main/resources
目录下创建 log4j.xml
文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<!-- 设置SQL日志级别 -->
<logger name="java.sql">
<level value="debug" />
</logger>
<!-- 设置MyBatis日志级别 -->
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
第一个MyBatis程序
创建测试类
package com.example.mybatis.test;
import com.example.mybatis.mapper.UserMapper;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class UserMapperTest {
@Test
public void testInsertUser() throws IOException {
// 读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 获取sqlSession,设置自动提交事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 调用UserMapper接口中的方法
int result = userMapper.insertUser();
System.out.println("result:" + result);
}
}
核心概念说明
核心概念详解
- SqlSession:代表Java程序和数据库之间的会话(HttpSession是Java程序和浏览器之间的会话)
- SqlSessionFactory:是"生产"SqlSession的"工厂"
- 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个"工厂类"中
事务管理
事务提交方式
- 手动提交:
SqlSession sqlSession = sqlSessionFactory.openSession();
需要手动调用sqlSession.commit()
- 自动提交:
SqlSession sqlSession = sqlSessionFactory.openSession(true);
传入true参数,自动提交事务
数据库表结构
创建测试用的数据库表:
CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE t_user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
age INT,
sex VARCHAR(10),
email VARCHAR(100)
);
总结
本教程介绍了MyBatis的基础概念和环境搭建,包括:
- ✅ MyBatis简介:框架特性和与其他技术的对比
- ✅ 环境准备:Maven依赖和项目结构
- ✅ 核心配置:mybatis-config.xml配置文件
- ✅ 映射文件:UserMapper.xml的创建和配置
- ✅ 日志配置:log4j.xml的配置
- ✅ 第一个程序:完整的测试示例
下一步学习
- 学习MyBatis的核心配置详解
- 了解MyBatis的增删改查操作
- 掌握参数传递的多种方式
在下一篇文章中,我们将深入学习MyBatis的核心配置详解,包括类型别名、环境配置、映射文件配置等高级特性。