Hibernate、MyBatis 和 MyBatis-Plus
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 条件构造器,类型安全
更多推荐




所有评论(0)