English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring JdbcTemplate 데이터베이스에 연결하고 SQL 쿼리를 실행할 수 있는 강력한 메커니즘입니다. 내부에서 JDBC API를 사용하지만, JDBC API의 많은 문제를 해결합니다.
JDBC API의 문제는 다음과 같습니다:
쿼리 실행 전 후에 많은 코드를 작성해야 합니다. 예를 들어, 연결, 문장, 결과 집합, 연결을 닫는 코드 등. 데이터베이스 로직에서 예외 처리 코드를 실행해야 합니다. 거래를 처리해야 합니다. 이러한 모든 코드를 하나의 데이터베이스 로직에서 다른 데이터베이스 로직으로 복사하는 것은 시간이 걸립니다.
Spring JdbcTemplate는 위의 모든 JDBC API 문제를 해결합니다. 직접 쿼리를 작성할 수 있어 많은 시간과 노력을 절약합니다.
Spring 프레임워크는 JDBC 데이터베이스 접근을 위한 다음과 같은 메서드를 제공합니다:
JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsert 및 SimpleJdbcCall
그것은 Spring JDBC 지원 클래스의 중심 클래스입니다. 연결 객체 생성 및 해제와 같은 자원 생성 및 해제를 담당합니다. 따라서 연결을 닫지 않아도 문제가 발생하지 않습니다.
이는 예외를 처리하고 예외 메시지를 제공합니다. org.springframework.dao 패키지에서 정의된 예외 클래스의 도움을 받습니다.
JdbcTemplate 클래스를 사용하여 모든 데이터베이스 작업을 수행할 수 있습니다. 예를 들어, 데이터베이스에서 삽입,수정,삭제 및 데이터를 검색합니다.
Spring JdbcTemplate 클래스의 메서드를 살펴보겠습니다.
메서드 | 설명 |
public int update(String query) | 삽입,수정 및 삭제 레코드를 위해 사용됩니다。 |
public int update(String query,Object ... args) | 주어진 매개변수를 사용하여 PreparedStatement를 통해 레코드를 삽입,수정 및 삭제하는 데 사용됩니다。 |
public void execute(String query) | DDL 쿼리를 실행하기 위해 사용됩니다。 |
public T execute(String sql, PreparedStatementCallback action) | PreparedStatement回调을 사용하여 쿼리를 실행합니다。 |
public T query(String sql, ResultSetExtractor rse) | ResultSetExtractor를 사용하여 레코드를 가져오기 위해 사용됩니다。 |
public List query(String sql, RowMapper rse) | RowMapper를 사용하여 레코드를 가져오기 위해 사용됩니다。 |
Oracle에서 이미 설치되어 있는 것을 가정합니다.10g 데이터베이스에서 다음 테이블을 생성했습니다。
create table employee( id number(10), name varchar2(100), salary number(10) );
Employee.java
이 클래스는 포함하고 있습니다3생성자와 setter와 getter를 포함한 속성을 가진 클래스.
package com.w3codebox; public class Employee { private int id; private String name; private float salary; //매개변수 없는 및 매개변수화된 생성자 //getters and setters }
EmployeeDao.java
이 클래스는 jdbcTemplate 속성과 saveEmployee(),updateEmployee 및 deleteEmployee() 세 가지 메서드를 포함하고 있습니다。
package com.w3codebox; import org.springframework.jdbc.core.JdbcTemplate; public class EmployeeDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public int saveEmployee(Employee e){ String query="insert into employee values('"+e.getId()+"','"+e.getName()+"','"+e.getSalary()+"');" return jdbcTemplate.update(query); } public int updateEmployee(Employee e){ String query="update employee set name='"+e.getName()+"',salary='"+e.getSalary()+"' where id='"+e.getId()+"'"; return jdbcTemplate.update(query); } public int deleteEmployee(Employee e){ String query="delete from employee where id='"+e.getId()+"'"; return jdbcTemplate.update(query); } }
applicationContext.xml
DriverManagerDataSource 데이터베이스에 대한 정보를 포함하는 이름이 있으며, 예를 들어 드라이버 클래스 이름, 연결 URL, 사용자 이름 및 비밀번호와 같습니다.
DriverManagerDataSource 타입의 JdbcTemplate 클래스에는 이름이 datasource 의 속성이 있습니다. 따라서 JdbcTemplate 클래스에서 데이터 소스 속성에 DriverManagerDataSource 객체의 참조를 제공해야 합니다.
여기서 우리는 EmployeeDao 클래스에서 JdbcTemplate 객체를 사용하므로 setter 메서드를 통해 전달했지만, 그렇지 않아도 사용할 수 있습니다.
<?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:p="http://www.springframework.org/schema/p xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"> /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="system"> /> <property name="password" value="oracle"> /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="ds"></property> </bean> <bean id="edao" class="com.w3codebox.EmployeeDao"> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> </beans>
Test.java
이 클래스는 applicationContext.xml 파일에서 Bean을 가져오고 saveEmployee() 메서드를 호출합니다. 또한 코드 주석을 제거하여 updateEmployee() 및 deleteEmployee() 메서드를 호출할 수 있습니다.
package com.w3codebox; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); EmployeeDao dao = (EmployeeDao)ctx.getBean("edao"); int status = dao.saveEmployee(new Employee(102,"Amit",35000)); System.out.println(status); /*int status = dao.updateEmployee(new Employee(102,"Sonoo",15000)); System.out.println(status); */ /*Employee e = new Employee(); e.setId(102); int status = dao.deleteEmployee(e); System.out.println(status);*/ } }