SpringBoot
JSP 같은 view를 별도로 만들지 않는 대신에 컨트롤러 메소드가 리턴한 데이터 자체를 클라이언트로 전달한다.
@RestController
public class BoardController {
@GetMapping("hello")
public String hello(String name) {
return "Hello : " + name;
}
hello를 맵핑해서 메소드를 실행하고 선언한 객체의 요소값을 반환해준다.
@GetMapping("/getBoardList")
public List<BoardVO> getBoardList(String name) {
List<BoardVO> li = new ArrayList<BoardVO>();
for(int i=1; i <=5; i++) {
BoardVO m = new BoardVO();
m.setSeq(i);
m.setTitle("RESTFUL 연습중" + i);
m.setWriter(name + i);
li.add(m);
}
return li;
}
배열값으로 된 리스트 형식의 값도 받아올 수 있다.
@GetMapping("/gugudan")
public List<String> gugudan(String dan) {
List<String> li = new ArrayList<String>();
for(int i=1; i < 10; i++) {
String str = dan + " X " + i + " = " + Integer.parseInt(dan)*i;
li.add(str);
}
return li;
}
간단하게 구구단 2단을 만들었다.
앞서 말한것과 같이 메소드의 맵핑경로를 통해 메소드를 실행한뒤 값을 반환해주는 구조이다.
## member0817
@Data
@Entity
public class Member0817 {
@Id
@Column(name="MEMBER_ID")
private String id;
private String password;
private String name;
private String role;
// mapperdBy 보유하는 쪽이 연관관계의 주인이 된다
@OneToMany(mappedBy="member", fetch=FetchType.EAGER)
private List<Board0817> boardList = new ArrayList<Board0817>();
}
## board0817
@Data
@Entity
public class Board0817 {
@Id @GeneratedValue
private Long seq;
private String title;
// private String writer;
private String content;
@Temporal(value=TemporalType.TIMESTAMP)
private Date createDate;
private Long cnt;
@ManyToOne // 나와 대상의 관계( 다 대 일)
@JoinColumn(name="MEMBER_ID") // 칼럼 이름, 형은 Member,
private Member0817 member;
}
두개의 테이블을 생성하고 , MEMBER_ID를 FK로 할당하여 두 테이블의 내용을 조회할 수 있다.
join의 형식은 board 테이블에 Member테이블이 innerjoin한 형식이다.
## insert
@Test
public void testManyToOneInsert() {
Member0817 m1 =new Member0817();
m1.setId("m1");
m1.setName("kim111");
m1.setPassword("kim111");
m1.setRole("MEMBER");
mp.save(m1);
Member0817 m2 =new Member0817();
m2.setId("m2");
m2.setName("lee111");
m2.setPassword("lee111");
m2.setRole("ADMIN");
mp.save(m2);
for(int i=1; i<=3; i++) {
Board0817 b = new Board0817();
b.setMember(m1);
b.setTitle("kim이 등록한게시글" + i);
b.setContent("kim이 등록한 게시글 내용" + i);
b.setCreateDate(new Date());
b.setCnt(1L);
bp.save(b);
}
for(int i=1; i<=4; i++) {
Board0817 b = new Board0817();
b.setMember(m2);
b.setTitle("lee가 등록한게시글" + i);
b.setContent("lee가 등록한 게시글 내용" + i);
b.setCreateDate(new Date());
b.setCnt(2L);
bp.save(b);
}
}
##BoardSelect
@Test
public void testboardSelect() {
Board0817 b = bp.findById(5L).get();
System.out.println("Board의 (seq) == "+b.getSeq());
System.out.println("Board의 (title) == "+b.getTitle());
System.out.println("Board의 (content) == "+b.getContent());
System.out.println("Member의 (name) == "+b.getMember().getName());
System.out.println("Member의 (role) == "+b.getMember().getRole());
}
@Test
public void testBoardSelectAll() {
List<Board0817> li = (List<Board0817>) bp.findAll();
for(Board0817 b : li) {
System.out.println("Board의 (seq) == "+b.getSeq());
System.out.println("Board의 (title) == "+b.getTitle());
System.out.println("Board의 (content) == "+b.getContent());
System.out.println("Member의 (name) == "+b.getMember().getName());
System.out.println("Member의 (role) == "+b.getMember().getRole());
System.out.println( );
}
}
Junit을 통해 테이블 레코드 삽입과 조회를 진행했다.
join이 되어있기에 두개의 테이블의 내용을 콘솔에서 확인할 수 있었다.
다 대 일 (ManyToOne)맵핑 형식이며 단방향 맵핑이라고도한다.
보드의 값이 멤버로 들어갈수 있지만 멤버에서는 보드의 값을 조회는 어렵다,
많은 것을 배웠습니다, 감사합니다.