English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring JdbcTemplate チュートリアル

Spring JdbcTemplate データベースに接続しSQLクエリを実行できる強力なメカニズムです。内部でJDBC APIを使用していますが、JDBC APIの多くの問題を解消しています。

JDBC APIの問題

JDBC APIの問題は以下の通りです:

クエリの実行前後には、例えば接続、ステートメント、結果セットの閉じるなど、多くのコードを書く必要があります。 データベースロジック上で例外処理コードを実行する必要があります。 取引を処理する必要があります。 これらすべてのコードを一つのデータベースロジックから別のデータベースロジックに繰り返しすることは時間がかかります。

Spring JdbcTemplateの利点

Spring JdbcTemplateは上記のJDBC APIのすべての問題を解消しました。直接クエリを書く方法を提供し、多くの労力と時間を節約します。

Spring Jdbcメソッド

Springフレームワークは以下のJDBCデータベースアクセスのためのメソッドを提供しています:

JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsertおよびSimpleJdbcCall

JdbcTemplateクラス

それは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を使用してレコードを取得するためのものです。

Spring JdbcTemplateの例

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という3つのメソッドが含まれています。

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="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);*/
  
}
}