What is Hibernate?

Hibernate λ Java μ objects λ₯Ό Database μ μ μ₯ λ° λ³΄μ‘΄νλλ‘ νλ framework μ΄λ€. Hibernate λ₯Ό μ¬μ©νλ μ΄μ λ° μ₯μ μλ λ€μ μΈ κ°μ§ μ λλ₯Ό λ€ μ μλ€.
- Hibernate λ λͺ¨λ low-level μ SQL μ λνμ¬ λ€λ£¬λ€.
- κ°λ°μκ° μμ±ν΄μΌ νλ JDBC μ μ½λλμ μ΅μννλ€.
- ORM(Object-to-Relational Mapping) μ μ 곡νλ€.
ORM(Object-to-Relational Mapping)

ORM μ OOP(Object-Orientied Programming) μΈμ΄μ object μ Relational Database μ λ°μ΄ν°λ₯Ό mapping νμ¬ RDB table μ κ°μ²΄ μ§ν₯μ μΌλ‘ μ¬μ©νκ² ν΄μ£Όλ κΈ°μ μ΄λ€. κ°λ°μκ° μ§μ SQL query λ±μ μμ±νμ§ μλλΌλ Database λ₯Ό μ‘°μν μ μλλ‘ λλ κΈ°μ μΈ κ²μ΄λ€.
What is JPA?
JPA λ Jarkarta Persistence API, μ΄μ μλ Java Persistence API λΌκ³ λΆλ¦¬λ κ²μΌλ‘, ORM μ νμ€ API μ΄λ€.
JPA λ specification, μ¦ interface λ€λ§μ μ 곡νκΈ° λλ¬Έμ, λ°λμ μ¬μ©μ μνμ¬λ implementation μ νμλ‘ νλ€. JPA λ λ¨μ§ νμ€νλ specification μ μ 곡νλ κ²λΏμ΄λ€.

μ΄μ μ¬λ¬ vendor λ€μ΄ JPA μ λν implementation μ νμλλ°, λνμ μΌλ‘ μμ κ°μ΄ Hibernate μ EclipseLink κ° μλ€. Spring Boot μμλ Hibernate λ₯Ό default λ‘ μ¬μ©νκ³ μμΌλ©°, μ€μ μ λ°λΌ λ€λ₯Έ vendor μ JPA implementation μ μ¬μ©ν μ μλ€.
Benefits of JPA
JPA λ standard API λ₯Ό μ 곡νκΈ° λλ¬Έμ νΉμ vendor μ λ¬Άμ¬μμ νμκ° μλ€. JPA Spec μ λ°λΌμ flexible νκ² code λ₯Ό μ μ§λ³΄μνλ©΄ λκΈ° λλ¬Έμ, μ¬μ©νκ³ μλ vendor κ° μλΉμ€ μ 곡μ μ€λ¨νλλΌλ vendor λ§ λ¨μνκ² λ°κΎΈλ©΄ λλ€.
Saving a Java Object with JPA
// create Java object
Student theStudent = new Student("James", "Doe", "lucvs.pages.dev");
// save it to database
entityManager.persist(theStudent);Java object λ₯Ό νλ μμ±νκ³ , JPA Helper Object μΈ entityManager λ₯Ό ν΅νμ¬ μλμΌλ‘ database μ data λ₯Ό λ±λ‘νλ€.
Entity Manger μ λν μμΈν λ΄μ©μ μ΄ λΆλΆμ μ°Έκ³ νμ.
JDBC(Java Database Connectivity) λ₯Ό μ£Όλ‘ μ¬μ©νλ μμ μλ κ°λ°μκ° μ§μ SQL query λ₯Ό μμ±νμ¬ μλμΌλ‘ database λ₯Ό κ΄λ¦¬ν΄μΌ νλ€. νμ§λ§ JPA λ μ΄λ₯Ό λμ ν΄μ£Όκ³ , λ΄λΆμ μΌλ‘λ insert query κ° μ€νλλ κ²μ΄λ€.
Retrieving a Java Object with JPA
// retrieve from database using the primary key
int theId = 1;
Student myStudent = entityManager.find(Student.class, theId);JPA λ₯Ό ν΅νμ¬ Java object λ₯Ό database λ‘λΆν° κ°μ Έμ¬ λλ μμ κ°μ΄ μμ±νλ©΄ λλ€. λ¬Όλ‘ μ¬λ¬κ°μ§ λ°©λ²μ΄ μ‘΄μ¬νκ² μ§λ§ κ°λ¨νκ²λ§ λ¨Όμ μ΄ν΄λ³΄μ.
entityManager.find() λ₯Ό ν΅ν΄, λ΄λΆμ μΌλ‘λ Student λΌλ table μμ, μ£Όμ΄μ§ theId λ₯Ό κ°κ³ μλ object λ₯Ό μ°Ύλλ€.
Querying for Java Objects
TypedQuery<Student> theQuery = entityManager.createQuery("from Student", Student.class);
List<Student> students = theQuery.getResultList();λ§μ½ database μμ λͺ¨λ Student object λ₯Ό κ°μ Έμ€κ³ μΆλ€λ©΄ μμ κ°μ΄ JPQL(Jakarta Persistence Query Language) query object λ₯Ό μμ±νκ³ , μ΄λ₯Ό ν΅νμ¬ ν΄λΉ query λ₯Ό μ€νν΄ κ²°κ³Όλ₯Ό List type λ°ννκ² λ§λ€λ©΄ λλ€.
JPQL λ° μμΈν μλ μ리λ μΆνμ λ€μ μ΄ν΄λ³΄μ.
Hibernate / JPA and JDBC

μμ κ·Έλ¦Όμ μ΄ν΄λ³΄μ. μ€μ λ‘ JPA Hibernate λ JDBC λ₯Ό μ¬μ©νλ νλμ Abstraction μ΄λ€. λ°λΌμ Hibernate μ λͺ¨λ database μ κ·Όμ JDBC λ₯Ό λ΄λΆμ μΌλ‘ μ¬μ©νλ€.
JPA Hibernate μ API λ€μ data λ₯Ό save νκ±°λ retrieve νλ λ±μ μμ΄μ λͺ¨λ low level code λ₯Ό λ΄λΉνλ κ²μ²λΌ 보μ΄μ§λ§, μ€μ λ΄λΆμμλ JDBC λ₯Ό μ¬μ©νμ¬ ν΄λΉ μμ λ€μ μννλ€.