Java之Hibernate与JPA!

举报
喵手 发表于 2025/09/24 21:36:20 2025/09/24
【摘要】 开篇语哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,...

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

Hibernate与JPA(Java Persistence API)是Java中处理数据库持久化的重要框架。Hibernate是一个开源的ORM(对象关系映射)框架,而JPA是Java EE标准提供的一个规范,用于管理关系型数据库中的对象与表的映射。本文将介绍ORM概念、Hibernate框架基础、实体映射与注解、Hibernate查询语言(HQL)与原生SQL查询、JPA的基本概念以及Spring Data JPA的使用。


1. ORM概念与Hibernate框架基础

ORM概念

ORM(Object-Relational Mapping)是一种将对象模型与关系型数据库之间进行映射的技术。在传统的JDBC编程中,我们需要手动将数据库中的表与Java对象进行映射,这既繁琐又容易出错。ORM通过自动化的方式将Java对象与数据库表进行映射,简化了数据库操作,提高了开发效率。

ORM的核心思想是将关系型数据库中的每一行数据映射到Java中的一个对象,将数据表中的列映射到Java对象的属性。通过ORM,开发者无需编写SQL语句,只需通过对象的方式进行数据库的增删改查操作。

Hibernate框架基础

Hibernate是一个流行的开源ORM框架,它简化了数据库操作,通过自动化的映射与管理机制,将Java对象与数据库表进行映射。Hibernate提供了一个强大的API,支持事务管理、缓存、查询语言等功能。

Hibernate的核心组件:

  1. SessionFactory:Hibernate的核心工厂类,用于创建Session实例。
  2. Session:Hibernate的工作单元,用于执行持久化操作。
  3. Transaction:Hibernate提供的事务接口,用于管理事务的开始、提交和回滚。
  4. Configuration:用于配置Hibernate的属性,加载Hibernate配置文件。

2. 实体映射与注解(@Entity、@Id、@OneToMany等)

实体映射

实体类是用来表示数据库中的表的Java类,Hibernate使用实体类的实例来表示数据表中的每一行。实体类需要使用JPA的@Entity注解进行标识,表示它是一个持久化对象。

常用注解

  • @Entity:标识一个类为实体类,表示该类将与数据库中的一张表对应。
  • @Id:标识实体类的唯一标识符,通常是主键字段。
  • @GeneratedValue:用于主键生成策略,如GenerationType.IDENTITYGenerationType.SEQUENCE等。
  • @OneToMany:表示一对多关系。
  • @ManyToOne:表示多对一关系。
  • @ManyToMany:表示多对多关系。
  • @JoinColumn:用于指定外键的列。

实体类示例

import javax.persistence.*;

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

    private String name;

    @OneToMany(mappedBy = "user")
    private List<Order> orders;

    // Getters and Setters
}

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String orderDate;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    // Getters and Setters
}

在这个示例中,UserOrder类之间有一对多的关系。User类的id字段通过@Id注解标识为主键,orders字段表示一个用户可以有多个订单。


3. Hibernate查询语言(HQL)与原生SQL查询

Hibernate查询语言(HQL)

Hibernate查询语言(HQL)是一种面向对象的查询语言,它与SQL类似,但针对的是Java对象而非数据库表。HQL允许开发者使用类名、属性名等对象模型中的元素来进行查询,而不是数据库中的表名和列名。

HQL查询示例:

String hql = "FROM User WHERE name = :username";
Query query = session.createQuery(hql);
query.setParameter("username", "john_doe");
List<User> users = query.list();

在这个查询中,HQL查询的是User实体类的name属性,而不是数据库中的列。Hibernate会自动将HQL查询映射到对应的SQL语句。

原生SQL查询

虽然HQL是一种强大的查询方式,但在某些情况下,开发者可能需要执行原生的SQL查询。Hibernate支持原生SQL查询,开发者可以直接使用SQL语句与数据库交互。

原生SQL查询示例:

String sql = "SELECT * FROM users WHERE name = ?";
Query query = session.createSQLQuery(sql).addEntity(User.class);
query.setParameter(1, "john_doe");
List<User> users = query.list();

通过createSQLQuery方法,Hibernate允许直接执行SQL语句并将结果映射到实体类中。


4. JPA的基本概念与Spring Data JPA

JPA的基本概念

JPA(Java Persistence API)是Java EE的一个标准规范,用于管理关系型数据库中的持久化数据。JPA定义了一组接口和规范,Hibernate、EclipseLink、OpenJPA等框架都是JPA的实现。

JPA提供了以下核心功能:

  1. 实体管理:通过EntityManager接口管理实体的生命周期(持久化、查询、更新、删除)。
  2. JPQL(Java Persistence Query Language):与HQL类似,JPA提供了JPQL查询语言,它基于对象而不是数据库表进行查询。
  3. 持久化上下文:JPA通过EntityManagerEntityTransaction来管理实体对象的持久化和事务。

JPA实体类示例:

import javax.persistence.*;

@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String author;

    // Getters and Setters
}

Spring Data JPA

Spring Data JPA是Spring框架提供的一种简化JPA操作的解决方案。它基于JPA规范,封装了大量常用的数据库操作,开发者只需要定义接口,Spring Data JPA会自动实现这些接口。

Spring Data JPA基本使用:

  1. 定义实体类:实体类与JPA标准一致,使用@Entity注解。
  2. 定义Repository接口:Spring Data JPA提供了JpaRepository接口,它已经实现了常见的数据库操作,如增删改查。开发者只需要定义自己的Repository接口,并继承JpaRepository

示例:

import org.springframework.data.jpa.repository.JpaRepository;

public interface BookRepository extends JpaRepository<Book, Long> {
    List<Book> findByAuthor(String author);
}

在这个示例中,BookRepository继承了JpaRepository,并且Spring Data JPA自动实现了findByAuthor方法,开发者无需编写具体的实现。

使用Spring Data JPA查询:

@Autowired
private BookRepository bookRepository;

public void findBooks() {
    List<Book> books = bookRepository.findByAuthor("J.K. Rowling");
    books.forEach(book -> System.out.println(book.getTitle()));
}

Spring Data JPA的一个显著特点是自动实现了数据库操作,开发者只需要定义查询方法,框架会根据方法名自动生成SQL。


总结

Hibernate与JPA是Java开发中非常重要的技术,它们为开发者提供了一个简化的方式来管理和操作数据库数据。通过使用Hibernate的ORM功能,开发者能够高效地进行对象与数据库表的映射,避免了繁琐的SQL编写。JPA作为Java的标准,提供了规范化的持久化API,而Spring Data JPA进一步简化了数据库操作,使得开发者只需关注业务逻辑,减少了样板代码的编写。

了解和掌握Hibernate与JPA的使用,能够大大提高开发效率、减少代码冗余,并且使得代码更具可维护性和可扩展性。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。