2에서 바로 4로 넘어가고 Extract Interface기능을 이용해서 3을 구현할 수도 있다.
2,4 비교하면 알 수 있다.
파리미터 type이 int라서 bno를 통해서 알려줘야하고 (WHERE부분) id "select" 부분 등등
Data Transfer Object의 약자이다.
계층간의 데이터를 주고 받기 위해 사용되는 객체이다.
이렇게 board가 있다고하면 이렇게 BoardDto라는 객체를 통해서 값들을 가져와야한다.
값을 쓸때도 BoardDto를 통해서 board 테이블에 넣어줘야한다.
이렇게 DTO를 통해서 DB에 접근이 가능하고 DTO가 MVC를 가로지른다.
#{}으로 바뀌어 진것은 PreparedStatement로 바뀌지만
${}로 이루어진 것은 Statement로 바뀐다.
PreparedStatement
PreparedStatement은 SQL문에서 값(들어갈 값)으로 쓸 수 있는 것들을 값에 대해서만?
를 쓸 수 있다. board같은 것들은 ?처리가 불가하다.
#{}은 문자일 경우 알아서 ''를 붙여줘서 ?로 찍을 수 있지만
${}은 그냥 Statement라서 ''를 다 붙여줘야한다. 대신 Statement은 좀 더 유연하다는 장점이 있다. 위의 table네임에 board대신 ${tabelname}으로 쓸 수 있다. Statement은 해킹에 취약해서 내부적으로 만 써야한다.
XML내의 특수 문자(<,>,&,...)는 < >로 변환이 필요하다.
또는 특수 문자가 포함된 쿼리를 <![CDATA[
와 ]]>
로 감싼다.