MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。它使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。本指南将带领你从 MyBatis 的基础知识开始,逐步深入到进阶应用。
第一节:MyBatis 简介
1.1 什么是 MyBatis?
MyBatis 是一个半自动化的持久层框架,它使用 XML 或注解来配置和原始映射,将接口和 Java 的 POJOs 映射成数据库中的记录。与全自动化的 ORM 框架如 Hibernate 不同,MyBatis 允许你更细粒度地控制 SQL 映射。
1.2 MyBatis 的优势
- 简洁易用:通过 XML 或注解配置 SQL 映射,减少 JDBC 代码量。
- 灵活的映射:支持一对一、一对多、多对多等复杂关系的映射。
- 扩展性强:可以自定义 SQL 映射,实现复杂查询。
- 支持多种数据库:可以与任何 JDBC 支持的数据库一起使用。
第二节:MyBatis 安装与配置
2.1 安装
首先,你需要添加 MyBatis 的依赖到你的项目中。如果你使用 Maven,可以在 pom.xml 文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- 数据库驱动依赖,例如:MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
</dependencies>
2.2 配置
接下来,你需要配置 MyBatis 的核心文件 mybatis-config.xml。这个文件包含了 MyBatis 的配置信息,例如数据源、事务管理器、映射器等。
<?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/your_database"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/yourpackage/mapper/YourMapper.xml"/>
</mappers>
</configuration>
第三节:MyBatis 映射器
3.1 映射器配置
映射器配置文件(如 YourMapper.xml)定义了 SQL 映射以及接口方法的映射。以下是一个简单的映射器配置示例:
<?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.yourpackage.mapper.YourMapper">
<select id="selectById" resultType="com.yourpackage.model.YourModel">
SELECT * FROM your_table WHERE id = #{id}
</select>
</mapper>
3.2 接口定义
在 Java 中,你需要定义一个接口来对应映射器:
package com.yourpackage.mapper;
public interface YourMapper {
YourModel selectById(Integer id);
}
第四节:MyBatis 实战应用
4.1 环境搭建
首先,确保你的开发环境已经搭建好,包括 JDK、数据库和 IDE(如 IntelliJ IDEA 或 Eclipse)。
4.2 创建实体类
创建一个实体类来映射数据库中的表:
package com.yourpackage.model;
public class YourModel {
private Integer id;
private String name;
// getter 和 setter
}
4.3 编写 SQL 映射
根据需要编写 SQL 映射文件,如上述示例。
4.4 编写 MyBatis 配置
确保你的 mybatis-config.xml 文件配置正确。
4.5 编写接口
创建一个接口来对应映射器,如上述示例。
4.6 使用 MyBatis
在你的 Java 应用中,使用 MyBatis 提供的 SqlSessionFactory 和 SqlSession 来执行 SQL 映射:
public class Application {
public static void main(String[] args) {
try {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build("mybatis-config.xml");
SqlSession sqlSession = sqlSessionFactory.openSession();
YourMapper mapper = sqlSession.getMapper(YourMapper.class);
YourModel model = mapper.selectById(1);
System.out.println(model.getName());
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第五节:MyBatis 进阶
5.1 缓存机制
MyBatis 提供了两种类型的缓存:一级缓存和二级缓存。
- 一级缓存:与 SQL 会话绑定,当会话结束时缓存会自动失效。
- 二级缓存:与 SQL 会话无关,在多个会话之间共享。
5.2 批处理
MyBatis 支持批处理,可以在一次 SQL 会话中执行多个操作。
try {
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
YourMapper mapper = sqlSession.getMapper(YourMapper.class);
for (int i = 0; i < 100; i++) {
mapper.insertYourModel(new YourModel());
}
sqlSession.commit();
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
5.3 动态 SQL
MyBatis 提供了动态 SQL 功能,可以根据条件动态地构建 SQL 语句。
<select id="selectByCondition" resultType="com.yourpackage.model.YourModel">
SELECT * FROM your_table
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
通过以上章节,你应当已经对 MyBatis 有了一个全面的了解,从基础的安装配置到进阶的应用技巧。MyBatis 是一个非常强大的工具,它可以帮助你更高效地开发 Java 应用程序。继续学习和实践,你将能够更好地利用 MyBatis 的全部潜力。
