Hibernate란?
ORM 기술에 대한 명세인 JPA(Java Persistence API)의 구현체의 한 종류이다.
하이버네이트는 자바 언어를 위한 ORM 프레임워크이자 JPA의 구현체로, JPA 인터페이스를 구현하며, 내부적으로 JDBC API를 사용한다. JPA는 관계형 데이터베이스와 객체의 패러다임 불일치 문제를 해결할 수 있다는 점과 영속성 컨텍스트(엔티티를 영구 저장) 제공이 큰 특징이다.
장점 :
1. Hibernate는 SQL을 직접 사용하지 않고, 메서드 호출만으로 쿼리가 수행되므로 db를 변경하더라도 자유롭다.
2. 자동으로 orm 매핑을 처리하기 때문에 객체 조작을 통해 db 작업 수행
3. 1차, 2차 캐싱을 제공하여 db로의 접근을 최소화 한다.
4. 트랜잭션 관리와 지연 로딩을 제공한다.
사용방법 :
1. pom.xml에 Hibernate와 관련된 의존성을 추가한다. (각자의 버전에 맞는 호환을 찾을 것)
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>SpringHibernateExample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- Spring Framework dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
<!-- Hibernate dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<!-- Database dependencies -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
spring 4.0.0 STS툴 레거시 프로젝트 기준
hibernate를 이용한 CRUD 예제
1. User클래스(model) -> lombok.Data로 getter, setter 이용
package com.example.model;
import javax.persistence.*;
import lombok.Data;
@Entity
@Table(name = "user")
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
2. UserDAO 인터페이스
package com.example.dao;
import com.example.model.User;
import java.util.List;
public interface UserDAO {
void save(User user);
List<User> list();
}
3. UserDAOImpl.java (DAO 구현 클래스)
package com.example.dao;
import com.example.model.User;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Repository
@Transactional
public class UserDAOImpl implements UserDAO {
@Autowired
private SessionFactory sessionFactory;
@Override
public void save(User user) {
sessionFactory.getCurrentSession().save(user);
}
@Override
@SuppressWarnings("unchecked")
public List<User> list() {
return sessionFactory.getCurrentSession().createQuery("from User").list();
}
}
4. UserService 인터페이스
package com.example.service;
import com.example.model.User;
import java.util.List;
public interface UserService {
void save(User user);
List<User> list();
}
5. UserServiceImpl 서비스 구현 클래스
package com.example.service;
import com.example.dao.UserDAO;
import com.example.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public void save(User user) {
userDAO.save(user);
}
@Override
public List<User> list() {
return userDAO.list();
}
}
6. UserController.java (컨트롤러 클래스)
package com.example.controller;
import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/")
public String index(Model model) {
model.addAttribute("users", userService.list());
return "index";
}
@PostMapping("/save")
public String save(User user) {
userService.save(user);
return "redirect:/";
}
}
7. +@
뷰파일, 웹설정파일(web.xml), spring mvc 설정 파일 등등
'KOSTA교육 > 수업' 카테고리의 다른 글
[53/100] 240628 (0) | 2024.06.28 |
---|---|
[52/100] 240627 (0) | 2024.06.27 |
[50/100] 240625 (0) | 2024.06.25 |
[49/100] 240624 (0) | 2024.06.24 |
[48/100] 240621 (0) | 2024.06.21 |