Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理

简介: Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理

Hibernate和MyBatis是Java中最常用的两种ORM(对象关系映射)框架。它们都是用来简化数据库操作的工具,但各自有独特的特性和使用场景。

Hibernate

ORM映射

Hibernate是一个全自动的ORM框架,它将Java对象与数据库表之间的关系进行映射。在Hibernate中,每个实体类都对应一个数据库表,而类的属性则对应表中的字段。这种映射通过XML配置文件或注解来实现。

例如,一个简单的User实体类可以被映射到名为users的数据库表:

@Entity
@Table(name = "users")
public class User {
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username")
    private String username;

    // getters and setters...
}

在这个例子中,@Entity注解表示这是一个持久化类,@Table注解指定了对应的数据库表名,@Id@GeneratedValue用于标识主键生成策略,@Column注解定义了属性与表字段的映射关系。

缓存机制

Hibernate具有两个级别的缓存:一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。

  1. 一级缓存:它是默认开启的,当在一个Session中执行相同的查询时,不会重复从数据库获取数据,而是直接从缓存中获取。这样可以提高性能,减少对数据库的访问。
  2. 二级缓存:它可以跨越多个Session共享数据。通常情况下,二级缓存用于存储读取频繁且很少更新的数据。启用二级缓存需要额外的配置,并可以选择不同的缓存提供者,如EHCache、Redis等。

MyBatis

ORM映射

MyBatis虽然也是一种ORM框架,但它比Hibernate更加轻量级,提供了一种半自动的方式来进行对象关系映射。在MyBatis中,开发者需要手动编写SQL语句,并将查询结果映射到Java对象上。这使得MyBatis更灵活,可以根据实际需求定制SQL。

例如,一个简单的UserMapper接口可能如下所示:

public interface UserMapper {
   
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(@Param("id") Long id);
}

在这个例子中,@Select注解定义了一个SQL查询,而@Param注解则用于传递参数。

缓存机制

MyBatis也有一级缓存和二级缓存的概念。

  1. 一级缓存:类似于Hibernate的一级缓存,同一个SqlSession对象在执行相同SQL查询时会重用之前的结果,避免了不必要的数据库访问。
  2. 二级缓存:二级缓存在MyBatis中是可选的,需要在配置文件或注解中显式启用。启用后,不同SqlSession之间也可以共享数据。二级缓存同样适用于读取频繁且很少更新的数据。

总结

  • Hibernate提供了更全面的自动化功能,适合于大型项目,尤其在需要处理复杂的关联查询时表现出色。
  • MyBatis更注重SQL的灵活性,适合于小型项目或者需要自定义复杂查询的情况。
  • 在缓存方面,两者都有一级缓存和二级缓存的支持,但具体配置和使用方式有所不同。
相关文章
|
4月前
|
SQL Java 数据库连接
MyBatis 的映射关系
MyBatis 核心功能之一是映射关系,支持一对一、一对多和多对多三种 ORM 映射。通过实体类与配置文件结合,开发者可灵活实现数据关联,提升数据库操作效率。
334 4
|
9月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
1843 0
|
8月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`<if>`、`<where>`、`<set>`、`<foreach>`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`<sql>`和`<include>`实现代码复用,优化维护效率。
844 5
|
10月前
|
缓存 Java 数据库连接
Mybatis一级缓存、二级缓存详讲
本文介绍了MyBatis中的查询缓存机制,包括一级缓存和二级缓存。一级缓存基于同一个SqlSession对象,重复查询相同数据时可直接从缓存中获取,减少数据库访问。执行`commit`操作会清空SqlSession缓存。二级缓存作用于同一namespace下的Mapper对象,支持数据共享,需手动开启并实现序列化接口。二级缓存通过将数据存储到硬盘文件中实现持久化,为优化性能,通常在关闭Session时批量写入缓存。文章还说明了缓存的使用场景及注意事项。
377 7
Mybatis一级缓存、二级缓存详讲
|
10月前
|
SQL XML Java
七、MyBatis自定义映射resultMap
七、MyBatis自定义映射resultMap
307 6
|
11月前
|
存储 缓存 分布式计算
【赵渝强老师】Spark RDD的缓存机制
Spark RDD通过`persist`或`cache`方法可将计算结果缓存,但并非立即生效,而是在触发action时才缓存到内存中供重用。`cache`方法实际调用了`persist(StorageLevel.MEMORY_ONLY)`。RDD缓存可能因内存不足被删除,建议结合检查点机制保证容错。示例中,读取大文件并多次调用`count`,使用缓存后执行效率显著提升,最后一次计算仅耗时98ms。
337 0
【赵渝强老师】Spark RDD的缓存机制
|
10月前
|
Java 数据库连接 mybatis
MyBatis篇-映射关系(1-1 1-n n-n)
本文介绍了MyBatis中四种常见关系映射的配置方法,包括一对一、一对多、多对一和多对多。**一对一**通过`resultMap`实现属性与字段的映射;**一对多**以用户-角色为例,使用`<collection>`标签关联集合数据;**多对一**以作者-博客为例,利用`<association>`实现关联;**多对多**则通过引入第三方类(如UserForDept)分别在User和Dept类中添加集合属性,并配置对应的`<collection>`标签完成映射。这些方法解决了复杂数据关系的处理问题,提升了开发效率。
|
XML Java 数据库连接
Mybatis映射关系
简介:本文介绍了MyBatis框架中四种常见的关系映射方式,包括一对一、一对多、多对一及多对多。一对一通过简单属性映射实现;一对多通过在主对象中添加集合属性并使用`<collection>`标签映射子对象集合;多对一则利用`<association>`标签在主对象中映射单个子对象;多对多需引入第三方类,分别在两个主对象中添加对方的集合属性,并通过`<collection>`标签实现映射。
247 32
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
248 6
|
缓存 Java 数据库连接
MyBatis缓存机制
MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。
253 1