[TIL] 23.04.17 스프링
mybatis 복습
프로젝트 생성 및 세팅
MyBatis Framework를 추가한다.
mysql, spring boot devtools, spring web도 추가
tomcat embed와 spring boot starter web을 pom.xml에 추가
src/main/java에 패키지 세개 생성 data.controller, data.dto, data.mapper
application.yaml 파일 설정한다.
resource폴더에 mapper폴더만들기 그안에 MarketSql.xml만들기
메인에 @ComponentScan({"data.*"})을 붙인다.
@MapperScan({"data.*"})도 적는다.
yaml에 mybatis 설정을 한다.
#mybatis설정
mybatis:
type-aliases-package: data.dto, data.mapper
mapper-locations:
- /mapper/**/*.xml
dto에 @Alias를 준다
MarketMapperInter에 @Mapper를 준다.
file 업로드시에는 post
dao가 없기 때문에 sql적는 xml에 id를 정확히 적어줘야한다.
xml의 id는 interface의 메소드 명과 일치한다.
파일 업로드
컨트롤러에서
@PostMapping("/market/insert")
public String insert(@ModelAttribute MarketDto dto, @RequestParam MultipartFile photo, HttpSession session) {
//업로드 경로구하기
String path = session.getServletContext().getRealPath("/upload");
System.out.println(path);
if(photo.getOriginalFilename().equals("")) {
dto.setPhotoname("null");
} else {
//사진명 구해서넣기
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String photoname = "f_" + sdf.format(new Date()) + photo.getOriginalFilename();
dto.setPhotoname(photoname);
// 실제 업로드는 아래에서
try {
photo.transferTo(new File(path +"\\"+photoname));
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mapper.insertMarket(dto);
return "marketlist";
}
HttpSession은 getRealPath를 얻기 위해서만 쓰인다
form 에서 photo는 type을 file로 했기때문에 @RequestParam MultipartFile photo로 따로 받는다.
사진명을 구해서 없으면(입력안받으면)null로 사진명을 설정하고 아닌경우에 시간정보를 photoname으로 넣어주고 실제 파일을 upload라는 폴더에 업로드한다.
spring boot devtool은 live reload기능이 있어 정적파일 수정시 서버 재시작 없이 바로 적용이 된다.