์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
๋ณด๋ค ์์ธํ๊ฒ ์ ๋ฆฌ : https://cdaosldk.tistory.com/167
์ดํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ๋ค๋ฃฐ ๋์ ๋ฌธ์ ์
1. ๋ฒ๊ฑฐ๋ก์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๋ง๋ค๊ธฐ ->
create table user (
id int not null,
name varchar(20) not null,
age int not null, address char(25),
salary int,
primary key(id)
);
์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฟผ๋ฆฌ ๋ง๋ค๊ธฐ ->
String userSelectQuery = "select name, age, salary from user u where u.name = "
String userName = request.getHeader("name");
String needToExecuteQuery = userSelectQuery + userName;
APP์์ jdbcAPI๋ฅผ ํตํ ์ฟผ๋ฆฌ์คํ ->
ResultSet result = jdbcAPI.executeQuery(needToExecuteQuery);
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์ ํ ๋นํ๊ธฐ ์ํด ์ง์ ๊ฐ์ฒด๋ ๋ง๋ค์ด์ผ ํ๋ค.
User user = new User();
user.setId(result.id);
user.setName(result.name);
user.setAge(result.age);
user.setSalary(result.salary);
2. SQL ์์กด์ ์ด๋ผ ๋ณ๊ฒฝ์ ์ทจ์ฝํ๋ค
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋ ์ถ๊ฐ ์, ๋ณ๊ฒฝํด์ผํ ๊ฒ๋ค:
APP, ์ฟผ๋ฆฌ๋ฌธ, ๊ฐ์ฒด ๊ฐ ํ ๋น
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฒ ๊ฐ ์ฒด๊ณ ๋ถ์ผ์น
๊ฐ์ฒด(APP) | ๋ฆด๋ ์ด์ (๋ฐ์ดํฐ๋ฒ ์ด์ค) | |
๋ฐ๋ | ๋ค์ํ ํฌ๊ธฐ, ์์ ๋ก์ด ์ปค์คํ ํ์ | ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ |
์๋ธ ํ์ | ์์ ๊ฐ๋ฅ, ๋คํ์ฑ ๊ตฌํ ์ฌ์ | ์์ ๋ถ๊ฐ๋ฅ, ๋คํ์ฑ ๊ตฌํ ๋ถ๊ฐ |
์๋ณ์ฑ | ๋ ํผ๋ฐ์ค(==), ์ธ์คํด์ค(equals) ๋์ผ์ฑ | primary key only |
๊ด๊ณ | ์๋ก ๊ฐ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํตํด ํํ, ๋ค๋๋ค ๊ด๊ณํ์ฑ ๊ฐ๋ฅ, ๋ฐฉํฅ์ด ์๋ค |
๋ค๋๋ค ๊ด๊ณํ์ฑ ๋ถ๊ฐ๋ฅํด ํ ์ด๋ธ๋ก ์ฒ๋ฆฌ, ์ธ๋ ํค๋ก ๋ฐ๋ก ์กฐํ(๋ฐฉํฅ์์) |
๋ฐ์ดํฐ ๋ค๋น๊ฒ์ด์ | ๋ง์๋๋ก ๋ ํผ๋ฐ์ค ๋ฐ๋ผ ์ด๋ ๊ฐ๋ฅ | ๋นํจ์จ์ ์ธ JOIN, ์ฑ๋ฅ ์ ํ ๋ฐ์ |
*๊ด๊ณ
class Member {
private int memberId;
private String mamberName;
private Team team;
}
class Team {
private int teamId;
private String teamName;
}
Member member = new Member();
Team team = new Team();
member.setTeam(team);
member.team(); //๊ฐ๋ฅ
team.member(); // ๋ถ๊ฐ๋ฅ
// ๋ฉค๋ฒ ํด๋์ค์ ํ ํด๋์ค๊ฐ ์์๋, ๋ฉค๋ฒ ํด๋์ค ์์๋ ํ ๊ฐ์ฒด๊ฐ ์๋ค.
// ๊ฐ ํด๋์ค๋ฅผ ์ธ์คํด์คํ(๋ณ์์ ํด๋์ค ์์ฑ์ ํ ๋น) ํ์๋, ๋ณ์ member์ ์์ฑ team์ ํ ๋นํ ์ ์๋ค.
// ๋ณ์ member๋ฅผ ํตํด ๋ณ์ team(ํด๋์ค team)์ ํธ์ถํ ์ ์์ง๋ง, ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅ
// -> member๋ฅผ ํตํด team ์์ฑ์ ์กฐํํ ์ ์๋ค.
// + ๊ฐ์๋ณด๊ณ ์ดํด ํ์ฅํ ํ ์ ๊ธฐ
ORM : ๊ฐ์ฒด ๊ด๊ณ ๋งคํ ๊ธฐ์
JPA! : ์๋ฐ ORM ๊ธฐ์ ์ ๋ํ ํ์ค ๋ช ์ธ (JAVA Persistence API)
JPA๋ ๊ธฐ์กด์ ๋ฐ๋ณต ์ฝ๋๋ ๋ฌผ๋ก ์ด๊ณ , ๊ธฐ๋ณธ์ ์ธ SQL๋ JPA๊ฐ ์ง์ ๋ง๋ค์ด์ ์คํํด์ค๋ค.
JPA๋ฅผ ์ฌ์ฉํ๋ฉด, SQL๊ณผ ๋ฐ์ดํฐ ์ค์ฌ์ ์ค๊ณ์์ ๊ฐ์ฒด ์ค์ฌ์ ์ค๊ณ๋ก ํจ๋ฌ๋ค์์ ์ ํ์ ํ ์ ์๋ค.
JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ผ ์ ์๋ค.
JPA ์ํ
@Entity // DB ํ
์ด๋ธ ์ญํ ์ ํฉ๋๋ค.
public class User {
// ID๊ฐ ์๋์ผ๋ก ์์ฑ ๋ฐ ์ฆ๊ฐํฉ๋๋ค.
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// nullable: null ํ์ฉ ์ฌ๋ถ
// unique: ์ค๋ณต ํ์ฉ ์ฌ๋ถ (false ์ผ๋ ์ค๋ณต ํ์ฉ)
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRoleEnum role;
@Column(unique = true)
private Long kakaoId;
}
DB ์ฐ๊ด๊ด๊ณ ์์
create table member(
id bigint auto_increment comment '๋ฒํธ',
customer_name varchar(100) comment '๊ณ ๊ฐ ์ด๋ฆ',
)
insert into member(CUSTOMER_NAME) values ('์ผ์์ด');
insert into member(CUSTOMER_NAME) values ('๋จน๊นจ๋น');
create table food(
id bigint auto_increment comment '๋ฒํธ',
name varchar(100) comment '๋ฉ๋ด',
price bigint comment '๊ฐ๊ฒฉ'
)
insert into FOOD(name, price) values ( 'ํ๋ผ์ด๋', 10000 );
insert into FOOD(name, price) values ( '์๋
', 12000 );
insert into FOOD(name, price) values ( '๋ฐ๋ฐ', 13000 );
insert into FOOD(name, price) values ( '๊ณ ๊ตฌ๋งํผ์', 9000 );
insert into FOOD(name, price) values ( '์๋ณด์นด๋ํผ์', 110000 );
*๊ณ ๊ฐ์ ์์์ฃผ๋ฌธ
1) ๊ณ ๊ฐํ ์ด๋ธ์ ์ถ๊ฐ
-> ์์ ์ฃผ๋ฌธ์๋ง๋ค ๊ณ ๊ฐ ํ ์ด๋ธ์ ์ค๋ณต๋ ๊ณ ๊ฐ์ ๋ณด๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค.
2) ์์ํ ์ด๋ธ์ ์ถ๊ฐ
-> ๋์ผ ์์ ์ฃผ๋ฌธ์ด ์ค๋ณต์ผ๋ก ์๋ก์ด ๊ฐ์ด ๋ค์ด๊ฐ ์ ์๋ค.
3) ์ฃผ๋ฌธ์ ์ํ ์ค๋ํ ์ด๋ธ์ด ์์ด์ผ ํ๋ค :
๋ฉค๋ฒํ ์ด๋ธ๊ณผ ์์ํ ์ด๋ธ์ id๋ฅผ ๊ฐ์ ธ์ ์ฃผ๋ฌธํ ์ด๋ธ์ ํ์ ์ถ๊ฐํ์ฌ ์ฃผ๋ฌธ์ ๋ณด์ ์ฅ
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์๋ จ : Project MySelectShop (3) (0) | 2022.12.15 |
---|---|
์คํ๋ง ์๋ จ : Project MySelectShop (2) (0) | 2022.12.15 |
์คํ๋ง ์๋ จ : Project MySelectShop (1) (0) | 2022.12.13 |
T ์์นด๋ฐ๋ฏธ : JPA ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด (2) (1) | 2022.12.13 |
T ์์นด๋ฐ๋ฏธ : JPA ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด (1) (0) | 2022.12.13 |