본문 바로가기
Spring

2022-11-28 스프링 jdbc(DB연결) - CRUD

by HTT 2022. 11. 28.
스프링과 DB연결하기

 

springjdbc - dept패키지

1. WEB-INF에 lib폴더를 작성하고 ojdbc6.jar파일 추가하기


2. db연동 라이브러리를 pom.xml파일에 등록
=> spring - jdbc
     oracle(maven중앙저장소에서 11버전까지는 지원이 안 되므로 외부저장소에 등록하고 작업)


3. 설정파일에 스프링에서 지원하는 API를 등록
   - DB와의 연결을 관리하는 클래스를 등록(org.springframework.jdbc.datasource.DriverManagerDataSource)
     jdbc에서 DriverManager로 커넥션을 생성하는 작업과 동일함(커넥션풀로 바꾸기)
     DBUtil에 지원하던 기능을 지원
   - jdbc에서 처리하던 공통의 작업을 수행하는 클래스
   

 

 

JdbcTemplate을 이용해 db연결하기

 

JdbcTemplate

: jdbc에서 공통으로 작업했던 부분을 처리하는 클래스로 드라이버로딩, DB연결, SQL문 실행기능이 제공되는 객체생성, sql값 전달  값 설정하여 SQL문을 완성시키는 역할을 한다.

 

 

 

dept.xml

1. 커넥션을 관리하는 객체를 등록하기

<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
	<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
	<property name="username" value="scott"/>
	<property name="password" value="tiger1234"/>
</bean>

 

 

2. sql을 실행할 수 있도록 기능을 제공하는 클래스 등록하기

<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">
	<constructor-arg ref="ds"/>
</bean>

 

 

3. @Component를 사용해 빈을 등록한 클래스의 빈을 생성해주기

<context:component-scan base-package="dept"/>

 

 

 

 

실제로 적용해보기

insert, update, delete

 

DeptSystem(main), DeptDTO, MenuUI(인터페이스 AbstractUI 상속), DeptDAOImpl(인터페이스 DeptDAO상속)

 

 

1) 객체 사용을 위해 bean등록하고 생성자만들어서 자동주입 시켜주기

@Component("ui")
public class MenuUI implements AbstractUI{
	DeptDAO dao;
	@Autowired
	public MenuUI(DeptDAO dao) {
		super();
		this.dao = dao;
	}
@Component
public class DeptDAOImpl implements DeptDAO{
	private JdbcTemplate mytemplate;
	@Autowired
	public DeptDAOImpl(JdbcTemplate mytemplate) {
		super();
		this.mytemplate = mytemplate;
	}

 

 

2) sql문 작성하고 값 전달하기

insert, update, delete 중 update만 해볼 것임. 패턴은 동일함

public class DeptDAOImpl implements DeptDAO{
	//멤버변수, 생성자는 위와 동일하므로 생략
	public int update(DeptDTO dept) {
		String sql = "update mydept set loc=?, tel=?, mgr=? where deptno=?";
		int result = mytemplate.update(sql, dept.getLoc(), dept.getTel(), dept.getMgr(), dept.getDeptNo());
		return result;
	}
}

=> insert, update, delete는 JdbcTemplate의 update(...)메소드를 이용하여 처리한다.

 

 

3) MenuUI에서 리턴값받아 처리하기

@Override
public void updateMenu() {
   	//멤버변수, 생성자는 위와 동일하므로 생략
	System.out.println("*******부서정보수정(부서번호)********");
	System.out.print("수정할 주소:");
	String loc = key.next();
	System.out.print("수정할 전화번호:");
	String tel = key.next();
	System.out.print("수정할 매니저번호:");
	String mgr = key.next();
	System.out.print("어떤 부서의 정보를 수정? ");
	String deptno = key.next();
	DeptDTO dto = new DeptDTO(deptno, loc, tel, mgr);
	int result = dao.update(dto);
	System.out.println("스프링에서 디비연동하기 update:" + result + "개 수정성공");
}

 

 

4) 실행결과

**********부서관리 시스템************
1. 부서등록
2. 부서상세보기
3. 부서정보수정(부서번호)
4. 부서삭제
5. 전체 부서 목록보기
6. 부서검색(부서명)
7. 부서갯수조회
8. 각 부서별 근무직원 조회하기(부서명)
9. 종료
원하는 작업을 선택하세요:3
*******부서정보수정(부서번호)********
수정할 주소:제주도
수정할 전화번호:999999999
수정할 매니저번호:9999
어떤 부서의 정보를 수정? 5555
스프링에서 디비연동하기 update:1개 수정성공

 

 

 

** 작성할 때 주의할 점

순서정해서 체계적으로 작성하기!!!

 

㉮ DI적용하기(상위 interface만들고 상속받는 객체에서 구현)

㉯ xml파일 작성하기

bean등록하기(@Component, @Autowired... 처리)

㉱ 생성자에 맞에 DTO객체 생성하여 메소드 호출하기(ex : MenuUI클래스)

㉲ JdbcTemplate클래스의 update()메소드 이용해 sql문 완성시키기(ex : MenuUI클래스)

㉳ 메인메소드에서 객체 생성하고 찾아와서 메소드 호출하기(ApplicationContext)

 

댓글