1
128

spring jdbc 질문이 있습니다.


public void write(final String bName,final String bTitle,final String bContent) {

template.update(new PreparedStatementCreator() {

@Override

public PreparedStatement createPreparedStatement(Connection con) throws SQLException {

String query = "insert into mvc_board(bId,bName,bTitle,bContent,bHit,bGroup,bStep,bIndent) values(mvc_board_seq.nextval,?,?,?,0,mvc_board_seq.currval,0,0)";

PreparedStatement pstmt = con.prepareStatement(query);

pstmt.setString(1, bName);

pstmt.setString(2, bTitle);

pstmt.setString(3, bContent);

return pstmt;

}

});}

-----------------------------------------------------------------------------------------------------

public void reply(final String bId,final String bName,final String bTitle,final String bContent,final String bGroup,final String bStep,final String bIndent) {

replyShape(bGroup,bStep);

String query = "insert into mvc_board(bId,bName,bTitle,bContent,bGroup,bStep,bIndent) values(mvc_board_seq.nextval,?,?,?,?,?,?)";

template.update(query,new PreparedStatementSetter() {

@Override

public void setValues(PreparedStatement ps) throws SQLException {

ps.setString(1,bName);

ps.setString(2,bTitle);

ps.setString(3,bContent);

ps.setInt(4,Integer.parseInt(bGroup));

ps.setInt(5,Integer.parseInt(bStep)+1);

ps.setInt(6,Integer.parseInt(bIndent)+1);

}

});}

유튜브보면서 강의를 따라하는데 이해가 안가는 부분이 있습니다.

게시판 만드는 코드인데 write메소드같은 경우는 게시글 작성할때 사용하는 메소드이고 

익명클래스로 PreparedStatementCreator를 사용하는데


reply같은경우는 게시글에대한 답변 메소드이며 왜 PreparedStatementSetter를 사용하는지 이해가 안갑니다. insert를 사용해서 같을것만 같았는데 아니여서 많이 헷갈립니다. 또 한가지 왜 매개변수에 final을 주는건가요??

0
  • 답변 1

  • agramar
    85
    2021-01-21 21:23:19

    https://stackoverflow.com/questions/46418653/which-is-more-efficient-preparedstatementsetter-and-preparedstatementcreator-in


    template.update 가 오버로딩된 메소드로

    위의 예는 익명 클래스 메소드 오버라이딩으로 직접 PreparedStatement 를 생성하는 메소드를 이용하였고,

    아래의 예는 query 스트링을 받으면 PreparedStatement 를 생성해줘서 두번째 PreparedStatementSetter 에서 파라미터만 세팅해주는 메소드를 사용한것 같습니다.




  • 로그인을 하시면 답변을 등록할 수 있습니다.