JAVA를 잡아라!...
Spring Framework_DAO_JdbcTemplate 본문
[ JdbcTemplate을 활용한 DAO version upgrade ]
- 기존 DAO에 템플릿 패턴을 활용한 클래스를 구현해서 코드 가독성 증가
- JdbcTemplate : 템플릿 패턴을 활용한 클래스
- 반복되는 JDBC의 로직(DB연결 → SQL 생성 → 실행 → 결과 → DB연결해제)을 캡슐화한 클래스
- 템플릿 패턴 : 반복적인 로직, 복잡한(어려운) 로직을 캡슐화한 클래스
ex) 반복되는 JDBC의 로직(DB연결 → SQL 생성 → 실행 → 결과 → DB연결해제)
① JdbcTemplate으로 CRUD 수행 (+ RowMapper 클래스 작성)
[ SELECTALL ]
jdbcTemplate으로 selectAll
executeQuery() → selectAll의 output은 List → jdbcTemplate.query
jdbcTemplate.query(SQL구문_어떤 SQL을 실행시키고, new MemberRowMapper()_???)
[ SELECTONE ]
jdbcTemplate으로 selectOne
executeQuery() → selectOne의 output은 객체 → jdbcTemplate.queryForObject
jdbcTemplate.queryForObject(SQL구문_어떤 SQL을 실행시키고, 인자_배열 args, new MemberRowMapper()_???)
update와는 달리 인자를 배열로 줘야함 (무슨 객체를 줄지 모르니 Object로 하면됨! → Object[] args)
args → MemberDTO가 자동으로 매핑안됨 → RowMapper 사용
new → 매번 새 결과를 줘야하기 때문에 결과에 대한 것은 싱글톤이 되면 안됨, new 해도됨!
output이 객체이므로 그대로 return
[ INSERT, UPDATE, DELETE ]
jdbcTemplate으로 insert, update, delete
executeUpdate() → CUD의 output은 int → CUD는 모두 jdbcTemplate.update
jdbcTemplate.update(SQL구문_어떤 SQL을 실행시키고, ?_어떤인자를 줄지 알려줘야함)
[ RowMapper ]
어떻게 매핑해서 결과를 반환할지 모르니까 RowMapper 사용
개발자의 편의를 위해 RowMapper 인터페이스 사용 (RowMapper는 상속받아서 만들어야함)
② 위 로직을 수행하려면 JdbcTemplate이 DAO의 멤버변수여야함
③ 멤버변수로 두면 의존관계 형성 @Autowired (객체 new)
- @Autowired : 메모리에 로드가 돼있어야함 (언젠가 new JdbcTemplate()을 해야함)
- 객체 new 2가지 방법
- .xml <bean>
- @Component (@Service, @Repository)
- 현재 우리에게 JdbcTemplate 파일이 없어 @Comopnent 사용 불가
- 따라서 1번 방법 사용 : applicationContext.xml → 스프링 컨테이너가 객체 생성
기존 JDBCUtil에서 하던것을 xml에서 한번에 수행
// BasicDataSource 객체 new & setter주입 (DB정보_데이터베이스와의 연결에 필요한 기본 설정)
// DBCP (DBConnection Pool) : 수많은 연결들을 관리해주는 객체
// destroy-method="close" : 혹시 close 이슈있으면 지워주기 (성능 올려주는 애인데, PC가 못따라갈 수 있음)
<bean id-"dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/kimdb"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</bean>
// JdbcTemplate 객체 new & setter주입 (dataSource)
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
// JdbcTemplate 쓰려면 Setter주입을 해야줘야함 ↓ (커넥션을 관리해주는 dataSource객체)
<property name="dataSource" ref="dataSource" />
</bean>
④ Util 역할의 dataSource 필요
⑤ pom.xml에 jar 추가 (dependency 추가)
⑥ @Repository 변경 (기존DAO → 변경DAO)
↓
⑦ xxxImpl 멤버변수 타입 변경
'Spring' 카테고리의 다른 글
Spring Framework_Transaction (2) | 2024.03.04 |
---|---|
Spring Framework_ControllerVersion01_DispatcherServlet, HandlerMapping, Controller, ViewResolver (0) | 2024.03.04 |
Spring Framework_@어노테이션_AOP 설정 (0) | 2024.02.29 |
Spring Framework_@어노테이션_빈(Bean) 및 의존성(DI) 주입 (0) | 2024.02.29 |
Spring Framework_컨테이너 & 빈 관리 (0) | 2024.02.29 |