무작정 개발.Vlog

[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라고 검색하면 나온다.

1. Spring JDBC lib 추가하기 - (pom.xml에 추가)
1. Spring JDBC lib 추가하기 - (pom.xml에 추가)

 

여기서 주의할 점이 있다. 현재 스프링은 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에 대해 정리할 것이다.

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기