[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 버전이 맞춰진다.
html <!-- 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를 사용한다.
html<!-- 제어의 역전 --> <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로 바꿔준다.
htmlpackage 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 클래스에 추가로 소스코드를 작성
javapackage 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에 대해 정리할 것이다.
반응형
블로그의 정보
무작정 개발
무작정 개발