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
'[Spring]' 카테고리의 다른 글
[Spring]11월 16일 Spring-jdbc 어노테이션(annotation)을 이용해 연동 예제 (0) | 2015.11.24 |
---|---|
[Spring]11월 11일 Spring Aop설정을 어노테이션(annotation)을 이용한 예제 (1) | 2015.11.11 |
[Spring]11월 11일 Spring 설정 파일(xml) 기반 AOP 설정 예제 (0) | 2015.11.11 |
[Spring]11월 11일 Spring AOP용어, AOP 구현 방법, AOP 설정 태그 (0) | 2015.11.11 |
[Spring]11월 10일 Spring AOP 프록시패턴(Proxy pattern) 적용 예제 (0) | 2015.11.10 |