Play! Framework 2.2.0 x flexjson 3.1 을 이용한 insert

json을 가져와서 db에 insert 하는 것을 테스트 함.

우선 쿼리 작성.
mapper xml에 insert용 태그를 이용하여 쿼리를 작성한다. 나는 auto_increment의 id를 사용하고 있으며 insert가 성공한 뒤에 새로 생성된 id를 리턴받기 위해 selectKey 태그를 insert 태그 안에 사용. xml은 아래와 같이 작성한다.


 <![CDATA[
  INSERT INTO `dottegidb`.`user_main` 
  (
   `id`, 
   `user_name`, 
   `full_name`, 
   `email`, 
   `cellphone`, 
   `bio1`, 
   `bio2`, 
   `sex`, 
   `currency`, 
   `status`, 
   `item_count`, 
   `follows_count`, 
   `followedby_count`, 
   `private`, 
   `reg_time`, 
   `mod_time`
  ) VALUES 
  (
   NULL, 
   #{user_name}, 
   #{full_name}, 
   #{email}, 
   #{cellphone}, 
   #{bio1}, 
   #{bio2}, 
   #{sex}, 
   #{currency}, 
   #{status}, 
   #{item_count}, 
   #{follows_count}, 
   #{followedby_count}, 
   #{private_flag}, 
   #{reg_time}, 
   #{mod_time}
  )  
 ]]>
  
   SELECT LAST_INSERT_ID();
  
 

그리고 controller에 해당 쿼리를 수행할 메소드 추가

public static Result addUser() {
     
     SqlSession sqlSession = MyBatisFactory.getDefaultClient();
      
     JsonNode userJson = request().body().asJson();
     JSONSerializer serializer = new JSONSerializer();
     
     User user = new JSONDeserializer()
       .deserialize(userJson.toString(), User.class);
     
     sqlSession.insert("sample.addUser", user);
     
     Response response = new Response(String.valueOf(user.getId()));
     
     String jsonResult = serializer.prettyPrint(true).serialize(response);
     
  sqlSession.commit();
     
     return ok(jsonResult);
    }

마지막으로 routes 파일에 외부에서 접근할 때 사용할 url을 추가해 주면 완성, 당연히 insert 작업이니까 POST로 정의한다.

POST /users/self     controllers.Application.addUser()

restclient로 테스트한다.
HTTP Method를 POST로 바꿔주면 Body부분을 편집할 수 있는데 String Body로 선택하고 type은 application/json, encoding은 UTF-8으로 설정한다.


response가 제대로 만들어져 왔으니 DB에 잘 들어갔는지도 확인한다.


update, delete 도 해봐야지. 비슷하겠지.

댓글 없음:

댓글 쓰기