SlideShare a Scribd company logo
스프링프레임워크 & 마이바티스
(Spring Framework, MyBatis)
4-3-5. Spring JDBC에서 DB 접근하는 방법 – SqlUpdate
 재사용 가능한 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의 메소드 호출
}
//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-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;
}
public void setSal(String sal) {
this.sal = sal;
}
public String getEmpno() {
return empno;
public String getEname() {
return ename;
}
public String getSal() {
return sal;
}
}
[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;
}
}
[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() );
}
}
}
[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-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의 구현 클래스가 제공되고 있다.
 사용절차는 다음과 같다.
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());
 사용 예제
[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);
}
[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);
}
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);
}
}
[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;
}
}
[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>
<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.OracleSequenceMaxValueIncremen
ter">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="incrementerName">
<value>SEQ_SID</value> <!-- 오라클에 만들어 놓은 시퀀스 이름 -->
</property>
</bean>
</beans>
[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());
}
}
}

More Related Content

PDF
[스프링/Spring교육학원,자바교육,근로자교육,실업자교육추천학원_탑크리에듀]#6.스프링프레임워크 & 마이바티스 (Spring Framew...
PDF
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
PDF
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
PDF
#29.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
PDF
#31.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PPTX
Spring Framework Petclinic sample application
[스프링/Spring교육학원,자바교육,근로자교육,실업자교육추천학원_탑크리에듀]#6.스프링프레임워크 & 마이바티스 (Spring Framew...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
#29.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#31.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
Spring Framework Petclinic sample application

What's hot (20)

PDF
React, Redux and es6/7
ODP
Spring 4 advanced final_xtr_presentation
PPT
Jsp/Servlet
PDF
Demystifying AJAX Callback Commands in Drupal 8
PDF
Demystifying Drupal AJAX Callback Commands
PDF
Drupal8Day: Demystifying Drupal 8 Ajax Callback commands
PPTX
Jdk(java) 7 - 6 기타기능
TXT
Conexcion java mysql
PPT
JavaScript
PDF
Spring 4 - A&BP CC
PPTX
4.Spring IoC&DI(Spring Ioc실습_어노테이션 기반)
PDF
JavaFX Pitfalls
PDF
DataFX 8 (JavaOne 2014)
PDF
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
PDF
How to build to do app using vue composition api and vuex 4 with typescript
PDF
Practical Protocol-Oriented-Programming
PDF
Laravel Design Patterns
PDF
What's Coming in Spring 3.0
React, Redux and es6/7
Spring 4 advanced final_xtr_presentation
Jsp/Servlet
Demystifying AJAX Callback Commands in Drupal 8
Demystifying Drupal AJAX Callback Commands
Drupal8Day: Demystifying Drupal 8 Ajax Callback commands
Jdk(java) 7 - 6 기타기능
Conexcion java mysql
JavaScript
Spring 4 - A&BP CC
4.Spring IoC&DI(Spring Ioc실습_어노테이션 기반)
JavaFX Pitfalls
DataFX 8 (JavaOne 2014)
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
How to build to do app using vue composition api and vuex 4 with typescript
Practical Protocol-Oriented-Programming
Laravel Design Patterns
What's Coming in Spring 3.0
Ad

Viewers also liked (18)

PDF
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PDF
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
PDF
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PDF
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
PDF
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PDF
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
PDF
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
PDF
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
Ad

Similar to #18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/마이바티스학원추천 (20)

PDF
spring-tutorial
PPTX
preparecallablepptx__2023_09_11_14_40_58pptx__2024_09_23_11_14_59.pptx
PDF
Lecture17
DOCX
Advance Java Programs skeleton
PPT
JDBC for CSQL Database
PPT
CS124-L9-JDBC.ppt Add more information to your upload
PPT
JDBC JAVA DATABASE CONNECTIVITY AND JAVA
PPT
Jdbc
PPT
比XML更好用的Java Annotation
PPT
Sqlapi0.1
PDF
Modul Praktek Java OOP
PPT
JDBC Tutorial
PPT
Executing Sql Commands
PPT
Executing Sql Commands
PDF
Jdbc[1]
PDF
JDBC programming
PDF
Jdbc tutorial
DOCX
VISUALIZAR REGISTROS EN UN JTABLE
PPT
Data Access with JDBC
PPT
jdbc_presentation.ppt
spring-tutorial
preparecallablepptx__2023_09_11_14_40_58pptx__2024_09_23_11_14_59.pptx
Lecture17
Advance Java Programs skeleton
JDBC for CSQL Database
CS124-L9-JDBC.ppt Add more information to your upload
JDBC JAVA DATABASE CONNECTIVITY AND JAVA
Jdbc
比XML更好用的Java Annotation
Sqlapi0.1
Modul Praktek Java OOP
JDBC Tutorial
Executing Sql Commands
Executing Sql Commands
Jdbc[1]
JDBC programming
Jdbc tutorial
VISUALIZAR REGISTROS EN UN JTABLE
Data Access with JDBC
jdbc_presentation.ppt

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

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

Recently uploaded (20)

PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PDF
Insiders guide to clinical Medicine.pdf
PDF
Origin of periodic table-Mendeleev’s Periodic-Modern Periodic table
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PDF
VCE English Exam - Section C Student Revision Booklet
PDF
RMMM.pdf make it easy to upload and study
PDF
Supply Chain Operations Speaking Notes -ICLT Program
PPTX
Cell Types and Its function , kingdom of life
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
Complications of Minimal Access Surgery at WLH
PDF
Anesthesia in Laparoscopic Surgery in India
PPTX
Institutional Correction lecture only . . .
PDF
Classroom Observation Tools for Teachers
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
STATICS OF THE RIGID BODIES Hibbelers.pdf
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Module 4: Burden of Disease Tutorial Slides S2 2025
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Insiders guide to clinical Medicine.pdf
Origin of periodic table-Mendeleev’s Periodic-Modern Periodic table
FourierSeries-QuestionsWithAnswers(Part-A).pdf
Abdominal Access Techniques with Prof. Dr. R K Mishra
VCE English Exam - Section C Student Revision Booklet
RMMM.pdf make it easy to upload and study
Supply Chain Operations Speaking Notes -ICLT Program
Cell Types and Its function , kingdom of life
human mycosis Human fungal infections are called human mycosis..pptx
Complications of Minimal Access Surgery at WLH
Anesthesia in Laparoscopic Surgery in India
Institutional Correction lecture only . . .
Classroom Observation Tools for Teachers
Pharmacology of Heart Failure /Pharmacotherapy of CHF
school management -TNTEU- B.Ed., Semester II Unit 1.pptx

#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/마이바티스학원추천

  • 1. 스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis) 4-3-5. Spring JDBC에서 DB 접근하는 방법 – SqlUpdate  재사용 가능한 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의 메소드 호출 } //update 구문 실행 public int run(final Person person) { Object[] params = new Object[] { person.getFirstName(), person.getLastName(), person.getId()}; return update(params);
  • 2. } } 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-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;
  • 3. 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; } } [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> {
  • 4. @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; } } [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; } }
  • 5. [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() ); } } } [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>
  • 6. </property> <property name="password"> <value>tiger</value> </property> </bean> <bean id="empJDBCTemplate" class=" edu.onj.function2.EmpJDBCTemplate"> <constructor-arg ref="dataSource"/> </bean> </beans> 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의 구현 클래스가 제공되고 있다.  사용절차는 다음과 같다. 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>
  • 7. <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());  사용 예제 [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); } [CustomerJDBCTemplate.java] package onj.edu.jdbc1; import java.util.List; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate;
  • 8. 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); } 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);
  • 9. } 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); } } [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; } } [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
  • 10. 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> <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.OracleSequenceMaxValueIncremen ter"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="incrementerName"> <value>SEQ_SID</value> <!-- 오라클에 만들어 놓은 시퀀스 이름 --> </property> </bean> </beans>
  • 11. [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());