여기서 사용해야 될 것은
@PathVariable("id") Integer id
이거 한 줄이다.
ProductMapper.xml
<select id="getSelectOne" parameterType="Map" resultType="Map">
SELECT
ID,
TITLE,
CONTENT,
ATTACH_FILE,
REGIST_USER_ID,
REGIST_DATE
FROM
PRODUCT
where
DELETE_YN = 'N'
<if test='id != null and id != ""'>
AND ID = #{ID}
</if>
</select>
다음과 같이 파일이 있다고 해보자
ProductMapper.java
package qa.api.download.product;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import qa.api.util.ResultMap;
import java.util.List;
import java.util.Map;
@Repository
@Mapper
public interface ProductMapper {
List<Map<String, Object>> getSelectList(Map<String, Object> param);
int getSelectCount();
List<Map<String, Object>> getSelectOne(Integer ID);
}
getSelectOne 에 Integer ID를 해주는 것이다.
ProductService.java
package qa.api.download.product;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.annotation.Resources;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.origin.SystemEnvironmentOrigin;
import org.springframework.stereotype.Service;
import qa.api.login.LoginMapper;
import qa.api.util.ResultMap;
@Service ("ProductService")
public class ProductService{
@Autowired
private ProductMapper productMapper;
public List<Map<String, Object>> getSelectList(Map<String, Object> param) throws Exception{
List<Map<String, Object>> result = productMapper.getSelectList(param);
return result;
}
public List<Map<String, Object>> getSelectOne(Integer ID) throws IOException {
return productMapper.getSelectOne(ID);
}
public Integer getSelectCount() throws Exception {
return productMapper.getSelectCount();
}
}
서비스에서도 마찬가지고 본인이 가져올 시퀀스
Integer ID를 꼭 함께 같이 넣어줘야된다.
그래야 불러올 때 ID를 타고
ID = #{ID}
에서 값을 불러온다.
ProductController.java
@GetMapping("/detail/{id}")
public ApiResponse getSelectOne(HttpServletRequest request, @RequestParam Map<String, Object> param,@PathVariable("id") Integer ID) throws Exception {
logger.debug("URL :: {}, PARAM :: {}", request.getRequestURL(), ID);// 이건 그냥 디버그 나오도록 하는거라서 신경 x
ApiResponse<Map<String, Object>> response = new ApiResponse<Map<String, Object>>();
Map<String, Object> result = new HashMap<String, Object>();
try { // getSelectOne(ID) 를 넣어줘야지 해당 시퀀스 ID의 데이터를 뽑아온다
List<Map<String, Object>> one = productService.getSelectOne(ID); // list는 메모리가 허용하는 한 계속 추가 할 수 있는 자료형 클래스인 SelectOne 선언
result.put("SUCCESS", true); // SUCCESS 값 호출하면 true을 던져줌 , 사실 얘는 지금은 필요 없어보이지만 대기
result.put("ONE", one); // SELECT_ONE 호출해야지 selectOne을 호출 함
response.setResultCode(HttpStatus.OK); // 사용 하는 이유는 아직 모르겠음 SUCCESS
response.setResultData(result); // ApiResponse에 result 넣어주면서 리액트로 넘어가는것 같음.
} catch(Exception e){ // 예외처리
logger.error(e.getMessage()); // 로그를 남기겠다
response.setResultCode(HttpStatus.BAD_REQUEST); // 그 로그는 HttpStatus 상태가 Bad 일때 호출하는 에러표현을 꺼내옴 ex) 401 / 500 / 404 같은애들
}
return response; // 이모든 데이터들은 response로 다시 리턴
}
여기서 가장 중요한 부분은
@PathVariable("id") Integer ID
이 줄이다.
그래야 ID값을 인식해서 가져와서 호출하기 때문이다.
다음과 같이 id 값을 인식하고 그 데이터를 가져올 수 있게 된다.
로그로도 확인해 볼 수 있다.
To be continue..
'Front' 카테고리의 다른 글
[Spring] 오류: 연산자 없음: numeric = character varying Error 해결방법 (0) | 2022.11.16 |
---|---|
[Spring] @RequestParam, @RequestBody 차이점 (0) | 2022.11.11 |
[Spring] 컨트롤러 try/catch문 유의해야 할점 (0) | 2022.10.28 |
[Spring] JSP파일 한글 깨짐 현상 한방에 해결하기 (0) | 2022.08.22 |
[Spring] org/eclipse/tm4e/ui/utils/ContentTypeHelper 에러 해결 (0) | 2022.08.21 |