2026-10-19 14:17:30
MyBatis 是一种开源的持久层框架,用于简化 Java 应用程序与数据库之间的交互,通过半自动映射、XML 配置和延迟加载等功能提升开发效率与性能。
核心特点基于 XML 配置MyBatis 使用 XML 文件定义映射规则(如 mapper.xml),明确 Java 对象与数据库表的对应关系。这种配置方式直观且易于维护,适合复杂查询场景。
示例:通过 <resultMap> 标签自定义字段映射,解决数据库列名与 Java 属性名不一致的问题。
半自动映射结合自动映射与自定义映射:
自动映射:默认按列名与属性名匹配(如 user_name → userName)。
自定义映射:通过 <resultMap> 手动指定复杂映射(如一对多关系、嵌套结果)。
延迟加载仅在访问关联对象时加载数据,减少不必要的数据库查询。例如:查询订单时,默认不加载用户信息,仅在调用 getUser() 方法时触发。
多数据库支持兼容 MySQL、Oracle、PostgreSQL 等主流数据库,通过配置不同方言(如分页语法)实现适配。
简洁 API提供 SqlSession 接口,封装了 CRUD 操作。开发人员通过调用 selectOne()、insert() 等方法即可完成数据库交互。
XML 配置开发人员编写 mapper.xml 文件,定义 SQL 语句、参数类型和返回结果映射。
示例:<select id="getUserById" resultType="User"> SELECT * FROM users WHERE id = #{id}</select>
SQL 语句执行MyBatis 解析 XML 中的 SQL 模板,替换 #{} 占位符为实际参数,生成最终可执行的 SQL。
数据映射与传输
执行 SQL 后,MyBatis 将结果集映射为 Java 对象(如 List<User>)。
支持类型转换(如数据库 DATETIME → Java LocalDateTime)。
简化开发减少手写 JDBC 代码(如 Connection、PreparedStatement),通过配置即可完成数据操作。
性能优化
一级缓存:默认开启,相同 SqlSession 内重复查询直接返回缓存结果。
二级缓存:跨 SqlSession 共享缓存(需配置 <cache> 标签)。
灵活性支持动态 SQL(如 <if>、<foreach>),根据条件生成不同 SQL。
示例:<select id="findActiveUsers" resultType="User"> SELECT * FROM users WHERE status = 'ACTIVE' <if test="name != null"> AND name LIKE #{name} </if></select>
可扩展性
与 Spring 集成:通过 @MapperScan 注解自动注入 Mapper 接口。
与 Hibernate 共存:在混合架构中,MyBatis 负责复杂查询,Hibernate 处理简单 CRUD。
与 JDBC 对比MyBatis 封装了 JDBC 的冗余代码(如异常处理、资源释放),开发效率更高。
与 Hibernate 对比
ORM 方式:Hibernate 是全自动 ORM,通过对象模型生成 SQL;MyBatis 是半自动,需手动编写 SQL。
控制粒度:MyBatis 适合需要精细优化 SQL 的场景(如复杂报表),Hibernate 适合快速开发简单应用。
MyBatis 通过平衡自动化与灵活性,成为 Java 生态中主流的持久层解决方案之一。