🌏 DataBase/MySQL

[DB] 11. JPA(Java Persistent API) (Feat.Oracle) & Entity

ryang x2 2020. 11. 5. 16:37
728x90
반응형

● Camel Case : 단어를 표기할 때 첫 문자는 소문자로 시작하며 띄어쓰기 대신 (대문자)로 단어를 구분합니다. 

* Java의 변수는 선언할 때 camelCase로 선언합니다.

 

Snake Case : 단어를 표기할 때 모두 소문자로 표기하며, 띄어쓰기 대신 언더바(_)로 표기합니다. 

* DB테이블 및 컬럼에 사용됩니다. 

* API 정의하기에 따라 다르지만 주로 API 통신 규격을 만들 때 사용됩니다.

 

# JPA(Java Persistent API) 

ORM(Object Relatianal Mapping)으로 RDB데이터베이스의 정보를 객체지향으로 손쉽게 활용할 수 있도록 도와주는 도구입니다. 자바객체와 관계형 데이터베이스 둘간의 맵핑을 통해서 보다 손쉽게 적용할 수 있는 기술을 제공합니다. 또한 쿼리에 집중하기 보다는 객체에 집중함으로써, 조금 더 프로그램적으로 많이 활용할 수 있습니다. 

-- 테이블 만들기
create table tb_user (
    id number not null,
    userid varchar2(20) not null,
    username varchar2(10) not null,
    regdate date,
    updatedate date
);

-- 시퀀스 만들기(oracle 에는 auto_increament 기능이 없어 시퀀스를 만들어준다.)
create sequence user_seq increment by 1
    start with 1 --시작값
    minvalue 1 --최소값
    maxvalue 99999999 --최대값
    nocycle; -- 순환하지 않는다.

-- insert 적용
insert into tb_user (id, userid, username, regdate, updatedate)
values (user_seq.nextval, 'apple', '김사과', '2020-11-05', '2020-11-05');

insert into tb_user (id, userid, username, regdate, updatedate)
values (user_seq.nextval, 'banana', '반하나', '2020-11-05', '2020-11-05');

insert into tb_user (id, userid, username, regdate, updatedate)
values (user_seq.nextval, 'oragne', '오렌지', '2020-11-05', '2020-11-05');

select * from tb_user;

 

* user_seq.nextval : 시퀀시가 적용되는 것

 

# Entity 

JPA에서 테이블을 자동으로 생성관리 해주는 기능을 가진 객체

 

★ DB Table == JPA Entity 와 같은 의미 

 

.java

@Entity
@SequenceGenerator(
        name="USER_SEQ_GEN",
        sequenceName ="USER_SEQ",
        initialValue = 1, // 1부터 시작
        allocationSize = 1 // 1칸씩 만듦
)

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TbUser {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_SEQ_GEN")
    private Long id;
    private String userId;
    private String userName;
    private LocalDateTime regDate;
    private LocalDateTime updateDate;
}

 

- 문제

테이블 만들기

tb_profile

userid : tb_user의 id(primaty key)와 연결

age : 숫자

hp : 문자(20)

email : 문자(50)

gender : 문자(10)

 

* tb_user.id 기본키

* userid 외래키

 

create table tb_profile(
  userid number not null,
  age number not null,
  hp varchar(20) not null,
  email varchar2(50),
  gender varchar2(10)
);

ALTER TABLE tb_user add constraint user_pk primary key (id);
alter table tb_profile add constraint  profile_fk foreign key (userid) references tb_user(id);

insert into tb_profile values(22, 20, '010-1111-1111', 'apple@apple.com', '여자');
insert into tb_profile values (23, 25, '010-2222-2222', 'orange@orange.com', '남자');

-- ANSI SQL, 조인 : user.userid, user.username, profile.hp, profile.age, profile.gender

select tb_user.userid, tb_user.username, tb_profile.hp, tb_profile.age, tb_profile.gender
from tb_user inner join tb_profile on tb_user.id = tb_profile.userid;

-- ORACLE
SELECT tb_user.userid, tb_user.username, tb_profile.hp, tb_profile.age, tb_profile.gender
from tb_user, tb_profile where tb_user.id = tb_profile.userid;

SELECT u.userid, u.username, p.hp, p.age, p.gender
from tb_user u, tb_profile p where u.id = p.userid;

 

 

728x90
반응형