Hibernate、MyBatis 和 MyBatis-Plus 都是 Java 生态中常用的持久层框架,它们各有特点和适用场景。

Hibernate          全自动化 ORM            完全对象化,追求零 SQL

MyBatis            半自动化 ORM            SQL 与 Java 代码分离,灵活可控

MyBatis-Plus       MyBatis 增强工具        在 MyBatis 基础上简化开发

 关键区别
 1. SQL 控制程度

- Hibernate :自动生成 SQL,开发者几乎不需要写 SQL
- MyBatis :必须手动编写 SQL,完全掌控 SQL 逻辑
- MyBatis-Plus :提供 CRUD 自动生成,但保留手写 SQL 的能力
 2. 学习曲线
- Hibernate :较高,需要理解 ORM 映射、HQL、缓存机制等
- MyBatis :中等,主要学习 SQL 映射配置
- MyBatis-Plus :较低,基于 MyBatis,额外学习增强功能
 3. 性能优化
- Hibernate :自动生成的 SQL 可能不够优化,需要额外配置
- MyBatis 手动优化 SQL,性能可控性强
- MyBatis-Plus :继承 MyBatis 的性能优势,同时提供优化工具
4. 适用场景
- Hibernate :适合复杂的企业级应用,追求快速开发
- MyBatis :适合需要精细控制 SQL 的场景,如报表、数据分析
- MyBatis-Plus :适合希望快速开发同时保持灵活性的项目

Hibernate 框架介绍

Hibernate 是 Java 生态中最流行的 对象关系映射(ORM)框架 之一,它简化了 Java 对象与数据库表之间的映射关系,让开发者可以用面向对象的方式操作数据库

核心特点

 1. 全自动 ORM
Hibernate 实现了 对象-关系映射 ,开发者无需编写 SQL,通过操作 Java 对象即可完成数据库操作:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

// 插入数据 - 只需保存对象
User user = new User();
user.setName("张三");
user.setAge(25);
session.save(user);

// 查询数据 - 返回对象
User found = session.get(User.class, 1L);

tx.commit();
session.close();

 2. 自动生成 SQL
根据实体类的映射配置,Hibernate 自动生成 CRUD SQL,支持多种数据库(MySQL、Oracle、PostgreSQL 等)。

3. 强大的缓存机制
- 一级缓存 :Session 级别的缓存,默认开启
- 二级缓存 :SessionFactory 级别的缓存,可配置使用
 4. 事务管理
与 Spring 无缝集成,支持声明式事务管理

核心组件

SessionFactory    创建 Session 的工厂,线程安全,通常单例 
Session           数据库会话,用于执行 CRUD 操作 
Transaction       事务管理 
EntityManager     JPA 标准接口(Hibernate 是 JPA 实现)

实体映射示例
通过注解定义实体与表的映射:

@Entity
@Table(name = "user")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name = "name", nullable = false, length = 50)
    private String name;
    
    @Column(name = "age")
    private Integer age;
    
    // Getter/Setter 省略
}

查询方式
HQL(Hibernate Query Language)

面向对象的查询语言:

Query query = session.createQuery("FROM User WHERE age > :age");
query.setParameter("age", 18);
List<User> users = query.list();

Criteria API
类型安全的查询方式:

CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.where(cb.greaterThan(root.get("age"), 18));
List<User> users = session.createQuery(cq).getResultList();

MyBatis 框架介绍


MyBatis 是一个 半自动 ORM(对象关系映射)框架 ,它将 SQL 与 Java 代码解耦,让开发者可以完全掌控 SQL 的编写,同时提供便捷的结果映射功能。

核心特点
 1. SQL 与代码分离
MyBatis 将 SQL 定义在 XML 文件或注解中,与 Java 业务逻辑解耦:

<!-- UserMapper.xml -->
<select id="selectUserById" resultType="com.example.User">
    SELECT id, name, age 
    FROM user 
    WHERE id = #{id}
</select>

2. 灵活的 SQL 控制
开发者完全掌控 SQL 编写,可以进行精细的性能优化:

<select id="selectUsers" resultType="com.example.User">
    SELECT * FROM user
    <where>
        <if test="name != null">AND name LIKE #{name}</if>
        <if test="age != null">AND age = #{age}</if>
    </where>
    ORDER BY create_time DESC
</select>

3. 强大的结果映射
支持自动映射和自定义映射,处理复杂的关联关系:

<resultMap id="UserResultMap" type="com.example.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
    <association property="department" javaType="com.example.Department">
        <id property="deptId" column="dept_id"/>
        <result property="deptName" column="dept_name"/>
    </association>
</resultMap>

核心组件

SqlSessionFactory    创建 SqlSession 的工厂,基于配置构建 
SqlSession           数据库会话,执行 SQL 的核心接口 
Mapper 接口          定义数据访问方法,与 XML 映射关联
Configuration        全局配置,包含数据源、事务、映射等

 MyBatis-Plus 框架介绍


MyBatis-Plus(简称 MP)是 MyBatis 的增强工具 ,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

 核心特点
1. 无侵入式增强
完全兼容 MyBatis,引入 MyBatis-Plus 不会修改原有 MyBatis 代码,可以平滑过渡。

2. 强大的 CRUD 封装
内置通用 Mapper,无需编写任何 SQL 即可完成单表 CRUD 操作:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 继承后自动获得大量常用方法
}

// 使用
userService.save(user);                    // 插入
userService.updateById(user);              // 根据 ID 更新
userService.removeById(1L);                // 根据 ID 删除
userService.getById(1L);                   // 根据 ID 查询
userService.list();                        // 查询所有

3. 代码生成器
自动生成 Entity、Mapper、Service、Controller 等代码,快速搭建项目骨架。

核心组件

BaseMapper<T>           通用 Mapper 接口,提供 CRUD 方法 
IService<T>             通用 Service 接口,业务层封装 
ServiceImpl<M, T>       Service 实现类基类 
QueryWrapper<T>         条件构造器,构建查询条件 
UpdateWrapper<T>        更新条件构造器 
LambdaQueryWrapper<T>   Lambda 条件构造器,类型安全

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐