Spring(Hibernate)

Viva의 놀이터·2021년 5월 9일
0

spring

목록 보기
10/13
post-thumbnail

이전

Spring ORM

Hibernate

자바와 데이터베이스 관계를 정의한 JPA를 개발자가 사용 할 수 있게끔 만들어준 구현체가 Hibernate이다. 사실 JPA를 구현하는 구현체에는 Hibernate 말고도 DataNucleus, EclipseLink 등 다른 구현체들도 존재하고 원한다면 직접 JPA 구현체를 만들 수도 있다.

하지만 일반적으로 Hibernate를 사용하는데 Hibernate를 사용하지 않을 이유가 없을 정도로 성숙한 라이브러리이기 때문이다.

Spring data jpa

Spring data jpa는 Spring에서 편하게 데이터베이스 관련 개발을 하기 위해서 제공되는 모듈이다.

 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

위의 코드안에 담겨있고 가장 많이 사용된다는 Hibernate도 같이 정의되어 있다. 그래서 따로 Spring에서 Hibernate를 사용하기 위한 설정이 필요가 없다.

Spring data jpa는 JPA를 구현한 구현체인 Hibernate를 사용하여 손 쉽게 데이터베이스와 통신을 할 수 있고 이를 통해서 개발자들이 편하게 개발 할 수 있는 환경이 주어졌다.

비교

1. 짧아진다

sql문

테이블 생성
CREATE TABLE `small_region` (
	`small_region_id` BIGINT(19,0) NOT NULL AUTO_INCREMENT,
	`adm_code` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
	`latitude` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
	`longitude` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
	`small_region_name` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_0900_ai_ci',
	`big_region_id` BIGINT(19,0) NULL DEFAULT NULL,
	PRIMARY KEY (`small_region_id`) USING BTREE,
	INDEX `FK8ctcfkqg5auj1amwwyj5jsg9e` (`big_region_id`) USING BTREE,
	CONSTRAINT `FK8ctcfkqg5auj1amwwyj5jsg9e` FOREIGN KEY (`big_region_id`) REFERENCES `test`.`big_region` (`big_region_id`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
AUTO_INCREMENT=251
;

수정코드
ALTER TABLE `test123`
	CHANGE COLUMN `열 2` `열 dfd2` SMALLINT NULL DEFAULT NULL AFTER `열 1`,
	CHANGE COLUMN `열 4` `열 fasdfasdf4` INT(10,0) NULL DEFAULT NULL AFTER `열 3`;

탐색코드
SELECT NAME, birthyear, addr, height, CONCAT(CAST(mobile1 AS CHAR(3)), CAST(mobile2 AS  CHAR(8))) AS '휴대전화',
YEAR(NOW()) - birthyear AS '지금',
DATEDIFF(NOW(),mDate) AS '회원기간',
if(DATEDIFF(NOW(),mDate) > 4500, 'VIP','') AS vip
 FROM usertbl

이런 코드를 Spring data JPA를 사용하면

테이블 생성 (Hibernate 생성자 타입)
@Entity
public class SmallRegion {

    @JsonIgnore
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "small_region_id")
    private Long id;

    @Column(name = "small_region_name")
    private String smallRegionName;

    @JsonIgnore
    @Column(name = "adm_code")
    private String admCode;

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

    @Column(name = "latitude")
    private String latitude;
    
 수정코드는 그냥 클래스에서 작성하고 실행시키면 알아서 수정된다.
 
 탐색코드
 find 원하는 조건

2. DB에 종속되지 않는다.

sql문을 직접 작성을 하면 기존의 사용하던 DBMS에서 다른 DMMS로 넘어가기 힘들다 그 이유는 각각의 DBMS마다 sql 문법이 다르기 때문이다. 다른 db로 변경한다면 기존에 작성한 sql문들을 모두 수정해야 한다. 하지만 JPA를 사용하면 그럴 필요가 없고 어떤 디비를 사용하는지 선언만 해주면 아무런 문제가 없다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
등등
profile
역사를 잊은 기술에겐 미래가 없다

0개의 댓글