[Spring 3.0] 스프링JDBC
by 무작정 개발반응형
2022.03.25(64일 차)
이번에는 스프링 JDBC에 대해 정리할 것이다. 이전 글에서는 Java의 JDBC를 사용하였는데
JDBC -> 스프링JDBC -> Mybatis로 갈수록 코드가 점점 줄어들어서 편해진다. 그리고 iBatis 다음 버전이 MyBatis이다.
ORM은 iBatis -> MyBatis -> JPA 순으로 생겼는데 나중에 JPA에 대해 학습하고 정리할 예정이다.
스프링 JDBC
1. Spring JDBC lib 추가하기 - (pom.xml에 추가)
- 이전 글에서 사용했던 Maven Respository 사용 / Spring JDBC라고 검색하면 나온다.
★ 여기서 주의할 점이 있다. 현재 스프링은 3.0 버전을 쓰고 있는데 Spring JDBC만 5.3.17버전을 쓰면
호환성 문제가 생길 수 있다. 그래서 하단의 소스 처럼 작성해준다.
이렇게 하면 현재 사용하는 스프링 버전에 맞게 Spring JDBC 버전이 맞춰진다.
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.framework.version}</version>
</dependency>
4. app-context.xml 수정
- 이전에 만들었던 app-context.xml에 하단의 소스 추가
- 스프링의 JDBC Template에는 JdbcTemplate와 namedParameterJdbcTemplate 2가지가 있다.
- 주로 jdbcTemplate를 사용한다.
<!-- 제어의 역전 -->
<bean id="customDAO2" class="com.exe.springJdbcTemplate.CustomDAO2">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
<property name="namedJdbcTemplate" ref="namedParameterJdbcTemplate"/>
</bean>
<!-- 스프링의 JDBC (JdbcTemplate) -->
<!-- 여기선 하단 dataSource를 생성자에 넣어줌 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<!-- 스프링의 JDBC 템플릿이 한개 더있는데 잘 안쓰긴 함 -->
<!-- NamedParameterJdbcTemplate -->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
3. CustomDAO2 클래스 생성
- 이전 글에서 만들었던 CustomDAO를 복사해서 이름만 2로 바꿔준다.
package com.exe.springJdbcTemplate;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
//Spring의 JDBC
public class CustomDAO2 {
//JdbcTemplate
private JdbcTemplate jdbcTemplate;
//의존성 주입 - 이 메서드가 app-context.xml로 가서 프로퍼티 네임에 set이 빼고 들어감
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//------------------------------------------------------------------
//NamedParameterJdbcTemplate - (insert만 이 템플릿으로 할 것이다,)
private NamedParameterJdbcTemplate namedJdbcTemplate;
//의존성 주입 - 이 메서드가 app-context.xml로 가서 프로퍼티 네임에 set이 빼고 들어감
public void setNamedJdbcTemplate(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
this.namedJdbcTemplate = namedParameterJdbcTemplate;
}
Connection conn = null;
//데이터 저장
public void insertData(CustomDTO dto) {
StringBuilder sql = new StringBuilder();
//JdbcTemplate사용
sql.append("insert into custom (id,name,age) values (?,?,?)");
jdbcTemplate.update(sql.toString(),dto.getId(),dto.getName(),dto.getAge());
//-----------------------------------------------------------------------------------
/*
* //NamedParameterJdbcTemplate사용
* sql.append("insert into custom (id,name,age) values (:id,:name,:age)");
*
* //애는 JdbcTemplate과 다르게 바로못쓴다. 객체가 있다 (모델 엔 뷰와 비슷) MapSqlParameterSource
* params = new MapSqlParameterSource();
*
* params.addValue("id", dto.getId()); // "id"에 dto.getId를 넣는다
* params.addValue("name", dto.getName()); params.addValue("age", dto.getAge());
*
* namedJdbcTemplate.update(sql.toString(), params);
*/
}
//데이터 수정
public void updateData(CustomDTO dto) {
StringBuffer sql = new StringBuffer();//버퍼보단 빌더가 빠르다.
sql.append("update custom set name=?,age=? where id=?");
jdbcTemplate.update(sql.toString(),dto.getName(),dto.getAge(),dto.getId());
}
//데이터 삭제
public void deleteData(String id) {
StringBuilder sql = new StringBuilder();
sql.append("delete custom where id=?");
jdbcTemplate.update(sql.toString(),id);
}
//모든 데이터 출력
public List<CustomDTO> getList() {
StringBuilder sql = new StringBuilder();
sql.append("select id,name,age from custom");
//RowMapper(인터페이스) : ResultSet과 같은 것
List<CustomDTO> lists = //sql.toString() : 쿼리를 문자화 한것
jdbcTemplate.query(sql.toString(),
new RowMapper<CustomDTO>() {
//mapRow : while문과 같은 역할을 해준다.
public CustomDTO mapRow(ResultSet rs, int rowNum) //rowNum:index번호
throws SQLException {
CustomDTO dto = new CustomDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
return dto;
}
});
return lists;
}
//하나의 데이터 출력
public CustomDTO getReadData(String id) {
StringBuilder sql = new StringBuilder();
sql.append("select id,name,age from custom where id=?");
CustomDTO dtoOne =
jdbcTemplate.queryForObject(sql.toString(),
new RowMapper<CustomDTO>() {
public CustomDTO mapRow(ResultSet rs, int rowNum)
throws SQLException {
CustomDTO dto = new CustomDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
return dto;
}
},id);
return dtoOne;
}
}
4. CustomMain 클래스 작성
- 이전 글에서 생선한 CustomMain 클래스에 추가로 소스코드를 작성
package com.exe.springJdbcTemplate;
import java.util.List;
import org.springframework.context.support.GenericXmlApplicationContext;
//콘솔이라 main클래스 만들어
public class CustomMain {
public static void main(String[] args) {
//콘솔에서는 이 소스가 필요하다.
GenericXmlApplicationContext context =
new GenericXmlApplicationContext("app-context.xml");//app-context.xml객체생성
//DB연동할려면 DAO가 필요하다.
// context에 만들어진 객체가 들어가있음
//customDAO라는 이름으로 만들어진 Bean객체를 가져와서 dao에 넣음
//이건 Java의 JDBC
//CustomDAO dao = (CustomDAO)context.getBean("customDAO");
//스프링의 JDBC
CustomDAO2 dao = (CustomDAO2)context.getBean("customDAO2");
CustomDTO dto;
//insert
dto = new CustomDTO();
dto.setId("555");
dto.setName("한효주");
dto.setAge(27);
dao.insertData(dto);
System.out.println("insert 완료");
//select(모든 데이터 검색)
/* List<CustomDTO> lists = dao.getList();
for(CustomDTO dto1 : lists) {
System.out.printf("%s %s %d\n",
dto1.getId(),dto1.getName(),dto1.getAge());
}
System.out.println("select 완료.."); */
//OneSelect(하나의 데이터 검색)
/* dto = dao.getReadData("111");
if(dto!=null) {
System.out.printf("%s %s %d\n",
dto.getId(),dto.getName(),dto.getAge());
}
System.out.println("OneSelect 완료..."); */
//update(데이터 수정)
/*dto = new CustomDTO();
dto.setId("222");
dto.setName("정인성");
dto.setAge(28);
dao.updateData(dto);
System.out.println("update 완료..."); */
//delete(데이터 삭제)
/*dao.deleteData("222");
System.out.println("delete 완료.."); */
}
}
5. 실행 결과
- 이번에 Spring JDBC로 id:555 /name:한효주 / age:27 인 데이터를 insert 할 것이다.
- CustomMain 클래스 실행
- cmd에서 select * from custom; 을 써서 전체 데이터 검색해보면 데이터가 insert된 것을 확인 가능
- 전체 데이터 출력, 데이터 삭제 등을 해보고 싶으면 insert부분을 주석 처리 후 원하는 기능을 주석을 삭제하면 된다.
끝~
다음 글에서는 Spring + MyBatis에 대해 정리할 것이다.
반응형
'Back-End > Spring Legacy' 카테고리의 다른 글
[Spring 3.0] LomBok 으로 getter/setter 생성 (0) | 2022.03.28 |
---|---|
[Spring 3.0] 스프링 3.0 + MyBatis 연동 (0) | 2022.03.27 |
[Spring 3.0] Maven Repository(메이븐), Java의 JDBC (0) | 2022.03.26 |
[Spring 3.0] 의존성 주입(DI) - 수동 (0) | 2022.03.24 |
STS 3 설치 및 세팅 핵심 정리 - Spring3.0 시작! (0) | 2022.03.24 |
블로그의 정보
무작정 개발
무작정 개발