본문 바로가기

[Spring]

[Spring]11월 16일 Spring-jdbc 어노테이션(annotation)을 이용해 연동 예제

앞서 올린 예제를 활용해서 해보겠습니다.

http://smjava.tistory.com/70 에서 스프링 설정파일과, 모델클래스만 복사해서.


Dept

package jdbc2;


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클래스를 어노테이션으로 등록하자.

저는 이예제를 jdbc2라는 패키지 안에서 하고있으니 아래와 같이 잡아 줍시다.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">


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

<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>

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

<constructor-arg ref="dataSource"></constructor-arg>

</bean>

</beans>



DeptDao클래스

package jdbc2;


import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;

import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import org.springframework.stereotype.Component;


import jdbc2.Dept;

@Component

public class DeptDao {

@Autowired

private NamedParameterJdbcTemplate jdbcTempalte;

public void setJdbcTemplate(NamedParameterJdbcTemplate jdbcTemplate){

this.jdbcTempalte = jdbcTemplate;

}

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;

}

};

//네임드파라미터에 인자값 매핑하기

//인자가 한개일때/인자가 여러개일때

//자바 Map계열 이용/Spring SqlParam계열 사용

public int deleteDept(int deptno){

return jdbcTempalte.update

("delete from dept where deptno = :deptno", Collections.singletonMap("deptno", deptno));

}

public int insertDept(Dept dept){

Map<String, Object> map = new HashMap<String, Object>();

map.put("deptno", dept.getDeptno());

map.put("dname", dept.getDname());

map.put("loc", dept.getLoc());

return jdbcTempalte.update("insert into dept values(:deptno,:dname,:loc)", map);

}

public int updateDept(Dept dept){

BeanPropertySqlParameterSource map = new BeanPropertySqlParameterSource(dept);

return jdbcTempalte.update("update dept set dname = :dname, loc = :loc where deptno = :deptno", map); 

  //여기서 물음표대신에 이름을 적고 맵이나 sqlParam객체<K,V>형태의 자료형에 K에 이름을 V에 값을

}

public Dept selectOne(int deptno){

return jdbcTempalte.queryForObject

("select * from dept where deptno = :deptno",

new MapSqlParameterSource("deptno", deptno), mapper);

}

public List<Dept> selectAll(){

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

}

}


클래스 안에 주석달려있는 글 잘보시고 이렇게 작성해주시고

test 해봅시다~

package jdbc2;


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/jdbc2/applicationContext.xml");

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

// for(Dept d : dao.selectAll())

// System.out.println(d);

//insert

// Dept d = new Dept();

// d.setDeptno(80);

// d.setDname("haha");

// d.setLoc("Busan");

// dao.insertDept(d);

//update

// Dept d = new Dept();

// d.setDeptno(41);

// d.setDname("haha");

// d.setLoc("Seoul");

// dao.updateDept(d);

//delete

// dao.deleteDept(41);

//selectOne

Dept dept = dao.selectOne(80);

System.out.println(dept);

}

}



출처 : 삼성SDS멀티캠퍼스

강사 : 홍승길

Email : iccack70@gmail.com