SlideShare a Scribd company logo
Spring Framework & MyBatis
스프링 프레임워크 & 마이바티스 강의
탑크리에듀 교육센터
CONTENTS
4. Spring JDBC
4.3 Spring JDBC에서 DB 접근하는 방법
4.3.2 Spring JDBC에서 DB 접근하는 방법 – NamedParameterJdbcTemplate
4.3.3 Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
4.3.4 Spring JDBC에서 DB 접근하는 방법 – SimpleJdbcCall
4.3.5 Spring JDBC에서 DB 접근하는 방법 – SqlUpdate
4.3.6 Spring JDBC에서 DB 접근하는 방법 – StoredProcedure
4.3.7 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
Chapter 4
Spring JDBC
~ 4.3.7
4. Spring JDBC
: 이름없는 ? 대신 이름을 부여해서 바인드 변수 처리가 가능하다.
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-2. Spring JDBC에서 DB 접근하는 방법 – NamedParameterJdbcTemplate

public class PersonDao {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Override
public void createPerson(Integer id, String firstname, String lastname) {
String SQL = "INSERT INTO person (id, firstname, lastname)
VALUES (:id, :firstname, :lastname)";
Map namedParameters = new HashMap();
namedParameters.put(“id", id);
namedParameters.put(“firstname", firstname);
namedParameters.put(“lastname", lastname);
namedParameterJdbcTemplate.update(SQL, namedParameters);
}
}
4. Spring JDBC
: JdbcTemplate의 모든 기능과 NamedParameterJdbcTemplate의 기능을 합친 것으로 자바5의 auto boxing과
varargs(String…args, 가변길이 매개변수) 기능을 포함하고 있다.
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-3. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 [JdbcTemplate Style]
public class PersonDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public Person findPerson(Integer id, String lastname) {
String sql = "select id, firstname, lastname from PERSON where id = ? and lastname = ?";
RowMapper<person> mapper = new RowMapper<person>() {
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setFirstName(rs.getString("firstname"));
person.setLastName(rs.getString("lastname"));
return person;
}
};
// SELECT인 경우 Mapper가 뒤에 오고 그 앞에 매개변수들을 객체배열에 담아 넘긴다.
// Person 타입으로 형 변환도 필요하다.
return (Person) jdbcTemplate.queryForObject(sql, new Object[] {id, lastname}, mapper);
}
4. Spring JDBC
: JdbcTemplate의 모든 기능과 NamedParameterJdbcTemplate의 기능을 합친 것으로 자바5의 auto boxing과
varargs(String…args, 가변길이 매개변수) 기능을 포함하고 있다.
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-3. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 [SimpleJdbcTemplate Style]
public class PersonDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this. simpleJdbcTemplate = new SimpleJdbcTemplate (dataSource);
}
public Person findPerson(Integer id, String lastname) {
String sql = "select id, firstname, lastname from PERSON where id = ? and lastname = ?";
RowMapper<person> mapper = new RowMapper<person>() {
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setFirstName(rs.getString("firstname"));
person.setLastName(rs.getString("lastname"));
return person;
}
};
// SELECT인 경우 Mapper가 쿼리문 다음에 오고 그 뒤에 가변길이 매개변수 형태로 넘기는
// 객체배열 형태로 받는다. Person 타입으로 형 변환도 필요없다.
return simpleJdbcTemplate.queryForObject(sql, mapper, id, lastname);
}
4. Spring JDBC
 DataBase에 SQL로 만들어져 있는 저장함수, 프로시저를 다루기 위한 클래스로 최소한
의 구성으로 DB함수, Procedure에 접근할 수 있다.
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 오라클 서버쪽 패키지(Package) 및 함수(Function)
create or replace package types
as
type currtype is ref cursor;
end;
/
create or replace function getEmp(v_deptno in number) return types.currtype
AS
emp_cursor types.currtype;
sql_string VARCHAR2(500);
BEGIN
sql_string := 'SELECT empno, ename, sal FROM EMP WHERE DEPTNO = :1’ ;
OPEN emp_cursor FOR sql_string USING v_deptno;
RETURN emp_cursor;
CLOSE emp_cursor;
END;
/
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 New  Project  Spring Legacy Project
Project Name : springjdbc
Simple Projects : Simple Spring Maven
 [pom.xml에 추가]
<dependences>
…
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0</version>
</dependency>
</dependences>
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>https://maven.oracle.com</url>
</repository>
</repositories>
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 DTO 역할을 하는 Emp.java
package edu.onj.function;
public class Emp {
private String empno;
private String ename;
private String sal;
public Emp() {}
public Emp(String empno, String ename, String sal) {
this.empno = empno;
this.ename = ename;
this.sal = sal;
}
public void setEmpno(String empno) {
this.empno = empno;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setSal(String sal) {
this.sal = sal;
}
public String getEmpno() {
return empno;
public String getEname() {
return ename;
}
public String getSal() {
return sal;
}
}
 DAO 서비스를 위한 인터페이스[EmpDao.java]
package edu.onj.function;
import java.util.List;
import javax.sql.DataSource;
public interface EmpDao {
public void setDataSource(DataSource ds);
public int[] createEmpList(final List<Emp> emps);
public List<Emp> listEmp(Integer empno);
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 DAO 서비스를 위한 클래스[EmpDao.java]
package edu.onj.function;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import oracle.jdbc.OracleTypes;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import
org.springframework.jdbc.core.namedparam.MapSqlParameterSourc
e;
import
org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
public class EmpDaoImpl implements EmpDao {
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public DataSource getDataSource() {
return dataSource;
}
/*
* 여런건의 EMP 데이터를 BatchPreparedStatementSetter 를 이용하여 일괄 인서트
*/
@Override
public int[] createEmpList(final List<Emp> emps) {
String SQL = "insert into emp(empno, ename, sal) values (?, ?, ?)";
BatchPreparedStatementSetter setter = null;
setter = new BatchPreparedStatementSetter() {
@Override
public int getBatchSize() {
return emps.size();
}
@Override
public void setValues(PreparedStatement ps, int index) throws SQLException {
Emp emp = emps.get(index);
int parameterIndex = 1;
ps.setString(parameterIndex++, emp.getEmpno());
ps.setString(parameterIndex++, emp.getEname());
ps.setString(parameterIndex++, emp.getSal());
}
};
return jdbcTemplate.batchUpdate(SQL, setter);
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 DAO 서비스를 위한 클래스[EmpDao.java]
/* 오라클 Stored Function 을 호출하여 10 번 부서 사원리스트 출
력(REF CURSOR) */
@Override
public List<Emp> listEmp(Integer deptno) {
SimpleJdbcCall simpleJdbcCall = new
SimpleJdbcCall(this.dataSource)
.withSchemaName("scott")
.withFunctionName("getEmp")
.declareParameters(
new SqlOutParameter("emp_cursor", OracleTypes.CURSOR, new
EmpMapper()),
new SqlParameter("v_deptno", Types.INTEGER))
.withoutProcedureColumnMetaDataAccess();
SqlParameterSource params = new
MapSqlParameterSource("v_deptno", deptno);
//execute 메서드는 Map 형태러 리턴한다.
Map<String, Object> resultSet = simpleJdbcCall.execute(params);
return (List<Emp>) resultSet.get("emp_cursor");
}
}
 매퍼 클래스[EmpMapper.java]
package edu.onj.function;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class EmpMapper implements RowMapper<Emp> {
@Override
public Emp mapRow(ResultSet rs, int rowNum) throws
SQLException {
Emp emp = new Emp();
emp.setEmpno(rs.getString("empno"));
emp.setEname(rs.getString("ename"));
emp.setSal(rs.getString("sal"));
return emp;
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 XML 설정 파일[src/main/resources/jdbc.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=http://www.springframework.org/schema/beans
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
">
<!-- Initialization for data source -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-
method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value>
</property>
<property name="username">
<value>scott</value>
</property>
<property name="password">
<value>tiger</value>
</property>
</bean>
<bean id="empDao" class=" edu.onj.function.EmpDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 클라이언트 main 함수[JdbcClient.java]
package edu.onj.function;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.support.GenericXmlApplicationContext;
public class JdbcClient {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("jdbc.xml");
ctx.refresh();
EmpDaoImpl empDao = (EmpDaoImpl)ctx.getBean("empDao");
//1. EMP TABLE 에서 부서코드가 10 인 데이터 추출
List<Emp> emps = empDao.listEmp(10);
System.out.println("------------------ all select ------------------");
for (Emp emp : emps) {
System.out.println("empno-->" + emp.getEmpno());
System.out.println("ename-->" + emp.getEname());
System.out.println("sal -->" + emp.getSal());
}
emps.clear();
//2. BatchPreparedStatementSetter 를 이용하여 List 에 있는 것을
일괄 Insert
emps.add(new Emp("9701", "1001 길동", "10010"));
emps.add(new Emp("9702", "1002 길동", "10020"));
emps.add(new Emp("9703", "1003 길동", "10030"));
emps.add(new Emp("9704", "1004 길동", "10040"));
emps.add(new Emp("9705", "1005 길동", "10050"));
empDao.createEmpList(emps);
//3.spring JDBC SimpleJdbcCall 을 이용한 오라클 함수(ref cursor
리턴)호출을 통한 10 번 부서 EMP 추출
ArrayList<Emp> emps2 = (ArrayList<Emp>)empDao.listEmp(new
Integer(10));
for(Emp e: emps2) {
System.out.println(e.getEmpno() + ":" + e.getEname() + ":" +
e.getSal());
}
ctx.close();
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
위 예제의 listEmp() 메소드를 기존 자바 JDBC의 CallableStatementCallback을 이용한 방식으로 변경하면 다음과 같다.

@Override
public List<Emp> listEmp2(final Integer deptno){
CallableStatementCallback<List<Emp>> cb = new CallableStatementCallback<List<Emp>>() {
@Override
public List<Emp> doInCallableStatement(CallableStatement cs)
throws SQLException, DataAccessException {
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.setInt(2, deptno);
cs.execute();
ResultSet rs = (ResultSet) cs.getObject(1);
List<Emp> emps = new ArrayList<Emp>();
EmpMapper mapper = new EmpMapper();
for (int i = 0; rs.next(); i++) {
emps.add(mapper.mapRow(rs, i));
}
return emps;
}
};
return jdbcTemplate.execute("{? = call getEmp(?)}", cb);
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-5. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate
 재사용 가능한 SQL Update 구문을 생성하며, 이를 위해 SqlUpdate 클래스를 상속받아서 구현해야 한다.
 SqlUpdate를 상속받은 하위 클래스의 생성자에서 SQL 쿼리 구문(DML : insert, update, delete), 파라미터를 생성하고
compile() 메소드를 호출하여 컴파일 한다. 마지막으로 update() 메소드를 호출하여 해당 DML 쿼리를 실행한다.

public class PersonUpdate extends SqlUpdate {
public PersonUpdate(final DataSource ds) {
setDataSource(ds);//SqlUpdate의 메소드 호출
setSql("update Person set firstname = ?, lastname = ? where id = ?"); //SqlUpdate 메소드호출
declareParameter(new SqlParameter(Types.VARCHAR)); //SqlUpdate 메소드호출
declareParameter(new SqlParameter(Types.VARCHAR));
declareParameter(new SqlParameter(Types.INTRGER));
compile(); //SqlUpdate의 메소드 호출
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-5. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate

//update 구문 실행
public int run(final Person person) {
Object[] params =
new Object[] {
person.getFirstName(),
person.getLastName(),
person.getId()};
return update(params);
}
}
public class PersonInsert extends SqlUpdate {
public PersonInsert(final DataSource ds) {
setDataSource(ds);
setSql("insert into Person(id, firstname, lastname)
values(?, ?, ?)");
declareParameter(new SqlParameter(Types.INTEGER));
declareParameter(new SqlParameter(Types.VARCHAR));
declareParameter(new SqlParameter(Types.VARCHAR));
compile();
}
// insert 구문 실행
public int run(final Person person) {
Object[] params = new Object[] { pserson.getId(),
person.getFirstName(),
person.getLastName()};
return update(params);
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure
 Spring JDBC의 StoredProcedure를 상속받아서 서버쪽의 저장함수나 프러시저에 접근 가능하다.
 [Emp.java]
package edu.onj.function2;
public class Emp {
private String empno;
private String ename;
private String sal;
public Emp() {}
public Emp(String empno, String ename, String sal) {
this.empno = empno;
this.ename = ename;
this.sal = sal;
}
public void setEmpno(String empno) {
this.empno = empno;
}
public void setEname(String ename) {
this.ename = ename;
}
 [Emp.java] 이어서
public void setEname(String ename) {
this.ename = ename;
}
public void setSal(String sal) {
this.sal = sal;
}
public String getEmpno() {
return empno;
public String getEname() {
return ename;
}
public String getSal() {
return sal;
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure
 Spring JDBC의 StoredProcedure를 상속받아서 서버쪽의 저장함수나 프러시저에 접근 가능하다.
 [EmpDao.java]
package edu.onj.function2;
import java.util.List;
import javax.sql.DataSource;
public interface EmpDao {
public void setDataSource(DataSource ds);
public List<Emp> listEmp(Integer deptno);
}
 [EmpMapper.java]
package edu.onj.function2;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class EmpMapper implements
RowMapper<Emp> {
@Override
public Emp mapRow(ResultSet rs, int rowNum) throws
SQLException {
Emp emp = new Emp();
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
emp.setSal(rs.getInt("sal"));
return emp;
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure
 Spring JDBC의 StoredProcedure를 상속받아서 서버쪽의 저장함수나 프러시저에 접근 가능하다.
 [EmpJDBCTemplate.java]
package edu.onj.function2;
import java.sql.Types;
import java.util.*;
import javax.sql.DataSource;
import oracle.jdbc.OracleTypes;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
public class EmpJDBCTemplate extends StoredProcedure implements
EmpDao {
private DataSource dataSource;
private static final String SQL = "getEmp";
public EmpJDBCTemplate(DataSource dataSource) {
super(dataSource, SQL);
setFunction(true);
declareParameter(new SqlOutParameter("emp_cursor",
OracleTypes.CURSOR, new
EmpMapper()));
declareParameter(new SqlParameter("v_deptno", Types.INTEGER));
}
@Override
public List<Emp> listEmp(Integer deptno) {
Map<String, Object> resultSet = execute(deptno);
ArrayList<Emp> list = (ArrayList) resultSet.get("emp_cursor");
return list;
}
}
 [JdbcClient.java]
package edu.onj.function2;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import onj.edu.jdbc1.Customer;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class JdbcClient {
public static void main(String[] args) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("jdbc2.xml");
EmpJDBCTemplate empJDBCTemplate
=(EmpJDBCTemplate)ctx.getBean("empJDBCTemplate");
ArrayList<Emp> list = new ArrayList<Emp>();
list = (ArrayList<Emp>) empJDBCTemplate.listEmp(20);
for (Emp emp:list){
System.out.println("empno --> "+emp.getEmpno()+"
ename --> "+emp.getEname()+" sal --> "+emp.getSal() );
}
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure
 [jdbc2.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springfra
mework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroymethod="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value>
</property>
<property name="username">
<value>scott</value>
</property>
<property name="password">
<value>tiger</value>
</property>
</bean>
<bean id="empJDBCTemplate" class=" edu.onj.function2.EmpJDBCTemplate">
<constructor-arg ref="dataSource"/>
</bean>
</beans>
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 DataFieldMaxValueIncrementer 인터페이스는 DB 테이블의 칼럼값을 MAX VALUE까지 자동증분 하기 위
한 용도로 사용되는 스프링의 인터페이스 이다. 오라클 DB라면 시퀀스를 스프링에서 사용할 수 있게 해 준
다.
 인터페이스의 구조는 다음과 같다.

public interface DataFieldMaxValueIncrementer {
public int nextIntValue() throws DataAccessException;
public long nextLongValue() throws DataAccessException;
public String nextStringValue() throws DataAccessException;
}
 스프링배치에서는 기본적으로 , Oracle, DB2, Derby, Hsql, Mysql, Postgres, MS-SQL Server, Sybase 등의 주
요 DB에 대한 DataFieldMaxValueIncrementer의 구현 클래스가 제공되고 있다.
 사용절차는 다음과 같다.
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer

1. Spring 설정파일에서 사용할 incrementer에 대해 정의
DB2는 SequenceMaxValueIncrementer, MySQL은 MySQLMaxValueIncrementer, PostgreSQL이라면
PostgreSQLSequenceMaxValueIncrementer, 오라클인 경우 OracleSequenceMaxValueIncrementer를 사용한다.
<bean id="incrementer" class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="incrementerName">
<value>SEQ_SID</value> <!– 오라클에 만들어 놓은 시퀀스 이름 -
</property>
</bean>
2. Insert SQL문을 실행하는 부분에서 정의된 incrementer 사용
private DataFieldMaxValueIncrementer incrementer;
public void setIncrementer(DataFieldMaxValueIncrementer incrementer) {
this.incrementer = incrementer;
}
….
String strQuery = "INSERT INTO BOARD VALUES ( ?, ?, ?, ?, ?, sysdate) ";
int currentSid =new Integer(incrementer.nextIntValue());
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 사용 예제
1. [CustomerDao.java]
package onj.edu.jdbc1;
import java.util.List;
import javax.sql.DataSource;
public interface CustomerDAO {
public void setDataSource(DataSource ds);
public void create(Integer id, String name, Integer age);
public Customer getCustomer(Integer id);
public List<Customer> listCustomer();
public void delete(Integer id);
public void update(Integer id, Integer age);
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 사용 예제
2. [CustomerJDBCTemplate.java]
package onj.edu.jdbc1;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
public class CustomerJDBCTemplate implements CustomerDAO {
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
private DataFieldMaxValueIncrementer incrementer;
public void setIncrementer(DataFieldMaxValueIncrementer incrementer) {
this.incrementer = incrementer;
}
public void setDataSource(DataSource ds) {
this.dataSource = ds;
this.jdbcTemplate = new JdbcTemplate(ds);
}
public void create(Integer id, String name, Integer age) {
String SQL = "insert into customer(id, name, age) values (?, ?, ?)";
jdbcTemplate.update(SQL, new Integer(incrementer.nextIntValue()), name, age);
System.out.println("<<<Customer insert ok ::: " + name + "," + age);
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 사용 예제
2. [CustomerJDBCTemplate.java]
public Customer getCustomer(Integer id) {
String SQL = "select * from customer where id = ?";
Customer customer = jdbcTemplate.queryForObject(SQL, new Object[] { id }, new
CustomerMapper());
return customer;
}
public List<Customer> listCustomer() {
String SQL = "select * from customer";
List<Customer> customer = jdbcTemplate.query(SQL, new CustomerMapper());
return customer;
}
public void delete(Integer id) {
String SQL = "delete from customer where id = ?";
jdbcTemplate.update(SQL, id);
System.out.println("<<< customer delete ok ::: id = " + id);
}
public void update(Integer id, Integer age) {
String SQL = "update customer set age = ? where id = ?";
jdbcTemplate.update(SQL, age, id);
System.out.println("<<< customer update ok ::: id = " + id);
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 사용 예제
3. [CustomerMapper.java]
package onj.edu.jdbc1;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class CustomerMapper implements RowMapper<Customer>{
@Override
public Customer mapRow(ResultSet rs, int arg1) throws SQLException {
Customer customer = new Customer();
customer.setId(rs.getInt("id"));
customer.setName(rs.getString("name"));
customer.setAge(rs.getInt("age"));
return customer;
}
}
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 사용 예제
4. [jdbc3.xml]
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-
aop-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-
util-4.2.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value>
</property>
<property name="username">
<value>scott</value>
</property>
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 사용 예제
4. [jdbc3.xml]
<property name="password">
<value>tiger</value>
</property>
</bean>
<bean id="customerJDBCTemplate" class="onj.edu.jdbc1.CustomerJDBCTemplate">
<property name="dataSource" ref='dataSource'></property>
<property name="incrementer" ref = "incrementer"></property>
</bean>
<bean id="incrementer"
class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="incrementerName">
<value>SEQ_SID</value> <!-- 오라클에 만들어 놓은 시퀀스 이름 -->
</property>
</bean>
</beans>
4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
 사용 예제
5. [JdbcClient.java]
package onj.edu.jdbc1;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JdbcClient {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("jdbc3.xml");
CustomerJDBCTemplate jdbcTemplate = (CustomerJDBCTemplate)ctx.getBean("customerJDBCTemplate");
jdbcTemplate.create(4, "4길동", 4); jdbcTemplate.create(5, "5길동", 5);
jdbcTemplate.create(6, "6길동", 6);
List <Customer> customers = jdbcTemplate.listCustomer();
System.out.println("------------------ all select ------------------");
for(Customer customer:customers){
System.out.println("id ----> "+customer.getId());
System.out.println("name ----> "+customer.getName());
System.out.println("age ----> "+customer.getAge());
}
jdbcTemplate.update(4, 99);
Customer customer = jdbcTemplate.getCustomer(4);
System.out.println("--------- 변경된 4번 데이터 -------------");
System.out.println("id ----> "+customer.getId());
System.out.println("name ----> "+customer.getName());
System.out.println("age ----> "+customer.getAge());
+ 이어서
jdbcTemplate.delete(5);
customers = jdbcTemplate.listCustomer();
System.out.println("--------- 5번 삭제 후 ----------");
for(Customer customer1:customers){
System.out.println("id ----> "+customer1.getId());
System.out.println("name ----> "+customer1.getName());
System.out.println("age ----> "+customer1.getAge());
}
}
Any Questions ?
THANK YOU
FOR YOUR ATTENTION
무료국비지원교육 / 구로자바학원 _ 탑크리에듀 교육센터
http://www.topcredu.co.kr

More Related Content

What's hot

Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
Younghan Kim
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
경원 이
 
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
정완 전
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
NAVER D2
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
Hankyo
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
Younghan Kim
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
Hankyo
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
Younghan Kim
 
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
경원 이
 
Java JPA
Java JPAJava JPA
Java JPA
Yonghoon Ji
 
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Refactoring Jdbc Programming
Refactoring Jdbc ProgrammingRefactoring Jdbc Programming
Refactoring Jdbc Programming
chanwook Park
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012Daum DNA
 

What's hot (20)

Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
 
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
Java JPA
Java JPAJava JPA
Java JPA
 
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
 
Refactoring Jdbc Programming
Refactoring Jdbc ProgrammingRefactoring Jdbc Programming
Refactoring Jdbc Programming
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
 
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
#2.SQL초보에서 Schema Objects까지_재직자/근로자환급/국비지원교육/IT실무교육/SQL기초교육/구로IT학원추천
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 

Similar to 스프링프레임워크 & 마이바티스 ☆ 무.료 강의자료 제공 中

#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
수홍 이
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
Jung Han
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
Arawn Park
 
[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육
[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육
[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Booting Spring Data REST
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST
경원 이
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
Sunghyun Roh
 
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로  만들면서 비교해보자.(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로  만들면서 비교해보자.
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
WebFrameworks
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
Hankyo
 
[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술
AnselmKim
 
Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4
성일 한
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
엑셈
 
Booting spring data rest for SLiPP
Booting spring data rest for SLiPPBooting spring data rest for SLiPP
Booting spring data rest for SLiPP
경원 이
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Yapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar ormYapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar orm
Junyoung Lee
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic
Ji-Woong Choi
 

Similar to 스프링프레임워크 & 마이바티스 ☆ 무.료 강의자료 제공 中 (20)

#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
[JPA학원추천]spring framework&jpa활용한프로그램구현재직자향상과정_JPA학원/스프링학원/IT학원추천/재직자교육/국비지원/재...
 
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
스프링캠프 2016 발표 - Deep dive into spring boot autoconfiguration
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육
[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육
[스프링교육추천강좌]스프링마이바티스를이용한통합구현재직자향상과정_자바학원/스프링학원/스프링학원추천/구로IT/국비지원/재직자교육
 
Booting Spring Data REST
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
 
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로  만들면서 비교해보자.(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로  만들면서 비교해보자.
(스프링JDBC와 Spring Data JPA비교)Spring JDBC와 JPA를 간단한 CRUD 예제로 만들면서 비교해보자.
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술
 
Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
 
Booting spring data rest for SLiPP
Booting spring data rest for SLiPPBooting spring data rest for SLiPP
Booting spring data rest for SLiPP
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
 
Yapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar ormYapp a.a 2 2 sugar orm
Yapp a.a 2 2 sugar orm
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

스프링프레임워크 & 마이바티스 ☆ 무.료 강의자료 제공 中

  • 1. Spring Framework & MyBatis 스프링 프레임워크 & 마이바티스 강의 탑크리에듀 교육센터
  • 2. CONTENTS 4. Spring JDBC 4.3 Spring JDBC에서 DB 접근하는 방법 4.3.2 Spring JDBC에서 DB 접근하는 방법 – NamedParameterJdbcTemplate 4.3.3 Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate 4.3.4 Spring JDBC에서 DB 접근하는 방법 – SimpleJdbcCall 4.3.5 Spring JDBC에서 DB 접근하는 방법 – SqlUpdate 4.3.6 Spring JDBC에서 DB 접근하는 방법 – StoredProcedure 4.3.7 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer
  • 4. 4. Spring JDBC : 이름없는 ? 대신 이름을 부여해서 바인드 변수 처리가 가능하다. 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-2. Spring JDBC에서 DB 접근하는 방법 – NamedParameterJdbcTemplate  public class PersonDao { @Autowired private NamedParameterJdbcTemplate namedParameterJdbcTemplate; @Override public void createPerson(Integer id, String firstname, String lastname) { String SQL = "INSERT INTO person (id, firstname, lastname) VALUES (:id, :firstname, :lastname)"; Map namedParameters = new HashMap(); namedParameters.put(“id", id); namedParameters.put(“firstname", firstname); namedParameters.put(“lastname", lastname); namedParameterJdbcTemplate.update(SQL, namedParameters); } }
  • 5. 4. Spring JDBC : JdbcTemplate의 모든 기능과 NamedParameterJdbcTemplate의 기능을 합친 것으로 자바5의 auto boxing과 varargs(String…args, 가변길이 매개변수) 기능을 포함하고 있다. 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-3. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  [JdbcTemplate Style] public class PersonDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } public Person findPerson(Integer id, String lastname) { String sql = "select id, firstname, lastname from PERSON where id = ? and lastname = ?"; RowMapper<person> mapper = new RowMapper<person>() { public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person person = new Person(); person.setId(rs.getLong("id")); person.setFirstName(rs.getString("firstname")); person.setLastName(rs.getString("lastname")); return person; } }; // SELECT인 경우 Mapper가 뒤에 오고 그 앞에 매개변수들을 객체배열에 담아 넘긴다. // Person 타입으로 형 변환도 필요하다. return (Person) jdbcTemplate.queryForObject(sql, new Object[] {id, lastname}, mapper); }
  • 6. 4. Spring JDBC : JdbcTemplate의 모든 기능과 NamedParameterJdbcTemplate의 기능을 합친 것으로 자바5의 auto boxing과 varargs(String…args, 가변길이 매개변수) 기능을 포함하고 있다. 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-3. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  [SimpleJdbcTemplate Style] public class PersonDao { private SimpleJdbcTemplate simpleJdbcTemplate; public void setDataSource(DataSource dataSource) { this. simpleJdbcTemplate = new SimpleJdbcTemplate (dataSource); } public Person findPerson(Integer id, String lastname) { String sql = "select id, firstname, lastname from PERSON where id = ? and lastname = ?"; RowMapper<person> mapper = new RowMapper<person>() { public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person person = new Person(); person.setId(rs.getLong("id")); person.setFirstName(rs.getString("firstname")); person.setLastName(rs.getString("lastname")); return person; } }; // SELECT인 경우 Mapper가 쿼리문 다음에 오고 그 뒤에 가변길이 매개변수 형태로 넘기는 // 객체배열 형태로 받는다. Person 타입으로 형 변환도 필요없다. return simpleJdbcTemplate.queryForObject(sql, mapper, id, lastname); }
  • 7. 4. Spring JDBC  DataBase에 SQL로 만들어져 있는 저장함수, 프로시저를 다루기 위한 클래스로 최소한 의 구성으로 DB함수, Procedure에 접근할 수 있다. 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  오라클 서버쪽 패키지(Package) 및 함수(Function) create or replace package types as type currtype is ref cursor; end; / create or replace function getEmp(v_deptno in number) return types.currtype AS emp_cursor types.currtype; sql_string VARCHAR2(500); BEGIN sql_string := 'SELECT empno, ename, sal FROM EMP WHERE DEPTNO = :1’ ; OPEN emp_cursor FOR sql_string USING v_deptno; RETURN emp_cursor; CLOSE emp_cursor; END; /
  • 8. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  New  Project  Spring Legacy Project Project Name : springjdbc Simple Projects : Simple Spring Maven  [pom.xml에 추가] <dependences> … <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.1.0.7.0</version> </dependency> </dependences> <repositories> <repository> <id>oracle</id> <name>ORACLE JDBC Repository</name> <url>https://maven.oracle.com</url> </repository> </repositories>
  • 9. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  DTO 역할을 하는 Emp.java package edu.onj.function; public class Emp { private String empno; private String ename; private String sal; public Emp() {} public Emp(String empno, String ename, String sal) { this.empno = empno; this.ename = ename; this.sal = sal; } public void setEmpno(String empno) { this.empno = empno; } public void setEname(String ename) { this.ename = ename; } public void setSal(String sal) { this.sal = sal; } public String getEmpno() { return empno; public String getEname() { return ename; } public String getSal() { return sal; } }  DAO 서비스를 위한 인터페이스[EmpDao.java] package edu.onj.function; import java.util.List; import javax.sql.DataSource; public interface EmpDao { public void setDataSource(DataSource ds); public int[] createEmpList(final List<Emp> emps); public List<Emp> listEmp(Integer empno); }
  • 10. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  DAO 서비스를 위한 클래스[EmpDao.java] package edu.onj.function; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; import java.util.List; import java.util.Map; import javax.sql.DataSource; import oracle.jdbc.OracleTypes; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.namedparam.MapSqlParameterSourc e; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.jdbc.core.simple.SimpleJdbcCall; public class EmpDaoImpl implements EmpDao { private DataSource dataSource; private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; this.jdbcTemplate = new JdbcTemplate(dataSource); } public DataSource getDataSource() { return dataSource; } /* * 여런건의 EMP 데이터를 BatchPreparedStatementSetter 를 이용하여 일괄 인서트 */ @Override public int[] createEmpList(final List<Emp> emps) { String SQL = "insert into emp(empno, ename, sal) values (?, ?, ?)"; BatchPreparedStatementSetter setter = null; setter = new BatchPreparedStatementSetter() { @Override public int getBatchSize() { return emps.size(); } @Override public void setValues(PreparedStatement ps, int index) throws SQLException { Emp emp = emps.get(index); int parameterIndex = 1; ps.setString(parameterIndex++, emp.getEmpno()); ps.setString(parameterIndex++, emp.getEname()); ps.setString(parameterIndex++, emp.getSal()); } }; return jdbcTemplate.batchUpdate(SQL, setter); }
  • 11. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  DAO 서비스를 위한 클래스[EmpDao.java] /* 오라클 Stored Function 을 호출하여 10 번 부서 사원리스트 출 력(REF CURSOR) */ @Override public List<Emp> listEmp(Integer deptno) { SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(this.dataSource) .withSchemaName("scott") .withFunctionName("getEmp") .declareParameters( new SqlOutParameter("emp_cursor", OracleTypes.CURSOR, new EmpMapper()), new SqlParameter("v_deptno", Types.INTEGER)) .withoutProcedureColumnMetaDataAccess(); SqlParameterSource params = new MapSqlParameterSource("v_deptno", deptno); //execute 메서드는 Map 형태러 리턴한다. Map<String, Object> resultSet = simpleJdbcCall.execute(params); return (List<Emp>) resultSet.get("emp_cursor"); } }  매퍼 클래스[EmpMapper.java] package edu.onj.function; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class EmpMapper implements RowMapper<Emp> { @Override public Emp mapRow(ResultSet rs, int rowNum) throws SQLException { Emp emp = new Emp(); emp.setEmpno(rs.getString("empno")); emp.setEname(rs.getString("ename")); emp.setSal(rs.getString("sal")); return emp; } }
  • 12. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  XML 설정 파일[src/main/resources/jdbc.xml] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=http://www.springframework.org/schema/beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!-- Initialization for data source --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy- method="close"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value> </property> <property name="username"> <value>scott</value> </property> <property name="password"> <value>tiger</value> </property> </bean> <bean id="empDao" class=" edu.onj.function.EmpDaoImpl"> <property name="dataSource" ref="dataSource" /> </bean> </beans>
  • 13. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  클라이언트 main 함수[JdbcClient.java] package edu.onj.function; import java.util.ArrayList; import java.util.List; import org.springframework.context.support.GenericXmlApplicationContext; public class JdbcClient { public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("jdbc.xml"); ctx.refresh(); EmpDaoImpl empDao = (EmpDaoImpl)ctx.getBean("empDao"); //1. EMP TABLE 에서 부서코드가 10 인 데이터 추출 List<Emp> emps = empDao.listEmp(10); System.out.println("------------------ all select ------------------"); for (Emp emp : emps) { System.out.println("empno-->" + emp.getEmpno()); System.out.println("ename-->" + emp.getEname()); System.out.println("sal -->" + emp.getSal()); } emps.clear(); //2. BatchPreparedStatementSetter 를 이용하여 List 에 있는 것을 일괄 Insert emps.add(new Emp("9701", "1001 길동", "10010")); emps.add(new Emp("9702", "1002 길동", "10020")); emps.add(new Emp("9703", "1003 길동", "10030")); emps.add(new Emp("9704", "1004 길동", "10040")); emps.add(new Emp("9705", "1005 길동", "10050")); empDao.createEmpList(emps); //3.spring JDBC SimpleJdbcCall 을 이용한 오라클 함수(ref cursor 리턴)호출을 통한 10 번 부서 EMP 추출 ArrayList<Emp> emps2 = (ArrayList<Emp>)empDao.listEmp(new Integer(10)); for(Emp e: emps2) { System.out.println(e.getEmpno() + ":" + e.getEname() + ":" + e.getSal()); } ctx.close(); } }
  • 14. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-4. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate 위 예제의 listEmp() 메소드를 기존 자바 JDBC의 CallableStatementCallback을 이용한 방식으로 변경하면 다음과 같다.  @Override public List<Emp> listEmp2(final Integer deptno){ CallableStatementCallback<List<Emp>> cb = new CallableStatementCallback<List<Emp>>() { @Override public List<Emp> doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { cs.registerOutParameter(1, OracleTypes.CURSOR); cs.setInt(2, deptno); cs.execute(); ResultSet rs = (ResultSet) cs.getObject(1); List<Emp> emps = new ArrayList<Emp>(); EmpMapper mapper = new EmpMapper(); for (int i = 0; rs.next(); i++) { emps.add(mapper.mapRow(rs, i)); } return emps; } }; return jdbcTemplate.execute("{? = call getEmp(?)}", cb); }
  • 15. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-5. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  재사용 가능한 SQL Update 구문을 생성하며, 이를 위해 SqlUpdate 클래스를 상속받아서 구현해야 한다.  SqlUpdate를 상속받은 하위 클래스의 생성자에서 SQL 쿼리 구문(DML : insert, update, delete), 파라미터를 생성하고 compile() 메소드를 호출하여 컴파일 한다. 마지막으로 update() 메소드를 호출하여 해당 DML 쿼리를 실행한다.  public class PersonUpdate extends SqlUpdate { public PersonUpdate(final DataSource ds) { setDataSource(ds);//SqlUpdate의 메소드 호출 setSql("update Person set firstname = ?, lastname = ? where id = ?"); //SqlUpdate 메소드호출 declareParameter(new SqlParameter(Types.VARCHAR)); //SqlUpdate 메소드호출 declareParameter(new SqlParameter(Types.VARCHAR)); declareParameter(new SqlParameter(Types.INTRGER)); compile(); //SqlUpdate의 메소드 호출 }
  • 16. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-5. Spring JDBC에서 DB 접근하는 방법 - SimpleJdbcTemplate  //update 구문 실행 public int run(final Person person) { Object[] params = new Object[] { person.getFirstName(), person.getLastName(), person.getId()}; return update(params); } } public class PersonInsert extends SqlUpdate { public PersonInsert(final DataSource ds) { setDataSource(ds); setSql("insert into Person(id, firstname, lastname) values(?, ?, ?)"); declareParameter(new SqlParameter(Types.INTEGER)); declareParameter(new SqlParameter(Types.VARCHAR)); declareParameter(new SqlParameter(Types.VARCHAR)); compile(); } // insert 구문 실행 public int run(final Person person) { Object[] params = new Object[] { pserson.getId(), person.getFirstName(), person.getLastName()}; return update(params); } }
  • 17. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure  Spring JDBC의 StoredProcedure를 상속받아서 서버쪽의 저장함수나 프러시저에 접근 가능하다.  [Emp.java] package edu.onj.function2; public class Emp { private String empno; private String ename; private String sal; public Emp() {} public Emp(String empno, String ename, String sal) { this.empno = empno; this.ename = ename; this.sal = sal; } public void setEmpno(String empno) { this.empno = empno; } public void setEname(String ename) { this.ename = ename; }  [Emp.java] 이어서 public void setEname(String ename) { this.ename = ename; } public void setSal(String sal) { this.sal = sal; } public String getEmpno() { return empno; public String getEname() { return ename; } public String getSal() { return sal; } }
  • 18. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure  Spring JDBC의 StoredProcedure를 상속받아서 서버쪽의 저장함수나 프러시저에 접근 가능하다.  [EmpDao.java] package edu.onj.function2; import java.util.List; import javax.sql.DataSource; public interface EmpDao { public void setDataSource(DataSource ds); public List<Emp> listEmp(Integer deptno); }  [EmpMapper.java] package edu.onj.function2; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class EmpMapper implements RowMapper<Emp> { @Override public Emp mapRow(ResultSet rs, int rowNum) throws SQLException { Emp emp = new Emp(); emp.setEmpno(rs.getInt("empno")); emp.setEname(rs.getString("ename")); emp.setSal(rs.getInt("sal")); return emp; } }
  • 19. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure  Spring JDBC의 StoredProcedure를 상속받아서 서버쪽의 저장함수나 프러시저에 접근 가능하다.  [EmpJDBCTemplate.java] package edu.onj.function2; import java.sql.Types; import java.util.*; import javax.sql.DataSource; import oracle.jdbc.OracleTypes; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.StoredProcedure; public class EmpJDBCTemplate extends StoredProcedure implements EmpDao { private DataSource dataSource; private static final String SQL = "getEmp"; public EmpJDBCTemplate(DataSource dataSource) { super(dataSource, SQL); setFunction(true); declareParameter(new SqlOutParameter("emp_cursor", OracleTypes.CURSOR, new EmpMapper())); declareParameter(new SqlParameter("v_deptno", Types.INTEGER)); } @Override public List<Emp> listEmp(Integer deptno) { Map<String, Object> resultSet = execute(deptno); ArrayList<Emp> list = (ArrayList) resultSet.get("emp_cursor"); return list; } }  [JdbcClient.java] package edu.onj.function2; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import onj.edu.jdbc1.Customer; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class JdbcClient { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("jdbc2.xml"); EmpJDBCTemplate empJDBCTemplate =(EmpJDBCTemplate)ctx.getBean("empJDBCTemplate"); ArrayList<Emp> list = new ArrayList<Emp>(); list = (ArrayList<Emp>) empJDBCTemplate.listEmp(20); for (Emp emp:list){ System.out.println("empno --> "+emp.getEmpno()+" ename --> "+emp.getEname()+" sal --> "+emp.getSal() ); } } }
  • 20. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-6. Spring JDBC에서 DB 접근하는 방법 – StoredProcedure  [jdbc2.xml] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springfra mework.org/schema/beans/spring-beans-4.2.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroymethod="close"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value> </property> <property name="username"> <value>scott</value> </property> <property name="password"> <value>tiger</value> </property> </bean> <bean id="empJDBCTemplate" class=" edu.onj.function2.EmpJDBCTemplate"> <constructor-arg ref="dataSource"/> </bean> </beans>
  • 21. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  DataFieldMaxValueIncrementer 인터페이스는 DB 테이블의 칼럼값을 MAX VALUE까지 자동증분 하기 위 한 용도로 사용되는 스프링의 인터페이스 이다. 오라클 DB라면 시퀀스를 스프링에서 사용할 수 있게 해 준 다.  인터페이스의 구조는 다음과 같다.  public interface DataFieldMaxValueIncrementer { public int nextIntValue() throws DataAccessException; public long nextLongValue() throws DataAccessException; public String nextStringValue() throws DataAccessException; }  스프링배치에서는 기본적으로 , Oracle, DB2, Derby, Hsql, Mysql, Postgres, MS-SQL Server, Sybase 등의 주 요 DB에 대한 DataFieldMaxValueIncrementer의 구현 클래스가 제공되고 있다.  사용절차는 다음과 같다.
  • 22. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  1. Spring 설정파일에서 사용할 incrementer에 대해 정의 DB2는 SequenceMaxValueIncrementer, MySQL은 MySQLMaxValueIncrementer, PostgreSQL이라면 PostgreSQLSequenceMaxValueIncrementer, 오라클인 경우 OracleSequenceMaxValueIncrementer를 사용한다. <bean id="incrementer" class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="incrementerName"> <value>SEQ_SID</value> <!– 오라클에 만들어 놓은 시퀀스 이름 - </property> </bean> 2. Insert SQL문을 실행하는 부분에서 정의된 incrementer 사용 private DataFieldMaxValueIncrementer incrementer; public void setIncrementer(DataFieldMaxValueIncrementer incrementer) { this.incrementer = incrementer; } …. String strQuery = "INSERT INTO BOARD VALUES ( ?, ?, ?, ?, ?, sysdate) "; int currentSid =new Integer(incrementer.nextIntValue());
  • 23. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  사용 예제 1. [CustomerDao.java] package onj.edu.jdbc1; import java.util.List; import javax.sql.DataSource; public interface CustomerDAO { public void setDataSource(DataSource ds); public void create(Integer id, String name, Integer age); public Customer getCustomer(Integer id); public List<Customer> listCustomer(); public void delete(Integer id); public void update(Integer id, Integer age); }
  • 24. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  사용 예제 2. [CustomerJDBCTemplate.java] package onj.edu.jdbc1; import java.util.List; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer; public class CustomerJDBCTemplate implements CustomerDAO { private DataSource dataSource; private JdbcTemplate jdbcTemplate; private DataFieldMaxValueIncrementer incrementer; public void setIncrementer(DataFieldMaxValueIncrementer incrementer) { this.incrementer = incrementer; } public void setDataSource(DataSource ds) { this.dataSource = ds; this.jdbcTemplate = new JdbcTemplate(ds); } public void create(Integer id, String name, Integer age) { String SQL = "insert into customer(id, name, age) values (?, ?, ?)"; jdbcTemplate.update(SQL, new Integer(incrementer.nextIntValue()), name, age); System.out.println("<<<Customer insert ok ::: " + name + "," + age); }
  • 25. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  사용 예제 2. [CustomerJDBCTemplate.java] public Customer getCustomer(Integer id) { String SQL = "select * from customer where id = ?"; Customer customer = jdbcTemplate.queryForObject(SQL, new Object[] { id }, new CustomerMapper()); return customer; } public List<Customer> listCustomer() { String SQL = "select * from customer"; List<Customer> customer = jdbcTemplate.query(SQL, new CustomerMapper()); return customer; } public void delete(Integer id) { String SQL = "delete from customer where id = ?"; jdbcTemplate.update(SQL, id); System.out.println("<<< customer delete ok ::: id = " + id); } public void update(Integer id, Integer age) { String SQL = "update customer set age = ? where id = ?"; jdbcTemplate.update(SQL, age, id); System.out.println("<<< customer update ok ::: id = " + id); } }
  • 26. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  사용 예제 3. [CustomerMapper.java] package onj.edu.jdbc1; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class CustomerMapper implements RowMapper<Customer>{ @Override public Customer mapRow(ResultSet rs, int arg1) throws SQLException { Customer customer = new Customer(); customer.setId(rs.getInt("id")); customer.setName(rs.getString("name")); customer.setAge(rs.getInt("age")); return customer; } }
  • 27. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  사용 예제 4. [jdbc3.xml] <?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring- aop-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring- util-4.2.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value> </property> <property name="username"> <value>scott</value> </property>
  • 28. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  사용 예제 4. [jdbc3.xml] <property name="password"> <value>tiger</value> </property> </bean> <bean id="customerJDBCTemplate" class="onj.edu.jdbc1.CustomerJDBCTemplate"> <property name="dataSource" ref='dataSource'></property> <property name="incrementer" ref = "incrementer"></property> </bean> <bean id="incrementer" class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="incrementerName"> <value>SEQ_SID</value> <!-- 오라클에 만들어 놓은 시퀀스 이름 --> </property> </bean> </beans>
  • 29. 4. Spring JDBC 4-3. Spring JDBC에서 DataSource 취득하는 방법 4-3-7. 오라클 시퀀스를 위한 DataFieldMaxValueIncrementer  사용 예제 5. [JdbcClient.java] package onj.edu.jdbc1; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class JdbcClient { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("jdbc3.xml"); CustomerJDBCTemplate jdbcTemplate = (CustomerJDBCTemplate)ctx.getBean("customerJDBCTemplate"); jdbcTemplate.create(4, "4길동", 4); jdbcTemplate.create(5, "5길동", 5); jdbcTemplate.create(6, "6길동", 6); List <Customer> customers = jdbcTemplate.listCustomer(); System.out.println("------------------ all select ------------------"); for(Customer customer:customers){ System.out.println("id ----> "+customer.getId()); System.out.println("name ----> "+customer.getName()); System.out.println("age ----> "+customer.getAge()); } jdbcTemplate.update(4, 99); Customer customer = jdbcTemplate.getCustomer(4); System.out.println("--------- 변경된 4번 데이터 -------------"); System.out.println("id ----> "+customer.getId()); System.out.println("name ----> "+customer.getName()); System.out.println("age ----> "+customer.getAge()); + 이어서 jdbcTemplate.delete(5); customers = jdbcTemplate.listCustomer(); System.out.println("--------- 5번 삭제 후 ----------"); for(Customer customer1:customers){ System.out.println("id ----> "+customer1.getId()); System.out.println("name ----> "+customer1.getName()); System.out.println("age ----> "+customer1.getAge()); } }
  • 30. Any Questions ? THANK YOU FOR YOUR ATTENTION 무료국비지원교육 / 구로자바학원 _ 탑크리에듀 교육센터 http://www.topcredu.co.kr