109일차_SpringBoot

서창민·2023년 8월 17일
0

SpringBoot

목록 보기
13/13
post-thumbnail

23.08.17 109일차

SpringBoot

  • REST 컨트롤러

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단을 만들었다.

앞서 말한것과 같이 메소드의 맵핑경로를 통해 메소드를 실행한뒤 값을 반환해주는 구조이다.

  • innerJoin
## 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한 형식이다.

  • junit Test
## 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)맵핑 형식이며 단방향 맵핑이라고도한다.
보드의 값이 멤버로 들어갈수 있지만 멤버에서는 보드의 값을 조회는 어렵다,

profile
Back-end Developer Preparation Students

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

많은 것을 배웠습니다, 감사합니다.

답글 달기