MyBatis 是一款优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,简单的 Java 对象)映射成数据库中的记录。
一、MyBatis 简介
1.1 MyBatis 的优势
- 半自动化:MyBatis 需要编写 SQL 语句,但不需要编写 JDBC 代码,减少了代码量。
- 灵活:MyBatis 允许使用动态 SQL,如
if、choose、when、otherwise等标签,实现复杂查询。 - 易于扩展:MyBatis 提供了插件机制,可以扩展其功能。
- 支持自定义:MyBatis 允许自定义结果映射、分页插件等。
1.2 MyBatis 的适用场景
- 单表查询:适合单表查询操作,可以简化 SQL 编写。
- 多表关联查询:通过动态 SQL 实现复杂的多表查询。
- 分页查询:使用分页插件实现分页查询。
二、MyBatis 基础
2.1 MyBatis 的核心组件
- SqlSessionFactory:用于创建 SqlSession。
- SqlSession:用于执行 SQL 语句,管理事务等。
- Executor:负责执行 SQL 语句。
- Mapper:接口,用于定义 SQL 语句。
- MappedStatement:存储 Mapper 中 SQL 语句和相关元数据。
2.2 MyBatis 配置
- XML 配置:使用 XML 文件配置 SQL 语句、映射关系等。
- 注解配置:使用注解替代 XML 配置,简化配置。
2.3 MyBatis 结果映射
- 一对一:通过 association 标签实现。
- 一对多:通过 collection 标签实现。
- 多对多:通过多个关联实现。
三、MyBatis 实战
3.1 创建 MyBatis 项目
- 创建 Maven 项目。
- 添加 MyBatis 相关依赖。
- 创建配置文件
mybatis-config.xml。
3.2 编写 Mapper 接口
public interface UserMapper {
List<User> selectAll();
User selectById(Integer id);
}
3.3 编写 Mapper 映射文件
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectAll" resultType="com.example.entity.User">
SELECT * FROM user
</select>
<select id="selectById" parameterType="int" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
3.4 使用 MyBatis
public class Main {
public static void main(String[] args) {
try {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
四、MyBatis 高级特性
4.1 动态 SQL
<select id="selectByCondition" parameterType="User" resultType="User">
SELECT * FROM user
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
</where>
</select>
4.2 缓存
MyBatis 提供了两种缓存机制:
- 一级缓存:SqlSession 缓存。
- 二级缓存:Mapper 级缓存。
4.3 分页插件
使用分页插件,可以简化分页查询的编写。
五、总结
MyBatis 是一款优秀的持久层框架,通过本文的介绍,相信你已经对 MyBatis 有了一定的了解。在实际开发中,MyBatis 可以帮助我们简化数据库操作,提高开发效率。希望本文能帮助你更好地学习和使用 MyBatis。
