JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[토비의 스프링] 7.1 SQL과 DAO의 분리의 이유? #125

Closed taxol1203 closed 3 years ago

taxol1203 commented 3 years ago

7.1의 목표인, SQL을 Dao에서 분리하는 이유는
운영 중에 DB의 테이블 or 필드이름 or SQL문이 변경될 수 있는데, 그 때마다 Dao를 수정해서 다시 컴파일하는 것을 방지하기 위해서 입니다.

7.1의 마치고, xml을 통해 SQL을 분리 하였습니다.

<bean id="userDao" class="com.taxol.dao.UserDaoJdbc">
  <property name="dataSource" ref="dataSource"/>
  <property name="sqlService" ref="sqlService"/>
</bean>

<bean id="sqlService" class="com.taxol.domain.sqlservice.SimpleSqlService">
  <property name="sqlMap">
    <map>
      <entry key="userAdd" value="insert into users(id, name, password, level, login, recommend, email) values(?,?,?,?,?,?,?)" />
      <entry key="userGet" value="select * from users where id = ?" />
      <entry key="userGetAll" value="select * from users order by id" />
      <entry key="userDeleteAll" value="delete from users" />
      <entry key="userGetCount" value="select count(*) from users" />
      <entry key="userUpdate" value="update users set name = ?, password = ?, level = ?, login = ?, recommend = ? where id = ?" />
    </map>
  </property>
</bean>

7.1을 마치고 궁금한 것이, 이렇게 xml로 분리하였어도 실행 중에는 여전히 변경하기 어렵지 않을까라는 생각이 듭니다

kjsu0209 commented 3 years ago

SQL을 xml로 분리하더라도 분리된 xml을 수정할 경우 서버를 재시작해야 합니다. 이를 해결하기 위해 책 뒷편에는 인터페이스 분리를 통해 사용 중인 SQL을 수정하는 기능인 UpdatableSqlRegitry를 만들었습니다.