The Debugging Chronicles : "코드의 미학"

[Spring] 템플릿 패턴 (DAO 고도화 DEVELOP DAO - 로직, 성능 개선, 최적화) 본문

Spring

[Spring] 템플릿 패턴 (DAO 고도화 DEVELOP DAO - 로직, 성능 개선, 최적화)

sweetseonah1004 2024. 10. 18. 14:48

 

개발자가 성능을 개선 시킬 때 ctrl+c,v하는 곳을 보는 것이 좋다

 

반복되는 로직을 캡슐화하는 것을 템플릿이라고 한다.

어려운(복잡한) 로직을 캡슐화한다.

 

재사용이 용이하다.

 

JDBC가 아주 대표적인 템플릿 적용하기 좋은 실습이다.

Util 클래스 또한 일종의 템플릿이라고 볼수 있다.

 

지금까지 배운 패턴들을 되짚어보면

MVC, 템플릿, 싱글톤, 팩토리, .... 가 있다.

 


템플릿을 적용해 보자

 

JDBC Template 클래스를 사용해보자!

 

스프링에서 제공해주고 있다. ===> 핵심!

 

1. JDBC Template 클래스에서 사용하게 될 dataSource 클래스의 객체를 등록

== 의존성이 있다.

== Phone이 Watch를 사용한다고 느껴져야한다.

 

Data source 클래스는

== conn(커넥션) 객체를 확보 및 해제

 

 

new 해줘야하니까 bean 등록

 

아래로 바뀌었다.

org.apache.commons.dbcp.BasicDataSource

 

dataSource는 가장 기초적인 소스이다.

 

setter 주입을 해야한다.

 

일반 값을 집어 넣을 예정이여서  ref=""가 아닌 value=""를 쓴다.

어떤 DBMS에 따라 string 값이 달라질 수 있다.

 


BoardDAO2 를 만든다.

 

기존  DAO 를 가지고 온다.

그리고 기존 DAO에 있었던 @Repository를 옮긴다

 

 

JDBCTemplate  JDBC역할을 할 예정

 

class 로 만들필요 없이 

applicationContext에 bean으로 객체를 만들어 주면 된다.

 

 

멤버 변수의 이름이므로 dataSource 라고 반드시 적어야한다.

 

<bean class="org.apache.commons.dbcp.BasicDataSource" id="ds" destroy-method="close">
      <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
      <property name="url" value="jdbc:mysql://localhost:3306/kim" />
      <property name="username" value="root" />
      <property name="password" value="1234" />
   </bean>
   <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
      <property name="dataSource" ref="ds" />
   </bean>

 

 

 

cud 는 update이다.

인자는 sql 

?의 값에 순서에 따라 값을 넣어 주면된다.

 

queryForObject는 리턴 타입이 T이다.

T는 사용자 지정 타입이다.

 

 

인자가 3개인데 (sql문, ?에 들어갈 인자,반환 타입)이다

?에 들어갈 인자가 몇개 인지 모르기때문에 Object배열을 넣어준다.

 

RowMapper<BoardDTO>는 DAO와 함께 만들어 주고 하단에 주로 적어준다.

 

BoardDTO 가 어떻게 생겻는지 하나하나 알려줘야하는데

output 과  input을 기억하기 어렵기 때문에 강제를 해주는 것이 좋다. 

 

" RowMapper<T>는 Spring Framework에서 제공하는 인터페이스입니다. 이는 JDBC를 사용하여 데이터베이스로부터 조회한 결과를 객체로 매핑해주는 기능을 제공합니다."

 

 

 

selectAll의 query도 동일

 

 


 

생성자 함수의 반대

 


      <dependency>
            <groupId>org.springframework</groupId>
           <artifactId>spring-jdbc</artifactId>
            <version>3.2.5.RELEASE</version>
         </dependency>
         <dependency>
            <groupId>commons-dbcp</groupId>
           <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
         </dependency>

 

간혹 문제안된 경우 pom.xml 에 추가해주면 가능해진다.