MyBatis 是一款深受开发者喜爱的持久层框架,它提供了灵活的 SQL 执行以及映射机制,极大地简化了 Java 应用程序与数据库之间的交互。本笔记基于燕青的 MyBatis 视频教程,旨在深入理解并掌握 MyBatis 的核心概念与实践技巧。
一、MyBatis 概述
MyBatis 是一个轻量级的持久层框架,它避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以将 SQL 语句与 Java 代码分离,使得 SQL 能够更好地进行管理和优化。通过 XML 或注解方式配置映射文件,MyBatis 可以将简单的 SQL 查询、存储过程以及复杂查询映射到 Java 对象上。
二、MyBatis 安装与配置
在项目中引入 MyBatis 的依赖,通常是 Maven 或 Gradle 的形式。然后在 resources 目录下创建 mybatis-config.xml 文件,配置数据源、事务管理器等相关信息。此外,还需要为每个表创建对应的映射文件(Mapper XML),在其中编写 SQL 语句。
三、SqlSessionFactory 和 SqlSession
SqlSessionFactory 是 MyBatis 的核心组件,它负责创建 SqlSession 实例。SqlSession 是执行 SQL 语句的对象,通过它可以执行 CRUD 操作。通常,SqlSessionFactory 的实例在整个应用中是单例的,而 SqlSession 需要每次数据库操作后关闭。
四、Mapper 接口与 XML 映射文件
MyBatis 支持使用接口定义方法,然后在 XML 映射文件中实现这些方法的 SQL 语句。接口方法的参数类型将用于动态 SQL 的构建,返回值类型则对应 SQL 查询的结果。例如,UserMapper 接口的 getUserById 方法可以在 XML 中对应一个根据 ID 查询用户的 SQL。
五、动态 SQL
MyBatis 的动态 SQL 功能强大,可以实现条件查询、拼接 SQL 等复杂需求。例如,if、choose(when/otherwise)、where、trim、foreach 等标签可以帮助我们构建灵活的 SQL 语句,避免硬编码。
六、结果映射
MyBatis 提供了自动映射功能,可以将查询结果自动转换为 Java 对象。通过 <resultMap> 标签,我们可以自定义映射规则,处理一对一、一对多、多对多等关联关系。
七、缓存
MyBatis 内置了两级缓存:一级缓存是 SqlSession 级别的,同一个 SqlSession 中的多次相同查询会复用结果;二级缓存是全局的,可跨 SqlSession 共享数据,但需要注意并发和数据一致性问题。
八、MyBatis Plus 扩展
MyBatis Plus 是 MyBatis 的增强工具,提供了一些方便的 CRUD 操作,如自动填充主键、快速生成 CRUD 代码、条件构造器等,大大简化了开发工作。
九、MyBatis 和 Spring 集成
在实际开发中,MyBatis 往往与 Spring 框架结合使用,通过 Spring 的依赖注入来管理 SqlSessionFactory,实现事务的统一管理,提高代码的可维护性。
十、最佳实践
1. 使用 MyBatis Generator 生成基础 CRUD 代码,减少手动编写的工作。
2. 尽量避免在 Mapper XML 文件中写复杂的业务逻辑,保持 SQL 语句清晰简洁。
3. 注意 SQL 注入风险,使用 MyBatis 的预编译机制和参数绑定来防止 SQL 注入。
4. 正确管理 SqlSession 的生命周期,确保每次操作数据库后及时关闭。
以上是对 MyBatis 的基本介绍和关键知识点,通过燕青的视频教程,你将能够更深入地理解和应用这些知识,提升你的数据库操作技能。记得实践是检验真理的唯一标准,理论结合实际,才能真正掌握 MyBatis。