๐ ORM๊ณผ JPA
๐ ์ํฐํฐ ํด๋์ค
package org.zerock.ex2.entity;
@Entity
@Table(name = "tbl_memo")
@ToString
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Memo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long mno;
@Column(length = 200,nullable = false)
private String memoText;
}
์ํฐํฐ๋ฅผ ์ํ ํด๋์ค, JPA๋ก ๊ด๋ฆฌ๋๋ ์ธ์คํด์ค์ด๋ ค๋ฉด ๋ฐ๋์ ์ถ๊ฐํด์ผํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
@Entity์ ํจ๊ป ์ฌ์ฉ๋์ด ํ ์ด๋ธ ์ด๋ฆ, ์ธ๋ฑ์ค ๋ฑ์ ์ค์ ์ ํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
pk ๊ฐ์ ์๋์ผ๋ก ์์ฑํ๊ณ ์ ํ ๋ ์ด๋ค 'ํค ์์ฑ ์ ๋ต'์ผ๋ก ์์ฑํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
IDENTITY : ํด๋นํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํค์์ฑ์ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ค.(mysql & mariadb๋ auto_increment)
์นผ๋ผ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค(๊ธฐ๋ณธ๊ฐ,null,๊ธธ์ด,์ด๋ฆ ๋ฑ)
๐ JpaRepository
package org.zerock.ex2.repository;
public interface MemoRepository extends JpaRepository<Memo,Long> {
//์ํฐํฐํ์
๊ณผ @Id์ ํ์
์ ์ง์
}
@SpringBootTest
public class MemoRepositoryTests {
@Autowired
MemoRepository memoRepository;
//์๋ ํ
์คํธ ๋ฉ์๋๋ค์ ์ด ๋ถ๋ถ์ ์ฝ์
๋ ์์ .
}
@Test
public void testInsertDummies(){
IntStream.rangeClosed(1,10).forEach(i->{
Memo memo = Memo.builder().memoText("sample..."+i).build();
memoRepository.save(memo);
});
}
@Test
public void testSelect(){
Long mno = 10L;
Optional<Memo> result = memoRepository.findById(mno);
if(result.isPresent()){
Memo memo = result.get();
System.out.println(memo);
}
}
null ์ฒดํฌ๋ฅผ ํฌํจํ๊ธฐ ์ํด Optional ํ์ ์ผ๋ก ๋์จ๋ค.
getOne( )๊ณผ ๋น๊ตํ๋ ค๊ณ ํ์ง๋ง getOne์ด deprecated๋ผ์ ์ ์ธํ์๋ค.
@Test
public void testUpdate(){
Memo memo = Memo.builder().mno(10L).memoText("update...").build();
System.out.println(memoRepository.save(memo));
}
Hibernate:
select
memo0_.mno as mno1_0_0_,
memo0_.memo_text as memo_tex2_0_0_
from
tbl_memo memo0_
where
memo0_.mno=?
Hibernate:
update
tbl_memo
set
memo_text=?
where
mno=?
Hibernate:
select
memo0_.mno as mno1_0_0_,
memo0_.memo_text as memo_tex2_0_0_
from
tbl_memo memo0_
where
memo0_.mno=?
Hibernate:
insert
into
tbl_memo
(memo_text)
values
(?)
@Test
public void testDelete(){
Long mno = 11l;
memoRepository.deleteById(mno);
}
Hibernate:
select
memo0_.mno as mno1_0_0_,
memo0_.memo_text as memo_tex2_0_0_
from
tbl_memo memo0_
where
memo0_.mno=?
Hibernate:
delete
from
tbl_memo
where
mno=?
Hibernate:
select
memo0_.mno as mno1_0_0_,
memo0_.memo_text as memo_tex2_0_0_
from
tbl_memo memo0_
where
memo0_.mno=?
No class org.zerock.ex2.entity.Memo entity with id 10 exists!