1. 라이브러리 추가
Spring JDBC
https://mvnrepository.com/artifact/org.springframework/spring-jdbc/5.1.9.RELEASE
Maven Repository: org.springframework » spring-jdbc » 5.1.9.RELEASE
org.springframework spring-jdbc 5.1.9.RELEASE // https://mvnrepository.com/artifact/org.springframework/spring-jdbc compile group: 'org.springframework', name: 'spring-jdbc', version: '5.1.9.RELEASE' // https://mvnrepository.com/artifact/org.springframewor
mvnrepository.com
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
의존 관계
Spring JDBC
-> DBCP -> OJDBC
프레임워크 버전명
properties 태그는 변수 선언과 같이 사용가능
(버전명 변경시 properties의 값만 수정해주면 나머지 ${org.springframework-version}도 따라서 변경 )
root-context.xml
2. 의존성 주입
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="kh"/>
<property name="password" value="kh"/>
<property name="initialSize" value="30"/>
</bean>
<!-- JDBC Template : Spring JDBC로 업그레이드 된 JDBC를 사용할 수 있는 클래스 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
DAO
Insert
SQL만 남기고 삭제
첫번째 인자값 : sql
두번째 인자 : 가변인자 (?에 들어갈 값)
끝
커밋 클로즈 트라이리소스 별도로 사용할 필요 없음
select
물음표를 채워서 sql을 날리는 경우 아래것
call-back 패턴
함수를 값으로 넘길 수 없기 때문에
인스턴스 안에 함수를 만들게하고 함수를 담은 인스턴스를 인자로 전달
인터페이스는 인스턴스화 불가능 (추상 클래스는 new 불가능?)
추상클래스 안의 추상 메서드가 정의되어 있지 않기 때문에
mapRow 라는 추상메서드 오버라이드 해주먼 new 가능
함수가 아닌 인스턴스로 콜백패턴 구현
mapRow 함수는 데이터베이스값이 어디로 들어가야 할지 알려줌
컬럼 이름에 맞춰서 자동으로 넣어주기 (mybatis는 가능, spring JDBC에서는 불가)
오브젝트로 반환시 일일히 다운캐스팅 해서 사용해야함
제너릭 지원
while rs.next 등 나머지는 Spring JDBC가 알아서
select 로 리스트 받기
jdbc.query
홈컨트롤러 동작 확인
boolean값 반환?
DB로부터 받을 값을 어떤 형식으로 받을 것인가?
홈컨트롤러에서 다른 예시
DTO 하나를 리턴
queryForObject
마이페이지 만들기 쿼리를 날리면서 , 물음표를 채우고, RowMapper
query
update