HeroVO 객체 생성
domain 패키지를 추가하고 HeroVO 객체를 생성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.eastflag.fullstack.domain; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; @JsonInclude(JsonInclude.Include.NON_NULL) @Data public class HeroVO { private Integer hero_id; private String name; private String email; private String sex; private String country; private String address; private String power; private String created; } |
@JsonInclude(JsonInclude.Include.NON_NULL) 의 의미는 json을 만들때 property가 null이면 만들지 말라는 의미이다.
Mapper 생성
persistence 패키지를 생성하고 HeroMapper 인터페이스를 생성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.eastflag.fullstack.persistence; import com.eastflag.fullstack.domain.HeroVO; import org.apache.ibatis.annotations.*; import java.util.List; @Mapper public interface HeroMapper { @Insert({"<script>", "INSERT INTO hero(name, email, sex, country, address, power, created)", "VALUES(#{name}, #{email}, #{sex}, #{country}, #{address}, #{power}, now())", "</script>"}) int insertHero(HeroVO hero); } |
xml 구문없이 자바에서 MyBatis 구문을 사용하기 위해서는 <script> 태그를 사용하면 된다. @Mapper 어노테이션을 사용하게 되면 스프링이 구동시 해당 인터페이스가 인스턴스로 스프링에 등록되게 된다. 문법적으로 인터페이스가 인스턴스를 생성하는게 맞지 않지만 내부적으로 익명클래스 인스턴스로 생성이 된다고 이해하면되겠다.
HeroController 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com.eastflag.fullstack.controller; import com.eastflag.fullstack.domain.HeroVO; import com.eastflag.fullstack.domain.ResultVO; import com.eastflag.fullstack.persistence.HeroMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api") public class HeroController { @Autowired private HeroMapper heroMapper; @PostMapping("/hero") public ResultVO addHero(@RequestBody HeroVO hero) { int result = heroMapper.insertHero(hero); if ( result > 0) { return new ResultVO(0, "success"); } else { return new ResultVO(100, "fail"); } } } |
hero 테이블을 생성할것이므로 post 매핑을 사용하였고, RestController 바로 아래에 /api가 매핑되어있으므로 전체 매핑 유알엘은 /api/hero 이다. 요청은 Json으로 받고 결과는 ResultVO 타입의 json을 리턴한다. 다시 요약하자면, REST API 규격은 유알엘이 /api/hero 이고 메서드는 post 이며 json으로 데이터를 받아서 json을 리턴한다.
프로젝트 구조는 아래와 같다.
postman 테스트