Spring-JDBC 프레임 워크 개요

평범한 오래된 JDBC를 사용하여 데이터베이스로 작업하는 동안 예외 처리, 데이터베이스 연결 열기 및 닫기 등을 처리하기 위해 불필요한 코드를 작성하는 것이 번거 롭습니다. 그러나 Spring JDBC Framework는 연결 열기부터 시작하여 모든 하위 수준 세부 정보를 처리하고 준비합니다. SQL 문을 실행하고, 예외를 처리하고, 트랜잭션을 처리하고, 마지막으로 연결을 닫습니다.

따라서 연결 매개 변수를 정의하고 실행할 SQL 문을 지정하고 데이터베이스에서 데이터를 가져 오는 동안 각 반복에 필요한 작업을 수행하기 만하면됩니다.

Spring JDBC는 데이터베이스와 인터페이스하기 위해 여러 가지 접근 방식과 그에 따라 다른 클래스를 제공합니다. 저는 고전적이고 가장 인기있는 접근 방식을 사용하여JdbcTemplate프레임 워크의 클래스. 이것은 모든 데이터베이스 통신 및 예외 처리를 관리하는 중앙 프레임 워크 클래스입니다.

JdbcTemplate 클래스

JDBC 템플릿 클래스는 SQL 쿼리를 실행하고, 문을 업데이트하고, 프로 시저 호출을 저장하고, ResultSet에 대해 반복을 수행하고, 반환 된 매개 변수 값을 추출합니다. 또한 JDBC 예외를 포착하여 org.springframework.dao 패키지에 정의 된 일반적이고보다 유익한 예외 계층 구조로 변환합니다.

JdbcTemplate 클래스의 인스턴스는 일단 구성되면 스레드로부터 안전 합니다. 따라서 JdbcTemplate 의 단일 인스턴스를 구성한 다음이 공유 참조를 여러 DAO에 안전하게 삽입 할 수 있습니다 .

JDBC Template 클래스를 사용할 때 일반적인 관행은 Spring 구성 파일에서 DataSource 를 구성한 다음 해당 공유 DataSource bean을 DAO 클래스에 종속성 주입하고 JdbcTemplate은 DataSource의 setter에 생성됩니다.

데이터 소스 구성

데이터베이스 테이블을 생성하겠습니다. Student 우리 데이터베이스에서 TEST. MySQL 데이터베이스로 작업한다고 가정하고 다른 데이터베이스로 작업하는 경우 그에 따라 DDL 및 SQL 쿼리를 변경할 수 있습니다.

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);

이제 JDBC 템플릿에 데이터 소스를 제공하여 데이터베이스 액세스를 얻기 위해 자체 구성 할 수 있도록해야합니다. 다음 코드 스 니펫과 같이 코드 조각을 사용하여 XML 파일에서 DataSource를 구성 할 수 있습니다.

<bean id = "dataSource" 
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
   <property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
   <property name = "username" value = "root"/>
   <property name = "password" value = "password"/>
</bean>

데이터 액세스 개체 (DAO)

DAO는 일반적으로 데이터베이스 상호 작용에 사용되는 데이터 액세스 개체를 나타냅니다. DAO는 데이터베이스에 데이터를 읽고 쓰는 수단을 제공하기 위해 존재하며 나머지 응용 프로그램이 액세스 할 인터페이스를 통해이 기능을 노출해야합니다.

Spring의 DAO 지원으로 JDBC, Hibernate, JPA 또는 JDO와 같은 데이터 액세스 기술을 일관된 방식으로 쉽게 사용할 수 있습니다.

SQL 문 실행

SQL 및 JDBC 템플릿 객체를 사용하여 데이터베이스 테이블에서 CRUD (생성, 읽기, 업데이트 및 삭제) 작업을 수행하는 방법을 살펴 보겠습니다.

Querying for an integer

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

Querying for a long

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

A simple query using a bind variable

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

Querying for a String

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Querying and returning an object

String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(
   SQL, new Object[]{10}, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Querying and returning multiple objects

String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(
   SQL, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Inserting a row into the table

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

Updating a row into the table

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

Deleting a row from the table

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

DDL 문 실행

사용할 수 있습니다 execute(..)jdbcTemplate의 메서드 를 사용하여 SQL 문 또는 DDL 문을 실행합니다. 다음은 테이블을 생성하기 위해 CREATE 문을 사용하는 예입니다-

String SQL = "CREATE TABLE Student( " +
   "ID   INT NOT NULL AUTO_INCREMENT, " +
   "NAME VARCHAR(20) NOT NULL, " +
   "AGE  INT NOT NULL, " +
   "PRIMARY KEY (ID));"

jdbcTemplateObject.execute( SQL );

Spring JDBC 프레임 워크 예제

위의 개념을 바탕으로 Spring에서 JDBC 프레임 워크의 사용법을 이해하는 데 도움이 될 몇 가지 중요한 예를 살펴 보겠습니다.

Sr. 아니. 예 및 설명
1 Spring JDBC 예제

이 예제는 간단한 JDBC 기반 Spring 애플리케이션을 작성하는 방법을 설명합니다.

2 Spring의 SQL 저장 프로 시저

Spring에서 JDBC를 사용하는 동안 SQL 저장 프로 시저를 호출하는 방법을 알아 봅니다.