MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis 简介
MyBatis 允许你将 SQL 语句映射到 Java 接口的调用方法上,这样你就可以在 Java 代码中直接调用 SQL 语句,而不需要编写复杂的 JDBC 代码。MyBatis 的核心是 SQL 映射文件,它定义了 SQL 语句和 Java 对象之间的映射关系。
入门
1. 环境搭建
首先,你需要搭建一个 Java 开发环境,包括 JDK、IDE(如 IntelliJ IDEA 或 Eclipse)和 Maven。
2. 添加依赖
在 Maven 的 pom.xml 文件中添加 MyBatis 的依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
3. 配置文件
创建一个 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_db?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
4. 编写 Mapper 接口
创建一个 UserMapper.java 接口,定义 SQL 语句的映射方法:
package com.example.mapper;
public interface UserMapper {
List<User> selectAll();
}
5. 编写 Mapper 映射文件
创建一个 UserMapper.xml 文件,定义 SQL 语句和 Java 对象的映射关系:
<?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.mapper.UserMapper">
<select id="selectAll" resultType="com.example.entity.User">
SELECT * FROM user
</select>
</mapper>
6. 测试
编写一个测试类,调用 Mapper 接口的方法:
package com.example.mapper;
import com.example.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.util.List;
public class UserMapperTest {
public static void main(String[] args) {
try (SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build("mybatis-config.xml")) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();
for (User user : users) {
System.out.println(user);
}
}
}
}
}
核心技巧
1. 映射文件
- 使用
<select>、<insert>、<update>、<delete>标签定义 SQL 语句。 - 使用
<resultMap>标签定义 Java 对象和数据库表之间的映射关系。 - 使用
<parameterMap>标签定义参数映射。
2. 动态 SQL
- 使用
<if>、<choose>、<when>、<otherwise>标签实现动态 SQL。 - 使用
<foreach>标签实现集合类型的参数处理。
3. 缓存
- MyBatis 提供了两种缓存机制:一级缓存和二级缓存。
- 一级缓存是 SQL 会话级别的缓存,二级缓存是 Mapper 级别的缓存。
4. 插件
- MyBatis 提供了插件机制,可以自定义插件来扩展 MyBatis 的功能。
最佳实践
- 使用注解替代 XML 配置。
- 使用 ResultMap 映射复杂的 SQL 结果集。
- 使用动态 SQL 实现灵活的查询。
- 使用缓存提高性能。
- 使用插件扩展功能。
总结
MyBatis 是一个功能强大的持久层框架,可以帮助你简化数据库操作。通过本文的介绍,相信你已经对 MyBatis 有了一定的了解。在实际开发中,你需要不断学习和实践,掌握 MyBatis 的核心技巧和最佳实践,才能更好地发挥其优势。
