스프링 부트 (8)

반응형

 

service 생성

 

service을 class로 만들 것이기에 serviceImpl을 만들지 않아도 됨.

이 경우 service는 mapper에 값을 전달함.

 

 

BdService.java

package com.th.hmmerorng.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.th.hmmerorng.mapper.BdMapper;
import com.th.hmmerorng.vo.BdVO;

@Service //비지닉스 로직을 보통 담음 (Front로 넘어 가는 중)
public class BdService {

	@Autowired //서비스는 맵퍼를 부름 (프레임워크에서 그렇게 설계함. 관례적으로 좋음)
	private BdMapper bdMapper;
	
	public List<BdVO> getBdList() {
		return bdMapper.getBdList();
	}
	
	public BdVO getBd(BdVO bdVO) {
		return bdMapper.getBd(bdVO);
	}
	
	public int insBd(BdVO bdVO) {
		return bdMapper.insBd(bdVO);
	}
	
	public int upBd(BdVO bdVO) {
		return bdMapper.upBd(bdVO);
	}
	
	public int delBd(BdVO bdVO) {
		return bdMapper.delBd(bdVO);
	}
}

 

 

 

controller 생성

 

 

BdController.java

package com.th.hmmerorng.controller;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.th.hmmerorng.service.BdService;
import com.th.hmmerorng.vo.BdVO;

@RestController //@Controller + @ResponseBody
@RequestMapping("/api") //접수 창구 이름을 만들어야 함(규모가 크면 계층적으로)
public class BdController {
	
	@Autowired
	private BdService bdService;
	
	@GetMapping("/bds")
	public List<BdVO> getBdList() {
		return bdService.getBdList();
	}
	
	@GetMapping("/bds/{bdNum}") //{} 안에 있는 걸 받기 위해선 @PathVariable 사용
	public BdVO getBd(@PathVariable int bdNum) { //@PathVariable의 이름이 {}안에 있는 이름과 같아야 함
		BdVO bdVO = new BdVO();
		bdVO.setBdNum(bdNum);
		
		return bdService.getBd(bdVO);
	}
	
	@PostMapping("/bds") //파일 첨부면 @RequestBody 사용 x
	public String insBd(@RequestBody BdVO bdVO) {
		int cnt = bdService.insBd(bdVO);
		
		if(cnt == 0) {
			return "NG";
		}
		return "OK";
	}
	
	@PutMapping("/bds")
	public String upBd(@RequestBody BdVO bdVO) {
		int cnt = bdService.upBd(bdVO);
		
		if(cnt == 0) {
			return "NG";
		}
		return "OK";
	}
	
	@DeleteMapping("/bds/{bdNum}")
	public String delBd(@PathVariable int bdNum) {
		BdVO bdVO = new BdVO();
		bdVO.setBdNum(bdNum);
		
		int cnt = bdService.delBd(bdVO);
		
		if(cnt == 0) {
			return "NG";
		}
		return "OK";
	}
}

 

 

 

+ 위의 파일을 만든 후 하단의 링크에서 테스트 가능

(sts4에서 서버를 실행해야 함!!)

 

chrome-extension://eipdnjedkpcnlmmdfdkgfpljanehloah/workspace

 

크롬의 확장 프로그램을 설치해야함.

 

 

테스트 화면

 

 

반응형
반응형

 

테스트 실행 : 한 개의 데이터만 집어 넣기

 

  • 경로 위치

테스트 용이기에 src/test/java에 생성함

 

 

 

BdMapperTest.java

@Test, @DisplayName 어노테이션 사용

package com.th.hmmerorng.mapper;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.th.hmmerorng.vo.BdVO;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest //boot의 편리성
public class BdMapperTest {
	
	@Autowired
	private BdMapper bdMapper;
	
	//테이블에 데이터가 없으니, insert 먼저 테스트
	@Test //서버 실행 없이 Junit(테스트 프레임워크)으로 구동 가능
	@DisplayName("입력 테스트")
	void insTest() {
		BdVO bdVO = new BdVO();
		bdVO.setBdTitle("테스트용");
		bdVO.setBdCont("컴퍼니 회사");
		bdVO.setBdFurl("http://pimg.daara.co.kr/kidd/photo/2016/12/30/thumbs/thumb_520390_1483079064_25.jpg");
		
		int cnt = bdMapper.insBd(bdVO);
		
		assertEquals(1, cnt); //cnt값이 1이 나오면 성공(pass), 아님 실패
	}
}

 

 

 

  • 실행 방법

 

1. 오른쪽 마우스 클릭

 

 

2

 

2. Run As > JUnit Test 클릭

 

 

성공시 화면

 

 

전체 실행 화면

 

 

 

여러 개의 데이터만 집어 넣기

 

 

BdMapperTest.java

기존의 파일에 메소드 추가

package com.th.hmmerorng.mapper;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.Iterator;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.th.hmmerorng.vo.BdVO;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest //boot의 편리성
public class BdMapperTest {
	
	@Autowired
	private BdMapper bdMapper;
	
	//여러개 데이터 넣기
	@Test //서버 실행 없이 Junit(테스트 프레임워크)으로 구동 가능
	@DisplayName("입력 테스트2")
	void insMultiTest() {
		BdVO bdVO;
		int cnt = 0;
		
		for(int i=1; i<=23; i++) {
			bdVO = new BdVO();
			bdVO.setBdTitle("테스트용 두번째");
			bdVO.setBdCont("컴퍼니 회사");
			bdVO.setBdFurl("http://pimg.daara.co.kr/kidd/photo/2016/12/30/thumbs/thumb_520390_1483079064_25.jpg");
			cnt += bdMapper.insBd(bdVO);
		}
		
		assertEquals(23, cnt); //cnt값이 1이 나오면 성공(pass), 아님 실패
	}
}

 

결과 화면1

 

 

 

값 List로 가져오기

 

 

@Disabled
실행 시 원래 다 실행하기에 문제가 있을 수 있음
그렇기에 다 사용한 메소드의 상단에 작성해야 함.

 

 

BdMapperTest.java

기존의 파일에 메소드 추가

@Test
@DisplayName("getList 테스트")
void getListTest() {
    List<BdVO> bdList = bdMapper.getBdList();

    log.debug("확실히 확인하기 위해 찍음 : {}", bdList);

    assertEquals(124, bdList.size()); //추가된 데이터 갯수가 124개라 이렇게 씀
}

 

결과 화면2

 

 

 

값 1개 가져오기

 


BdMapperTest.java

기존의 파일에 메소드 추가

@Test
@DisplayName("bdVO 1개 가져오기")
void getBdTest() {
    BdVO bdVO = new BdVO();
    bdVO.setBdNum(78);
    BdVO testVO = bdMapper.getBd(bdVO);
    log.debug("확실히 확인 {}", testVO);
    assertEquals("테스트용 두번째", testVO.getBdTitle()); //78번째 데이터 제목 넣어서 확인
}

 

결과 화면3

 

 

 

데이터 수정하기

 


BdMapperTest.java

기존의 파일에 메소드 추가

@Test
@DisplayName("수정 테스트")
void upBdTest() {

    BdVO bdVO = new BdVO();
    bdVO.setBdNum(30); //이미 존재하는 번호를 1개 줘야함
    bdVO.setBdTitle("수정 완료");
    bdVO.setBdCont("수정 테스트 진행을 완료했습니다.");

    int cnt = bdMapper.upBd(bdVO);
    assertEquals(1, cnt);
}

 

결과 화면4-1

 

결과 화면4-2

 

 

 

최종 BdMapperTest.java 파일

package com.th.hmmerorng.mapper;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.Iterator;
import java.util.List;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.th.hmmerorng.vo.BdVO;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest //boot의 편리성
public class BdMapperTest {
	
	@Autowired
	private BdMapper bdMapper;
	
	//테이블에 데이터가 없으니, insert 먼저 테스트
	@Test //서버 실행 없이 Junit(테스트 프레임워크)으로 구동 가능
	@Disabled
	@DisplayName("입력 테스트")
	void insTest() {
		BdVO bdVO = new BdVO();
		bdVO.setBdTitle("테스트용");
		bdVO.setBdCont("컴퍼니 회사");
		bdVO.setBdFurl("http://pimg.daara.co.kr/kidd/photo/2016/12/30/thumbs/thumb_520390_1483079064_25.jpg");
		
		int cnt = bdMapper.insBd(bdVO);
		
		assertEquals(1, cnt); //cnt값이 1이 나오면 성공(pass), 아님 실패
	}
	
	//여러개 데이터 넣기
	@Test //서버 실행 없이 Junit(테스트 프레임워크)으로 구동 가능
	@Disabled
	@DisplayName("입력 테스트2")
	void insMultiTest() {
		BdVO bdVO;
		int cnt = 0;
		
		for(int i=1; i<=23; i++) {
			bdVO = new BdVO();
			bdVO.setBdTitle("테스트용 두번째");
			bdVO.setBdCont("컴퍼니 회사" + i);
			bdVO.setBdFurl("http://pimg.daara.co.kr/kidd/photo/2016/12/30/thumbs/thumb_520390_1483079064_25.jpg");
			cnt += bdMapper.insBd(bdVO);
		}
		
		assertEquals(23, cnt); //cnt값이 1이 나오면 성공(pass), 아님 실패
	}
	
	@Test
	@Disabled
	@DisplayName("getList 테스트")
	void getListTest() {
		List<BdVO> bdList = bdMapper.getBdList();
		
		log.debug("확실히 확인하기 위해 찍음 : {}", bdList);
		
		assertEquals(124, bdList.size()); //추가된 데이터 갯수가 124개라 이렇게 씀
	}
	
	@Test
	@Disabled
	@DisplayName("bdVO 1개 가져오기")
	void getBdTest() {
		BdVO bdVO = new BdVO();
		bdVO.setBdNum(78);
		BdVO testVO = bdMapper.getBd(bdVO);
		log.debug("확실히 확인 {}", testVO);
		assertEquals("테스트용 두번째", testVO.getBdTitle()); //78번째 데이터 제목 넣어서 확인
	}
	
	@Test
	@DisplayName("수정 테스트")
	void upBdTest() {
		
		BdVO bdVO = new BdVO();
		bdVO.setBdNum(30); //이미 존재하는 번호를 1개 줘야함
		bdVO.setBdTitle("수정 완료");
		bdVO.setBdCont("수정 테스트 진행을 완료했습니다.");
		
		int cnt = bdMapper.upBd(bdVO);
		assertEquals(1, cnt);
	}
	
}

 

 

반응형
반응형

 

프로젝트 진행 시 설정

 

 

  • Dependencies로 추가

방법은 lombok 파일 설정의 7, 8번 참조

 

https://forest-of-coding.tistory.com/271

 

[스프링 부트] lombok 파일, 로그 레벨, jsp 파일 사용을 위한 설정

lombok 파일 설정  파일더보기   1. 해당의 파일을 sts4 설치된 폴더로 이동 > 위의 경로에 cmd 입력   2. 아래의 코드 입력   3. Specify location 클릭   4. sts4 폴더 클릭 > Select > Install / Update 클릭

forest-of-coding.tistory.com

 

추가한 Dependencies

 

 

 

  • application.properties 설정

 

추가 및 설정해야 하는 것

 

1. db/mybatis 설정 내용 변경 : 자신의 것으로 변경

2. package 명 변경 : 별명들을 변경할 패키지 명으로 기입

3. mybatis/mapper : src/main/resources 폴더 아래에 내용과 맞는 폴더를 생성

 

 

spring.application.name=merorng-1
server.port=8004

# view resolver 접두어, 접미사 설정
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

# 로그 레벨 설정
logging.level.com.th.hmmerong=debug

# db/mybatis 설정
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=pc10
spring.datasource.password=java

# 두 개는 필수
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.jdbc-type-for-null=varchar

mybatis.type-aliases-package=com.th.hmmerorng.vo
mybatis.mapper-locations=classpath:mybatis/mapper/*-Mapper.xml

 

 

+ db 유저명 생성 안 했을 시

더보기
-- 유저명 java 암호 oracle 생성
create user pc10 identified by java;

-- 유저명 java에 필요한 권한 주깅
grant connect,resource, dba to pc10;

commit;

  

pc10은 유저명, java는 비밀번호

 

 

 

프로젝트 생성 시 기본적인 순서

 

1. DB테이블 생성

 

2. JAVA VO 생성

: 적절한 정도에서 테이블과 다른 값 추가해도 됨

 

3. Mapper(IF) + SQL => DAO

 

4. 테스트를 통해서 sql문 검증

 

5. service / serviceImpl

: service를 class로 만들 수 있음 => 이 경우 serviceImpl을 만들지 않음

 

6. controller 생성

= 접수 창구

=> 요즘은 restController를 사용

 

 

 

테이블 생성 및 시퀀스 생성

 

 

  • 테이블 생성

테이블 정보

 

 

 

  •  시퀀스 생성 및 테스트

- 시퀀스 생성

CREATE SEQUENCE TH_SEQ;

 

 

- 시퀀스 테스트 (처음 한 번은 해야 테스트 가능!!)

SELECT TH_SEQ.NEXTVAL FROM DUAL;
SELECT TH_SEQ.CURRVAL FROM DUAL;

 

결과 화면1

 

 

 

생성 파일 위치

 

 

 

VO 생성

 

 

BdVO.java

package com.th.hmmerorng.vo;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@ToString //값을 하나씩 찍기 힘들어서 디버깅 할때 쓰는 용으로 사용
@Setter
@Getter
public class BdVO {
	private int bdNum;
	private String bdTitle;
	private String bdCont;
	private String bdFurl;
}

 

 

 

Mapper 생성

 

 

BdMapper.java

package com.th.hmmerorng.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.th.hmmerorng.vo.BdVO;

@Mapper //명시적 표현, 보통 마커 어노테이션이라 부름
public interface BdMapper {
	//Mapper 만들 시 기본 5개 생성해야함
	
	//리스트 여러개
	List<BdVO> getBdList();
	
	//1개
	BdVO getBd(BdVO bdVO);
	
	
	//insert + update + delete의 기본 파라미터는 int
	//insert + update + delete => Mutation 메소드
	
	//insert
	int insBd(BdVO bdVO);
	
	//update
	int upBd(BdVO bdVO);
	
	//delete
	int delBd(BdVO bdVO);

}

 

 

 

mybatis 생성

 

 

+생성되지 않을 시

더보기
1

 

1. Help > Eclipse Marketplace 클릭 

 

 

2

 

2. mybatis 검색 > 1.2.5 Install 

 

 

3

 

3. I accept 클릭 > Finish 클릭 

 

 

4

 

4. Select All 클릭 > Trust Selected 클릭

 

 

5

 

5. Select All 클릭 > Trust Selected 클릭 

 

 

6

 

6. Restart Now 클릭 

 

  

 

오른쪽 마우스 클릭 > New > Other 로 생성

 

 

 

  • 생성 순서

1. namespace 변경

<mapper namespace="com.th.hmmerorng.mapper.BdMapper">

 

 

2. List SQL

<select id="getBdList" resultType="BdVO">
	SELECT * FROM TB_BOARD
</select>

 

 

3. get SQL

<select id="getBd" parameterType="BdVO" resultType="BdVO">
	SELECT * 
		FROM TB_BOARD
	WHERE BD_NUM = #{bdNum}
</select>

 

 

4. insert, update, delete SQL

<insert id="insBd" parameterType="BdVO">
	INSERT INTO tb_board
	(
		bd_num,
		bd_title,
		bd_cont,
		bd_furl
	)
	VALUES
	(
		th_seq.nextval,
		#{bdTitle},
		#{bdCont},
		#{bdFurl}
	)
</insert>

<update id="upBd" parameterType="BdVO">
	UPDATE tb_board
	SET
		bd_title = #{bdTitle},
		bd_cont = #{bdCont},
		bd_furl = #{bdFurl}
	WHERE 
		bd_num = #{bdNum}
</update>

<delete id="delBd" parameterType="BdVO">
	DELETE * FROM tb_board
	WHERE bd_num = #{bdNum}
</delete>

 

 

 

- 최종 xml

bd-Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.th.hmmerorng.mapper.BdMapper">

<select id="getBdList" resultType="BdVO">
	SELECT * FROM TB_BOARD
</select>

<select id="getBd" parameterType="BdVO" resultType="BdVO">
	SELECT * 
		FROM TB_BOARD
	WHERE BD_NUM = #{bdNum}
</select>

<insert id="insBd" parameterType="BdVO">
	INSERT INTO tb_board
	(
		bd_num,
		bd_title,
		bd_cont,
		bd_furl
	)
	VALUES
	(
		th_seq.nextval,
		#{bdTitle},
		#{bdCont},
		#{bdFurl}
	)
</insert>

<update id="upBd" parameterType="BdVO">
	UPDATE tb_board
	SET
		bd_title = #{bdTitle},
		bd_cont = #{bdCont},
		bd_furl = #{bdFurl}
	WHERE 
		bd_num = #{bdNum}
</update>

<delete id="delBd" parameterType="BdVO">
	DELETE FROM tb_board
	WHERE bd_num = #{bdNum}
</delete>

</mapper>

 

 

실행 해서 오류가 뜨는지 확인 필수!!

 

 

 

+그냥 빨간 줄이 뜰 때

 

더보기
1

 

 1. Window > Preferences 클릭

 

 

2

 

2. mav 검색 > Maven 클릭 > Download Artifact Javadoc 클릭 > Apply and Close 클릭 

 

 

 

 

반응형
1 2 3