본문 바로가기

[Spring]

[Spring]11월 13일 Spring-jdbc 스프링 설정파일을 이용해 연동 예제(JdbcTemplate)

Spring-jdbc 연동하는 예제

Spring프로젝트 생성 메이븐 프로젝트 생성해서 라이브러리는

Spring-core, context, jdbc, mysql 라이브러리를 추가한다.


스프링 설정파일을 만들어서

1. DB에 연결하기 위한 정보를 갖는 DataSource구현체를 빈(bean) 으로 등록.

2. 1을 DB연결을 관리하는 객체에 주입

3. 2를 이용해서 DAO구현


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

<property name="url" value="jdbc:mysql://localhost:3306/sds2"></property>

<property name="password" value="mysql"></property>

<property name="username" value="root"></property>

</bean>


"org.springframework.jdbc.datasource.DriverManagerDataSource"

스프링 라이브러리에 포함되있는 DataSource의 구현체, 개발테스트용으로 빈으로 등록될때 커넥션을 한개 맺고, 

종료될때 커넥션을 닫는 단순한 정책으로 동작한다.


이제 dataSource 빈 객체를 주입받아서 커넥션을 관리하는 '세션' 객체를 빈으로 등록한다.( JdbcTemplate )


<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource" ref="dataSource"></property>

</bean>


그리고 테이블에대한 model 클래스를 작성해주자.

저는 Dept라는 테이블의 모델클래스를 작성하였습니다.

package jdbc1;


public class Dept {

private int deptno;

private String dname;

private String loc;

public int getDeptno() {

return deptno;

}

public void setDeptno(int deptno) {

this.deptno = deptno;

}

public String getDname() {

return dname;

}

public void setDname(String dname) {

this.dname = dname;

}

public String getLoc() {

return loc;

}

public void setLoc(String loc) {

this.loc = loc;

}

@Override

public String toString() {

return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";

}

}



이제 Dao클래스를 작성해보자.

Spring을 이용한 Dao작성은

싱글턴 필요없음  → 객체관리를 스프링이 해주니까

Connection대신에 JdbcTemplate을 사용   스프링 컨테이너에 만들어뒀으니 주입받으면됨

CRUD메소드 각각 작성

package jdbc1;


import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.List;


import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;


public class DeptDao {

private JdbcTemplate jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate)

{

this.jdbcTemplate = jdbcTemplate;

}

public int insertDept(Dept dept)

{

return jdbcTemplate.update("insert into dept values(?,?,?)"

,dept.getDeptno(),dept.getDname(),dept.getLoc());

}

public int updateDept(Dept dept)

{

return jdbcTemplate.update("update dept set dname = ?, loc = ? where deptno = ?"

, dept.getDname(), dept.getLoc(), dept.getDeptno());

}

public int deleteDept(int deptno)

{

return jdbcTemplate.update("delete from dept where deptno = ?", deptno);

}

public Dept selectOne(int deptno)

{

return jdbcTemplate.queryForObject("select * from dept where deptno = ?", mapper, deptno);

}

//queryForObject(sql문, 매핑객체, 인자1, 인자2, ,,,,,,인자n);

public List<Dept> selectAll(){

return jdbcTemplate.query("select * from dept", mapper);

}

RowMapper<Dept> mapper = new RowMapper<Dept>() {


@Override

public Dept mapRow(ResultSet rs, int idx) throws SQLException {

// FIXME Auto-generated method stub

Dept dept = new Dept();

dept.setDeptno(rs.getInt("deptno"));

dept.setDname(rs.getString("dname"));

dept.setLoc(rs.getString("loc"));

return dept;

}

};

}


RowMapper<Dept> mapper = new RowMapper<Dept>() {


@Override

public Dept mapRow(ResultSet rs, int idx) throws SQLException {

// FIXME Auto-generated method stub

Dept dept = new Dept();

dept.setDeptno(rs.getInt("deptno"));

dept.setDname(rs.getString("dname"));

dept.setLoc(rs.getString("loc"));

return dept;

}

};

ResultSet에서 한줄의 데이터를 어떻게 Dept객체로 바꿀건지를 정의해준다.



이렇게 만든 DeptDao를 빈으로 등록하고 jdbcTemplate빈 객체를 주입시켜주자.

<bean id="deptDao" class="jdbc1.DeptDao">

<property name="jdbcTemplate" ref="jdbcTemplate"></property>

</bean>


완성되면

test해볼 메인 클래스를 만들어서 추가, 수정, 삭제, 읽기 CRUD 실험을 해보자~

package jdbc1;


import java.util.List;


import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;


public class Test {


public static void main(String[] args) {

// FIXME Auto-generated method stub

ApplicationContext context = new FileSystemXmlApplicationContext("src/jdbc1/applicationContext.xml");

DeptDao dao = context.getBean("deptDao", DeptDao.class);

//selectAll

// List<Dept> list = dao.selectAll();

// for(Dept d : list)

// System.out.println(d);

    //insert

// Dept dept = new Dept();

// dept.setDeptno(50);

// dept.setDname("sungmin");

// dept.setLoc("Bucheon");

// dao.insertDept(dept);

//update

// Dept dept = new Dept();

// dept.setDname("sung");

// dept.setLoc("Busan");

// dept.setDeptno(50);

// dao.updateDept(dept);

/delete

// dao.deleteDept(50);

//selectOne

Dept dept = dao.selectOne(40);

System.out.println(dept);

}

}



출처 : 삼성SDS멀티캠퍼스

강사 : 홍승길

Email : iccack70@gmail.com