Spring JDBC - szybki przewodnik

Podczas pracy z bazą danych przy użyciu zwykłego starego JDBC pisanie niepotrzebnego kodu do obsługi wyjątków, otwierania i zamykania połączeń z bazą danych itp. Jednak Spring JDBC Framework zajmuje się wszystkimi niskopoziomowymi szczegółami, począwszy od otwarcia połączenia, przygotowania i wykonanie instrukcji SQL, przetwarzanie wyjątków, obsługa transakcji i wreszcie zamknięcie połączenia.

Wystarczy zdefiniować parametry połączenia i określić instrukcję SQL do wykonania oraz wykonać wymaganą pracę dla każdej iteracji podczas pobierania danych z bazy danych.

Spring JDBC zapewnia kilka podejść i odpowiednio różne klasy do połączenia z bazą danych. W tym tutorialu zajmiemy się klasycznym i najpopularniejszym podejściem, które wykorzystuje klasę JDBC Template frameworka. Jest to centralna klasa szkieletowa, która zarządza całą komunikacją z bazą danych i obsługą wyjątków.

Klasa szablonu JDBC

Klasa JDBC Template wykonuje zapytania SQL, aktualizuje instrukcje i wywołania procedur składowanych, wykonuje iterację zestawów wyników i wyodrębnia zwracane wartości parametrów. Przechwytuje również wyjątki JDBC i tłumaczy je na ogólną, zawierającą więcej informacji hierarchię wyjątków zdefiniowaną w pakiecie org.springframework.dao.

Instancje klasy JDBC Template są zabezpieczone wątkami po skonfigurowaniu. Możesz więc skonfigurować pojedynczą instancję szablonu JDBC, a następnie bezpiecznie wstrzyknąć to współużytkowane odniesienie do wielu DAO.

Typową praktyką podczas korzystania z klasy szablonu JDBC jest skonfigurowanie źródła danych w pliku konfiguracyjnym Spring, a następnie wstrzyknięcie współdzielonego komponentu bean DataSource do klas DAO. Szablon JDBC jest tworzony w programie ustawiającym dla źródła danych.

Obiekt dostępu do danych (DAO)

DAO oznacza Data Access Objectktóry jest powszechnie używany do interakcji z bazą danych. DAO istnieją, aby zapewnić środki do odczytu i zapisu danych w bazie danych i powinny udostępniać tę funkcjonalność poprzez interfejs, za pomocą którego reszta aplikacji będzie miała do nich dostęp.

Obsługa Data Access Object (DAO) w Spring ułatwia spójną pracę z technologiami dostępu do danych, takimi jak JDBC, Hibernate, JPA czy JDO.

Ten rozdział przeprowadzi Cię przez proces konfiguracji Spring-AOP w systemach opartych na Windows i Linux. Spring AOP można łatwo zainstalować i zintegrować z aktualnym środowiskiem Java i MAVEN, wykonując kilka prostych kroków bez skomplikowanych procedur konfiguracyjnych. Administracja użytkownikami jest wymagana podczas instalacji.

wymagania systemowe

JDK Java SE 2 JDK 1.5 lub nowsza
Pamięć 1 GB RAM (zalecane)
Miejsca na dysku Brak minimalnych wymagań
Wersja systemu operacyjnego Windows XP lub nowszy, Linux

Przejdźmy teraz do kroków instalacji Spring AOP.

Krok 1 - Zweryfikuj instalację Java

Przede wszystkim musisz mieć zainstalowany zestaw Java Software Development Kit (SDK) w swoim systemie. Aby to sprawdzić, wykonaj dowolne z następujących dwóch poleceń w zależności od platformy, na której pracujesz.

Jeśli instalacja Java została wykonana poprawnie, wyświetli się aktualna wersja i specyfikacja instalacji Java. Przykładowe dane wyjściowe podano w poniższej tabeli.

Platforma Komenda Przykładowe wyjście
Windows

Otwórz konsolę poleceń i wpisz -

\>java -version

Wersja Java „1.7.0_60”

Środowisko wykonawcze Java (TM) SE (kompilacja 1.7.0_60-b19)

Java Hotspot (TM) 64-bitowa maszyna wirtualna serwera (kompilacja 24.60-b09, tryb mieszany)

Linux

Otwórz terminal poleceń i wpisz -

$java -version

wersja java „1.7.0_25”

Otwórz środowisko wykonawcze JDK (rhel-2.3.10.4.el6_4-x86_64)

Otwórz 64-bitową maszynę wirtualną serwera JDK (kompilacja 23.7-b01, tryb mieszany)

Zakładamy, że czytelnicy tego samouczka mają zainstalowany pakiet Java SDK w wersji 1.7.0_60 w systemie. Jeśli nie masz Java SDK, pobierz jego aktualną wersję zhttps://www.oracle.com/technetwork/java/javase/downloads/index.html i zainstaluj.

Krok 2 - Ustaw środowisko Java

Ustaw zmienną środowiskową JAVA_HOME, aby wskazywała lokalizację katalogu podstawowego, w którym na komputerze jest zainstalowana Java. Na przykład,

Platforma Opis
Windows Ustaw JAVA_HOME na C: \ ProgramFiles \ java \ jdk1.7.0_60
Linux Eksportuj JAVA_HOME = / usr / local / java-current

Dołącz pełną ścieżkę lokalizacji kompilatora Java do ścieżki systemowej.

Platforma Opis
Windows Dołącz ciąg „C: \ Program Files \ Java \ jdk1.7.0_60 \ bin” na końcu zmiennej systemowej PATH.
Linux Export PATH = $ PATH: $ JAVA_HOME / bin /

Wykonaj polecenie java -version z wiersza polecenia, jak wyjaśniono powyżej.

Krok 3 - Pobierz archiwum Maven

Pobierz Maven 3.3.3 z https://maven.apache.org/download.cgi

OS Nazwa archiwum
Windows apache-maven-3.3.3-bin.zip
Linux apache-maven-3.3.3-bin.tar.gz
Prochowiec apache-maven-3.3.3-bin.tar.gz

Krok 4 - Rozpakuj archiwum Mavena

Wypakuj archiwum do katalogu, w którym chcesz zainstalować Maven 3.3.3. Z archiwum zostanie utworzony podkatalog apache-maven-3.3.3.

OS Lokalizacja (może się różnić w zależności od instalacji)
Windows C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3
Linux / usr / local / apache-maven
Prochowiec / usr / local / apache-maven

Krok 5 - Ustaw zmienne środowiskowe Maven

Dodaj M2_HOME, M2, MAVEN_OPTS do zmiennych środowiskowych.

OS Wynik
Windows

Ustaw zmienne środowiskowe za pomocą właściwości systemowych.

M2_HOME = C: \ Program Files \ Apache Software Foundation \ apachemaven-3.3.3

M2 =% M2_HOME% \ bin

MAVEN_OPTS = -Xms256m -Xmx512m

Linux

Otwórz terminal poleceń i ustaw zmienne środowiskowe.

eksport M2_HOME = /usr/local/apache-maven/apache-maven-3.3.3

eksport M2 = $ M2_HOME / bin

eksport MAVEN_OPTS = -Xms256m -Xmx512m

Prochowiec

Otwórz terminal poleceń i ustaw zmienne środowiskowe.

eksport M2_HOME = /usr/local/apache-maven/apache-maven-3.3.3

eksport M2 = $ M2_HOME / bin

eksport MAVEN_OPTS = -Xms256m -Xmx512m

Krok 6 - Dodaj lokalizację katalogu Maven Bin do ścieżki systemowej

Teraz dołącz zmienną M2 do ścieżki systemowej.

OS Wynik
Windows Dołącz ciąg;% M2% na końcu zmiennej systemowej, Path.
Linux export PATH = $ M2: $ PATH
Prochowiec export PATH = $ M2: $ PATH

Krok 7 - Zweryfikuj instalację Maven

Teraz otwórz konsolę, wykonaj następujące czynności mvn Komenda.

OS Zadanie Komenda
Windows Otwórz konsolę poleceń c: \> mvn --version
Linux Otwórz terminal poleceń $ mvn --version
Prochowiec Otwórz terminal maszyna: <joseph $ mvn --version

Na koniec sprawdź wyjście powyższych poleceń, które powinno wyglądać następująco -

OS Wynik
Windows

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30)

Strona główna Mavena: C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3

Wersja Java: 1.7.0_75, producent: Oracle Corporation

Strona główna Java: C: \ Program Files \ Java \ jdk1.7.0_75 \ jre

Domyślne ustawienia regionalne: en_US, kodowanie platformy: Cp1252

Linux

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30)

Strona główna Mavena: /usr/local/apache-maven/apache-maven-3.3.3

Wersja Java: 1.7.0_75, producent: Oracle Corporation

Strona główna Java: /usr/local/java-current/jdk1.7.0_75/jre

Prochowiec

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17: 27: 37 + 05: 30)

Strona główna Mavena: /usr/local/apache-maven/apache-maven-3.3.3

Wersja Java: 1.7.0_75, producent: Oracle Corporation

Strona główna Java: /Library/Java/Home/jdk1.7.0_75/jre

Krok 8 - Skonfiguruj Eclipse IDE

Wszystkie przykłady w tym samouczku zostały napisane przy użyciu Eclipse IDE. Sugerowałbym więc, abyś miał zainstalowaną najnowszą wersję Eclipse na swoim komputerze.

Aby zainstalować Eclipse IDE, pobierz najnowsze pliki binarne Eclipse z https://www.eclipse.org/downloads/. Po pobraniu instalacji rozpakuj dystrybucję binarną w dogodnym miejscu. Na przykład w C: \ eclipse w systemie Windows lub / usr / local / eclipse w systemie Linux / Unix. Na koniec odpowiednio ustaw zmienną PATH.

Eclipse można uruchomić, wykonując następujące polecenia na komputerze z systemem Windows lub klikając dwukrotnie plik eclipse.exe.

%C:\eclipse\eclipse.exe

Eclipse można uruchomić, wykonując następujące polecenia na komputerze z systemem Unix (Solaris, Linux itp.).

$/usr/local/eclipse/eclipse

Po udanym uruchomieniu, jeśli wszystko jest w porządku, powinien wyświetlić następujący wynik.

Po wykonaniu tego ostatniego kroku możesz przejść do pierwszego przykładu JDBC, który zobaczysz w następnym rozdziale.

Stwórzmy tabelę bazy danych Student w naszej bazie danych TEST. Zakładam, że pracujesz z bazą danych MySQL, jeśli pracujesz z jakąkolwiek inną bazą danych, możesz odpowiednio zmienić swoje zapytania DDL i SQL.

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

Teraz musimy dostarczyć źródło danych do szablonu JDBC, aby mógł skonfigurować się w celu uzyskania dostępu do bazy danych. Możesz skonfigurować źródło danych w pliku XML za pomocą fragmentu kodu pokazanego w następujący sposób -

<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 = "admin"/>
</bean>

W następnym rozdziale napiszemy pierwszą aplikację korzystającą ze skonfigurowanej bazy danych.

Aby zrozumieć pojęcia związane ze strukturą Spring JDBC z klasą JDBC Template, napiszemy prosty przykład, który zaimplementuje operacje Insert i Read w poniższej tabeli Student.

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

Przejdźmy do napisania prostej aplikacji Spring JDBC opartej na konsoli, która zademonstruje koncepcje JDBC.

Utwórz projekt

Otwórzmy konsolę poleceń, przejdź do katalogu C: \ MVN i wykonaj następujące czynności mvn Komenda.

C:\MVN>mvn archetype:generate -DgroupId = com.tutorialspoint -DartifactId = Student
   -DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

Maven rozpocznie przetwarzanie i utworzy pełną strukturę projektu aplikacji Java.

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Batch mode
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/ma
ven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/mav
en-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.jar (5 KB at 1.1 KB/s
ec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/ma
ven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/mav
en-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.pom (703 B at 1.2 KB/
sec)
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: com.tutorialspoint
[INFO] Parameter: packageName, Value: com.tutorialspoint
[INFO] Parameter: package, Value: com.tutorialspoint
[INFO] Parameter: artifactId, Value: Student
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\Student
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:17 min
[INFO] Finished at: 2017-02-19T21:11:14+05:30
[INFO] Final Memory: 15M/114M
[INFO] ------------------------------------------------------------------------

Teraz przejdź do katalogu C: / MVN. Zostanie wyświetlony projekt aplikacji Java utworzony o nazwie student (zgodnie z artifactId). Zaktualizuj plik POM.xml, aby uwzględnić zależności Spring JDBC. Dodaj pliki Student.java, StudentMapper.java, MainApp.java, StudentDAO.java i StudentJDBCTemplate.java.

POM.xml

<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/maven-v4_0_0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint</groupId>
   <artifactId>Student</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>Student</name>
   <url>http://maven.apache.org</url>
   
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
      
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <version>4.1.0.RELEASE</version>
      </dependency>
      
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>4.1.4.RELEASE</version>
      </dependency>
   </dependencies>
   
</project>

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to create
      * a record in the Student table.
   */
   public void create(String name, Integer age);
   public Student getStudent(Integer id);
   
   /** 
     * This is the method to be used to list down
     * all the records from the Student table.
   */
   public List<Student> listStudents();
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public void create(String name, Integer age) {
      String SQL = "insert into Student (name, age) values (?, ?)";
      
      jdbcTemplateObject.update( SQL, name, age);
      System.out.println("Created Record Name = " + name + " Age = " + age);
      return;
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate)
         context.getBean("studentJDBCTemplate");
      
      System.out.println("------Records Creation--------" );
      studentJDBCTemplate.create("Zara", 11);
      studentJDBCTemplate.create("Nuha", 2);
      studentJDBCTemplate.create("Ayan", 15);

      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

------Records Creation--------
Created Record Name = Zara Age = 11
Created Record Name = Nuha Age = 2
Created Record Name = Ayan Age = 15
------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 11
ID : 2, Name : Nuha, Age : 2
ID : 3, Name : Ayan, Age : 15

Poniższy przykład pokaże, jak utworzyć zapytanie za pomocą Wstaw zapytanie przy pomocy Spring JDBC. Wstawimy kilka rekordów w tabeli uczniów.

Składnia

String insertQuery = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( insertQuery, name, age);

Gdzie,

  • insertQuery - Wstaw zapytanie zawierające symbole zastępcze.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do wstawiania obiektu studenta do bazy danych.

Aby zrozumieć wspomniane wyżej koncepcje związane z Spring JDBC, napiszmy przykład, który wstawi zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt utworzony przez ucznia w rozdzialeSpring JDBC - First Application.
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
     * This is the method to be used to create
     * a record in the Student table.
   */
   public void create(String name, Integer age);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public void create(String name, Integer age) {
      String insertQuery = "insert into Student (name, age) values (?, ?)";
      jdbcTemplateObject.update( insertQuery, name, age);
      System.out.println("Created Record Name = " + name + " Age = " + age);
      return;
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("------Records Creation--------" );
      studentJDBCTemplate.create("Zara", 11);
      studentJDBCTemplate.create("Nuha", 2);
      studentJDBCTemplate.create("Ayan", 15);

      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

------Records Creation--------
Created Record Name = Zara Age = 11
Created Record Name = Nuha Age = 2
Created Record Name = Ayan Age = 15
------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 11
ID : 2, Name : Nuha, Age : 2
ID : 3, Name : Ayan, Age : 15

Poniższy przykład pokaże, jak czytać zapytanie przy użyciu Spring JDBC. Przeczytamy dostępne rekordy w tabeli uczniów.

Składnia

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

Gdzie,

  • selectQuery - Wybierz zapytanie, aby przeczytać uczniów.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu obiektu studenta z bazy danych.

  • StudentMapper - StudentMapper to obiekt RowMapper do mapowania każdego pobranego rekordu na obiekt ucznia.

Aby zrozumieć wspomniane wyżej pojęcia związane z Spring JDBC, napiszmy przykład, który wybierze zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id="studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 11
ID : 2, Name : Nuha, Age : 2
ID : 3, Name : Ayan, Age : 15

Poniższy przykład pokaże, jak zaktualizować zapytanie za pomocą Spring JDBC. Zaktualizujemy dostępne rekordy w tabeli uczniów.

Składnia

String updateQuery = "update Student set age = ? where id = ?";
jdbcTemplateObject.update(updateQuery, age, id);

Gdzie,

  • updateQuery - Zaktualizuj zapytanie, aby zaktualizować studenta z posiadaczami miejsc.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do aktualizacji obiektu studenta w bazie danych.

Aby zrozumieć powyższe koncepcje związane z Spring JDBC, napiszmy przykład, który zaktualizuje zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to update
      * a record into the Student table.
   */
   public void update(Integer id, Integer age);

   /** 
      * This is the method to be used to list down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public void update(Integer id, Integer age){
      String SQL = "update Student set age = ? where id = ?";
      jdbcTemplateObject.update(SQL, age, id);
      System.out.println("Updated Record with ID = " + id );
      return;
   }
   public Student getStudent(Integer id) {
      String SQL = "select * from Student where id = ?";
      Student student = jdbcTemplateObject.queryForObject(
         SQL, new Object[]{id}, new StudentMapper());
      
      return student;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("----Updating Record with ID = 2 -----" );
      studentJDBCTemplate.update(2, 20);
      
      System.out.println("----Listing Record with ID = 2 -----" );
      Student student = studentJDBCTemplate.getStudent(2);
      System.out.print("ID : " + student.getId() );
      System.out.print(", Name : " + student.getName() );
      System.out.println(", Age : " + student.getAge());  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

----Updating Record with ID = 2 -----
Updated Record with ID = 2
----Listing Record with ID = 2 -----
ID : 2, Name : Nuha, Age : 20

Poniższy przykład pokaże, jak usunąć zapytanie za pomocą Spring JDBC. Usuniemy jeden z dostępnych rekordów w tabeli uczniów.

Składnia

String deleteQuery = "delete from Student where id = ?";
jdbcTemplateObject.update(deleteQuery, id);

Gdzie,

  • deleteQuery - Usuń zapytanie, aby usunąć studenta z symbolami zastępczymi.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do usunięcia obiektu studenta z bazy danych.

Aby zrozumieć wspomniane wyżej koncepcje związane z Spring JDBC, napiszmy przykład, który usunie zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();
   
   /** 
      * This is the method to be used to delete
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public void delete(Integer id); 
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
   public void delete(Integer id){
      String SQL = "delete from Student where id = ?";
      jdbcTemplateObject.update(SQL, id);
      System.out.println("Deleted Record with ID = " + id );
      return;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("----Delete Record with ID = 2 -----" );
      studentJDBCTemplate.delete(2);

      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }     
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource"  ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

----Updating Record with ID = 2 -----
Updated Record with ID = 2
----Listing Record with ID = 2 -----
ID : 2, Name : Nuha, Age : 20

Poniższy przykład pokaże, jak wywołać procedurę składowaną przy użyciu Spring JDBC. Odczytujemy jeden z dostępnych rekordów w tabeli uczniów, wywołując procedurę składowaną. Przekażemy legitymację i otrzymamy kartę studenta.

Składnia

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("getRecord");
SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
Map<String, Object> out = jdbcCall.execute(in);

Student student = new Student();
student.setId(id);
student.setName((String) out.get("out_name"));
student.setAge((Integer) out.get("out_age"));

Gdzie,

  • jdbcCall - Obiekt SimpleJdbcCall do reprezentowania procedury składowanej.

  • in - SqlParameterSource do przekazania parametru do procedury składowanej.

  • student - Obiekt studencki.

  • out - Obiekt Map do reprezentowania wyniku wywołania procedury składowanej.

Plik SimpleJdbcCallklasa może służyć do wywoływania procedury składowanej z parametrami IN i OUT. Z tej metody można korzystać podczas pracy z dowolnym systemem RDBMS, takim jak Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle i Sybase.

Aby zrozumieć to podejście, należy rozważyć następującą procedurę składowaną MySQL, która pobiera identyfikator ucznia i zwraca jego imię i nazwisko oraz wiek za pomocą parametrów OUT. Utwórzmy tę procedurę składowaną w bazie danych TEST za pomocą wiersza poleceń MySQL -

DELIMITER $$ DROP PROCEDURE IF EXISTS `TEST`.`getRecord` $$
CREATE PROCEDURE `TEST`.`getRecord` (
IN in_id INTEGER,
OUT out_name VARCHAR(20),
OUT out_age  INTEGER)
BEGIN
   SELECT name, age
   INTO out_name, out_age
   FROM Student where id = in_id;
END $$

DELIMITER ;

Aby zrozumieć wspomniane powyżej koncepcje związane z Spring JDBC, napiszmy przykład, który wywoła procedurę składowaną. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);  
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public Student getStudent(Integer id) {
      SimpleJdbcCall jdbcCall = new 
         SimpleJdbcCall(dataSource).withProcedureName("getRecord");

      SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
      Map<String, Object> out = jdbcCall.execute(in);

      Student student = new Student();
      student.setId(id);
      student.setName((String) out.get("out_name"));
      student.setAge((Integer) out.get("out_age"));
      return student;      
   }
}

Kod, który piszesz w celu wykonania wywołania, obejmuje utworzenie SqlParameterSource zawierającego parametr IN. Ważne jest, aby dopasować nazwę podaną dla wartości wejściowej z nazwą parametru zadeklarowaną w procedurze składowanej. Metoda execute przyjmuje parametry IN i zwraca Map zawierającą wszystkie parametry wyjściowe z kluczem o nazwie określonej w procedurze składowanej.

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      Student student = studentJDBCTemplate.getStudent(1);
      System.out.print("ID : " + student.getId() );
      System.out.print(", Name : " + student.getName() );
      System.out.println(", Age : " + student.getAge()); 
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

ID : 1, Name : Zara, Age : 11

Poniższy przykład pokaże, jak wywołać funkcję składowaną za pomocą Spring JDBC. Odczytujemy jeden z dostępnych rekordów w tabeli ucznia, wywołując zapisaną funkcję. Przekażemy identyfikator i otrzymamy nazwisko ucznia.

Składnia

SimpleJdbcCall jdbcCall = new 
   SimpleJdbcCall(dataSource).withFunctionName("get_student_name");

SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
String name = jdbcCall.executeFunction(String.class, in);

Student student = new Student();
student.setId(id);
student.setName(name);

Gdzie,

  • in - SqlParameterSource do przekazania parametru do funkcji przechowywanej.

  • jdbcCall - Obiekt SimpleJdbcCall do reprezentowania przechowywanej funkcji.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do wywołania funkcji przechowywanej z bazy danych.

  • student - Obiekt studencki.

Plik SimpleJdbcCallclass może służyć do wywoływania funkcji przechowywanej z parametrem IN i wartością zwracaną. Z tej metody można korzystać podczas pracy z dowolnym systemem RDBMS, takim jak Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle i Sybase.

Aby zrozumieć to podejście, należy rozważyć następującą procedurę składowaną MySQL, która pobiera identyfikator studenta i zwraca jego nazwisko. Stwórzmy więc tę zapisaną funkcję w bazie danych TEST za pomocą wiersza poleceń MySQL -

DELIMITER $$

DROP FUNCTION IF EXISTS `TEST`.`get_student_name` $$
CREATE FUNCTION `get_student_name` (in_id INTEGER)
RETURNS varchar(200)
BEGIN
DECLARE out_name VARCHAR(200);
   SELECT name
   INTO out_name
   FROM Student where id = in_id;

RETURN out_name;

DELIMITER ;

Aby zrozumieć wspomniane wyżej pojęcia związane z Spring JDBC, napiszmy przykład, który wywoła zapisaną funkcję. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);  
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public Student getStudent(Integer id) {
      SimpleJdbcCall jdbcCall = new 
         SimpleJdbcCall(dataSource).withFunctionName("get_student_name");
	   
      SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
      String name = jdbcCall.executeFunction(String.class, in);
      Student student = new Student();
      student.setId(id);
      student.setName(name);
      return student;      
   }
}

Kod, który piszesz w celu wykonania wywołania, obejmuje utworzenie SqlParameterSource zawierającego parametr IN. Ważne jest, aby dopasować nazwę podaną dla wartości wejściowej z nazwą parametru zadeklarowaną w funkcji przechowywanej. Metoda executeFunction przyjmuje parametry IN i zwraca String zgodnie z zapisaną funkcją.

Poniżej znajduje się zawartość MainApp.java plik

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      Student student = studentJDBCTemplate.getStudent(1);
      System.out.print("ID : " + student.getId() );
      System.out.print(", Name : " + student.getName() );
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

ID : 1, Name : Zara

Poniższy przykład pokaże, jak zaktualizować BLOB za pomocą zapytania aktualizacyjnego przy pomocy Spring JDBC. Zaktualizujemy dostępne rekordy w tabeli uczniów.

Tabela uczniów

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

Składnia

MapSqlParameterSource in = new MapSqlParameterSource();
in.addValue("id", id);
in.addValue("image",  new SqlLobValue(new ByteArrayInputStream(imageData), 
   imageData.length, new DefaultLobHandler()), Types.BLOB);

String SQL = "update Student set image = :image where id = :id";
NamedParameterJdbcTemplate jdbcTemplateObject = new NamedParameterJdbcTemplate(dataSource);
jdbcTemplateObject.update(SQL, in);

Gdzie,

  • in - SqlParameterSource do przekazania parametru w celu zaktualizowania zapytania.

  • SqlLobValue - Obiekt do reprezentowania parametru wartości BLOB / CLOB SQL.

  • jdbcTemplateObject - Obiekt NamedParameterJdbcTemplate do aktualizacji obiektu ucznia w bazie danych.

Aby zrozumieć powyższe koncepcje związane z Spring JDBC, napiszmy przykład, który zaktualizuje zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to update
      * a record into the Student table.
   */
   public void updateImage(Integer id, byte[] imageData);
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;
   private byte[] image;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
   public byte[] getImage() {
      return image;
   }
   public void setImage(byte[] image) {
      this.image = image;
   }
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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"));
      student.setImage(rs.getBytes("image"));
      return student;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.jdbc.core.support.SqlLobValue;
import org.springframework.jdbc.support.lob.DefaultLobHandler;

import java.io.ByteArrayInputStream;
import java.sql.Types;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
   }
   public void updateImage(Integer id, byte[] imageData) {
      MapSqlParameterSource in = new MapSqlParameterSource();
      in.addValue("id", id);
      in.addValue("image",  new SqlLobValue(new ByteArrayInputStream(imageData), 
         imageData.length, new DefaultLobHandler()), Types.BLOB);

      String SQL = "update Student set image = :image where id = :id";
      NamedParameterJdbcTemplate jdbcTemplateObject = new 
         NamedParameterJdbcTemplate(dataSource);
      
      jdbcTemplateObject.update(SQL, in);
      System.out.println("Updated Record with ID = " + id );
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      byte[] imageData = {0,1,0,8,20,40,95};
      studentJDBCTemplate.updateImage(1, imageData);  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

Updated Record with ID = 1

Możesz sprawdzić przechowywany bajt [], wysyłając zapytanie do bazy danych.

Poniższy przykład pokaże, jak zaktualizować CLOB przy użyciu zapytania aktualizacyjnego przy pomocy Spring JDBC. Zaktualizujemy dostępne rekordy w tabeli uczniów.

Tabela uczniów

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

Składnia

MapSqlParameterSource in = new MapSqlParameterSource();
in.addValue("id", id);
in.addValue("description",  new SqlLobValue(
   description, new DefaultLobHandler()), Types.CLOB);

String SQL = "update Student set description = :description where id = :id";
NamedParameterJdbcTemplate jdbcTemplateObject = new NamedParameterJdbcTemplate(dataSource);

jdbcTemplateObject.update(SQL, in);

Gdzie,

  • in - SqlParameterSource do przekazania parametru w celu zaktualizowania zapytania.

  • SqlLobValue - Obiekt do reprezentowania parametru wartości BLOB / CLOB SQL.

  • jdbcTemplateObject - Obiekt NamedParameterJdbcTemplate do aktualizacji obiektu ucznia w bazie danych.

Aby zrozumieć wspomniane wyżej pojęcia związane z Spring JDBC, napiszmy przykład, który zaktualizuje zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to update
      * a record into the Student table.
   */
   public void updateDescription(Integer id, String description);
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;
   private String description;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
   public String getDescription() {
      return description;
   }
   public void setDescription(String description) {
      this.description = description;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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"));
      student.setDescription(rs.getString("description"));
      return student;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.jdbc.core.support.SqlLobValue;
import org.springframework.jdbc.support.lob.DefaultLobHandler;

import java.io.ByteArrayInputStream;
import java.sql.Types;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
   }
   public void updateDescription(Integer id, String description) {
      MapSqlParameterSource in = new MapSqlParameterSource();
      in.addValue("id", id);
      in.addValue("description",  new SqlLobValue(description, 
         new DefaultLobHandler()), Types.CLOB);

      String SQL = "update Student set description = :description where id = :id";
      NamedParameterJdbcTemplate jdbcTemplateObject = new 
         NamedParameterJdbcTemplate(dataSource);
      
      jdbcTemplateObject.update(SQL, in);
      System.out.println("Updated Record with ID = " + id );
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      studentJDBCTemplate.updateDescription(1, 
         "This can be a very long text upto 4 GB of size."); 
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

Updated Record with ID = 1

Możesz sprawdzić zapisany opis, wysyłając zapytanie do bazy danych.

Poniższy przykład pokaże, jak wykonać aktualizację wsadową za pomocą Spring JDBC. Zaktualizujemy dostępne rekordy w tabeli uczniów w jednej operacji wsadowej.

Składnia

String SQL = "update Student set age = ? where id = ?";
int[] updateCounts = jdbcTemplateObject.batchUpdate(SQL,
   new BatchPreparedStatementSetter() {
   
   public void setValues(PreparedStatement ps, int i) throws SQLException {
      ps.setInt(1, students.get(i).getAge());						
      ps.setInt(2, students.get(i).getId());	
   }
   public int getBatchSize() {
      return students.size();
   }
});

Gdzie,

  • SQL - Zaktualizuj zapytanie, aby zaktualizować wiek ucznia.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do aktualizacji obiektu studenta w bazie danych.

  • BatchPreparedStatementSetter- Wykonacz wsadowy, ustaw wartości w PerparedStatement dla pozycji zidentyfikowanej przez listę obiektów student i indeks i. getBatchSize () zwraca rozmiar wsadu.

  • updateCounts - Tablica Int zawierająca zaktualizowaną liczbę wierszy na zapytanie aktualizacyjne.

Aby zrozumieć wspomniane powyżej koncepcje związane z Spring JDBC, napiszmy przykład, który zaktualizuje operację wsadową. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();  

   public void batchUpdate(final List<Student> students);
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.sql.PreparedStatement;
import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import java.sql.SQLException;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, 
                                new StudentMapper());
      return students;
   }
   public void batchUpdate(final List<Student> students){
      String SQL = "update Student set age = ? where id = ?";
      int[] updateCounts = jdbcTemplateObject.batchUpdate(SQL,
         new BatchPreparedStatementSetter() {
         
         public void setValues(PreparedStatement ps, int i) throws SQLException {
            ps.setInt(1, students.get(i).getAge());						
            ps.setInt(2, students.get(i).getId());	
         }
         public int getBatchSize() {
            return students.size();
         }
      }); 
      System.out.println("Records updated!");
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");

      List<Student> initialStudents = studentJDBCTemplate.listStudents();
      System.out.println("Initial Students");
      
      for(Student student2: initialStudents){
         System.out.print("ID : " + student2.getId() );
         System.out.println(", Age : " + student2.getAge()); 
      }

      Student student = new Student();
      student.setId(1);
      student.setAge(10);

      Student student1 = new Student();
      student1.setId(3);
      student1.setAge(10);

      List<Student> students = new ArrayList<Student>();
      students.add(student);
      students.add(student1);

      studentJDBCTemplate.batchUpdate(students);

      List<Student> updatedStudents = studentJDBCTemplate.listStudents();
      System.out.println("Updated Students");
      
      for(Student student3: updatedStudents){
         System.out.print("ID : " + student3.getId() );
         System.out.println(", Age : " + student3.getAge()); 
      }
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

Initial Students
ID : 1, Age : 11
ID : 3, Age : 15
Records updated!
Updated Students
ID : 1, Age : 10
ID : 3, Age : 10

Poniższy przykład pokaże, jak wykonać aktualizację wsadową przy użyciu obiektów w Spring JDBC. Zaktualizujemy dostępne rekordy w tabeli uczniów w jednej operacji wsadowej.

Składnia

String SQL = "update Student set age = :age where id = :id";
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(students.toArray());

NamedParameterJdbcTemplate jdbcTemplateObject = new NamedParameterJdbcTemplate(dataSource);

int[] updateCounts = jdbcTemplateObject.batchUpdate(SQL,batch);
System.out.println("records updated!");

Gdzie,

  • SQL - Zaktualizuj zapytanie, aby zaktualizować wiek ucznia.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do aktualizacji obiektu studenta w bazie danych.

  • batch - obiekt SqlParameterSource do reprezentowania partii obiektu.

  • updateCounts - Tablica Int zawierająca zaktualizowaną liczbę wierszy na zapytanie aktualizacyjne.

Aby zrozumieć wspomniane powyżej koncepcje związane z Spring JDBC, napiszmy przykład, który zaktualizuje operację wsadową. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();  

   public void batchUpdate(final List<Student> students);
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
   public void batchUpdate(final List<Student> students){
      String SQL = "update Student set age = :age where id = :id";
      SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(students.toArray());
      NamedParameterJdbcTemplate jdbcTemplateObject = new 
         NamedParameterJdbcTemplate(dataSource);

      int[] updateCounts = jdbcTemplateObject.batchUpdate(SQL,batch);
      System.out.println("Records updated!");
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");

      List<Student> initialStudents = studentJDBCTemplate.listStudents();
      System.out.println("Initial Students");
      
      for(Student student2: initialStudents){
         System.out.print("ID : " + student2.getId() );
         System.out.println(", Age : " + student2.getAge()); 
      }
      Student student = new Student();
      student.setId(1);
      student.setAge(15);

      Student student1 = new Student();
      student1.setId(3);
      student1.setAge(16);

      List<Student> students = new ArrayList<Student>();
      students.add(student);
      students.add(student1);

      studentJDBCTemplate.batchUpdate(students);

      List<Student> updatedStudents = studentJDBCTemplate.listStudents();
      System.out.println("Updated Students");
      
      for(Student student3: updatedStudents){
         System.out.print("ID : " + student3.getId() );
         System.out.println(", Age : " + student3.getAge()); 
      }
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

Initial Students
ID : 1, Age : 10
ID : 3, Age : 10
Records updated!
Updated Students
ID : 1, Age : 15
ID : 3, Age : 16

Poniższy przykład pokaże, jak wykonać wiele aktualizacji wsadowych w jednym wywołaniu przy użyciu Spring JDBC. Zaktualizujemy dostępne rekordy w tabeli Studentów w przypadku wielu operacji wsadowych, w których rozmiar partii wynosi 1.

Składnia

String SQL = "update Student set age = ? where id = ?";
int[][] updateCounts = jdbcTemplateObject.batchUpdate(SQL,students,1,
   new ParameterizedPreparedStatementSetter<Student>() {
   
   public void setValues(PreparedStatement ps, Student student)
      throws SQLException {
      ps.setInt(1, student.getAge());						
      ps.setInt(2, student.getId());	
   }
});

Gdzie,

  • SQL - Zaktualizuj zapytanie, aby zaktualizować wiek ucznia.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do aktualizacji obiektu studenta w bazie danych.

  • ParameterizedPreparedStatementSetter - Wykonacz wsadowy, ustawia wartości w PerparedStatement dla pozycji zidentyfikowanej przez listę obiektów studenta.

  • updateCounts - Tablica Int [] [] zawierająca zaktualizowaną liczbę wierszy na zapytanie aktualizacyjne na partię.

Aby zrozumieć wspomniane wyżej koncepcje związane z Spring JDBC, napiszmy przykład, który zaktualizuje wiele operacji wsadowych. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();  

   public void batchUpdate(final List<Student> students);
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.sql.PreparedStatement;
import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter;

import java.sql.SQLException;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
   public void batchUpdate(final List<Student> students){
      String SQL = "update Student set age = ? where id = ?";
      int[][] updateCounts = jdbcTemplateObject.batchUpdate(SQL,students,1,
         new ParameterizedPreparedStatementSetter<Student>() {
         
         public void setValues(PreparedStatement ps, Student student)
            throws SQLException {
            ps.setInt(1, student.getAge());						
            ps.setInt(2, student.getId());	
         }
      });
      System.out.println("Records updated!");
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");

      List<Student> initialStudents = studentJDBCTemplate.listStudents();
      System.out.println("Initial Students");
      
      for(Student student2: initialStudents){
         System.out.print("ID : " + student2.getId() );
         System.out.println(", Age : " + student2.getAge()); 
      }

      Student student = new Student();
      student.setId(1);
      student.setAge(17);

      Student student1 = new Student();
      student1.setId(3);
      student1.setAge(18);

      List<Student> students = new ArrayList<Student>();
      students.add(student);
      students.add(student1);
      studentJDBCTemplate.batchUpdate(students);

      List<Student> updatedStudents = studentJDBCTemplate.listStudents();
      System.out.println("Updated Students");
      
      for(Student student3: updatedStudents){
         System.out.print("ID : " + student3.getId() );
         System.out.println(", Age : " + student3.getAge()); 
      }
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

Initial Students
ID : 1, Age : 15
ID : 3, Age : 16
records updated!
Updated Students
ID : 1, Age : 17
ID : 3, Age : 18

Plik org.springframework.jdbc.core.JdbcTemplateclass to centralna klasa w podstawowym pakiecie JDBC. Upraszcza korzystanie z JDBC i pomaga uniknąć typowych błędów. Wykonuje podstawowy przepływ pracy JDBC, pozostawiając kod aplikacji do dostarczania SQL i wyodrębniania wyników. Ta klasa wykonuje zapytania SQL lub aktualizacje, inicjując iterację w zestawach wyników i wychwytując wyjątki JDBC i tłumacząc je na ogólną, zawierającą więcej informacji hierarchię wyjątków zdefiniowaną worg.springframework.dao pakiet.

Deklaracja klasy

Poniżej znajduje się deklaracja klasy org.springframework.jdbc.core.JdbcTemplate -

public class JdbcTemplate
   extends JdbcAccessor
      implements JdbcOperations

Stosowanie

Step 1 - Utwórz obiekt JdbcTemplate przy użyciu skonfigurowanego źródła danych.

Step 2 - Użyj metod obiektu JdbcTemplate do wykonywania operacji na bazie danych.

Przykład

Poniższy przykład pokaże, jak odczytać zapytanie przy użyciu klasy JdbcTemplate. Przeczytamy dostępne rekordy w tabeli uczniów.

Składnia

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

Gdzie,

  • selectQuery - Wybierz zapytanie, aby przeczytać uczniów.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu obiektu studenta z bazy danych.

  • StudentMapper - StudentMapper to obiekt RowMapper do mapowania każdego pobranego rekordu na obiekt ucznia.

Aby zrozumieć wspomniane wyżej pojęcia związane z Spring JDBC, napiszmy przykład, który wybierze zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id="studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 11
ID : 2, Name : Nuha, Age : 2
ID : 3, Name : Ayan, Age : 15

Plik org.springframework.jdbc.core.PreparedStatementSetterinterfejs działa jako ogólny interfejs wywołań zwrotnych używany przez klasę JdbcTemplate. Ten interfejs ustawia wartości w PreparedStatement dostarczonej przez klasę JdbcTemplate dla każdej z wielu aktualizacji w partii przy użyciu tego samego kodu SQL.

Implementacje są odpowiedzialne za ustawienie wszelkich niezbędnych parametrów. Kod SQL z symbolami zastępczymi zostanie już dostarczony. Łatwiej jest korzystać z tego interfejsu niż PreparedStatementCreator. JdbcTemplate utworzy PreparedStatement, a wywołanie zwrotne będzie odpowiedzialne tylko za ustawianie wartości parametrów.

Deklaracja interfejsu

Poniżej znajduje się deklaracja interfejsu org.springframework.jdbc.core.PreparedStatementSetter -

public interface PreparedStatementSetter

Stosowanie

Step 1 - Utwórz obiekt JdbcTemplate przy użyciu skonfigurowanego źródła danych.

Step 2 - Użyj metod obiektu JdbcTemplate do wykonywania operacji na bazie danych podczas przekazywania obiektu PreparedStatementSetter w celu zastąpienia symboli zastępczych w zapytaniu.

Przykład

Poniższy przykład pokaże, jak odczytać zapytanie przy użyciu klasy JdbcTemplate i interfejsu PreparedStatementSetter. Przeczytamy dostępny rekord ucznia w tabeli uczniów.

Składnia

final String SQL = "select * from Student where id = ? ";
List <Student> students = jdbcTemplateObject.query(
   SQL, new PreparedStatementSetter() {
   
   public void setValues(PreparedStatement preparedStatement) throws SQLException {
      preparedStatement.setInt(1, id);
   }
},
new StudentMapper());

Gdzie,

  • SQL - Wybierz zapytanie, aby przeczytać uczniów.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu obiektu studenta z bazy danych.

  • PreparedStatementSetter - Obiekt PreparedStatementSetter do ustawiania parametrów w zapytaniu.

  • StudentMapper - StudentMapper to obiekt RowMapper do mapowania każdego pobranego rekordu na obiekt ucznia.

Aby zrozumieć wspomniane wyżej pojęcia związane z Spring JDBC, napiszmy przykład, który wybierze zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public Student getStudent(final Integer id) {
      final String SQL = "select * from Student where id = ? ";
      List <Student> students = jdbcTemplateObject.query(
         SQL, new PreparedStatementSetter() {
		   
         public void setValues(PreparedStatement preparedStatement) throws SQLException {
            preparedStatement.setInt(1, id);
         }
      },
      new StudentMapper());
      return students.get(0);
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      Student student = studentJDBCTemplate.getStudent(1);
      System.out.print("ID : " + student.getId() );
      System.out.println(", Age : " + student.getAge()); 
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

ID : 1, Age : 17

Plik org.springframework.jdbc.core.ResultSetExtractorinterfejs jest interfejsem wywołań zwrotnych używanym przez metody zapytań JdbcTemplate. Implementacje tego interfejsu wykonują rzeczywistą pracę polegającą na wyodrębnianiu wyników z zestawu wyników, ale nie trzeba się martwić o obsługę wyjątków.

SQLExceptions zostaną przechwycone i obsługiwane przez wywołujący JdbcTemplate. Ten interfejs jest używany głównie w samej strukturze JDBC. RowMapper jest zwykle prostszym wyborem do przetwarzania zestawu wyników, mapując jeden obiekt wynikowy na wiersz zamiast jednego obiektu wynikowego dla całego zestawu wyników.

Deklaracja interfejsu

Poniżej znajduje się deklaracja interfejsu org.springframework.jdbc.core.ResultSetExtractor -

public interface ResultSetExtractor

Stosowanie

Step 1 - Utwórz obiekt JdbcTemplate przy użyciu skonfigurowanego źródła danych.

Step 2 - Użyj metod obiektu JdbcTemplate do wykonywania operacji na bazie danych podczas analizowania zestawu wyników za pomocą programu ResultSetExtractor.

Przykład

Poniższy przykład pokaże, jak odczytać zapytanie przy użyciu klasy JdbcTemplate i interfejsu ResultSetExtractor. Przeczytamy dostępny rekord ucznia w tabeli uczniów.

Składnia

public List<Student> listStudents() {
   String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, 
         new ResultSetExtractor<List<Student>>(){
         
         public List<Student> extractData(
            ResultSet rs) throws SQLException, DataAccessException {
            
            List<Student> list = new ArrayList<Student>();  
            while(rs.next()){  
               Student student = new Student();
               student.setId(rs.getInt("id"));
               student.setName(rs.getString("name"));
               student.setAge(rs.getInt("age"));
               student.setDescription(rs.getString("description"));
               student.setImage(rs.getBytes("image"));
               list.add(student);  
            }  
            return list;  
         }    	  
      });
   return students;
}

Gdzie,

  • SQL - Wybierz zapytanie, aby przeczytać uczniów.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu obiektu studenta z bazy danych.

  • ResultSetExtractor - obiekt ResultSetExtractor do analizowania obiektu wyników.

Aby zrozumieć wspomniane wyżej pojęcia związane z Spring JDBC, napiszmy przykład, który wybierze zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import java.util.ArrayList;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, 
         new ResultSetExtractor<List<Student>>(){
         
         public List<Student> extractData(
            ResultSet rs) throws SQLException, DataAccessException {
            
            List<Student> list = new ArrayList<Student>();  
            while(rs.next()){  
               Student student = new Student();
               student.setId(rs.getInt("id"));
               student.setName(rs.getString("name"));
               student.setAge(rs.getInt("age"));
               student.setDescription(rs.getString("description"));
               student.setImage(rs.getBytes("image"));
               list.add(student);  
            }  
            return list;  
         }    	  
      });
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = 
         new ClassPathXmlApplicationContext("Beans.xml");
      
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");

      List<Student> students = studentJDBCTemplate.listStudents();

      for(Student student: students){
         System.out.print("ID : " + student.getId() );
         System.out.println(", Age : " + student.getAge()); 
      }
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

ID : 1, Age : 17
ID : 3, Age : 18

Plik org.springframework.jdbc.core.RowMapper<T>interfejs jest używany przez JdbcTemplate do mapowania wierszy zestawu wyników na podstawie każdego wiersza. Implementacje tego interfejsu wykonują rzeczywistą pracę polegającą na mapowaniu każdego wiersza na obiekt wynikowy. SQLExceptions, jeśli jakiekolwiek zgłoszenie zostanie przechwycone i obsługiwane przez wywołujący JdbcTemplate.

Deklaracja interfejsu

Poniżej znajduje się deklaracja dla org.springframework.jdbc.core.RowMapper<T> interfejs -

public interface RowMapper<T>

Stosowanie

Step 1 - Utwórz obiekt JdbcTemplate przy użyciu skonfigurowanego źródła danych.

Step 2 - Utwórz obiekt StudentMapper implementujący interfejs RowMapper.

Step 3 - Użyj metod obiektu JdbcTemplate do wykonywania operacji na bazie danych podczas korzystania z obiektu StudentMapper.

Poniższy przykład pokaże, jak czytać zapytanie przy użyciu spring jdbc. Zmapujemy odczytane rekordy z tabeli ucznia do obiektu studenta za pomocą obiektu StudentMapper.

Składnia

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

Gdzie

  • SQL - Przeczytaj zapytanie, aby przeczytać wszystkie rekordy uczniów.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu rekordów uczniów z bazy danych.

  • StudentMapper - Obiekt StudentMapper do mapowania rekordów uczniów na obiekty uczniów.

Aby zrozumieć powyższe koncepcje związane z Spring JDBC, napiszmy przykład, który odczyta zapytanie i zmapuje wynik za pomocą obiektu StudentMapper. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDao.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDao {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

public class StudentJDBCTemplate implements StudentDao {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 17
ID : 3, Name : Ayan, Age : 18

Plik org.springframework.jdbc.core.NamedParameterJdbcTemplateclass to klasa szablonu z podstawowym zestawem operacji JDBC, która umożliwia użycie nazwanych parametrów zamiast tradycyjnego znaku „?” symbole zastępcze. Ta klasa deleguje do opakowanego JdbcTemplate po zastąpieniu nazwanych parametrów stylem JDBC „?” symbole zastępcze są wykonywane w czasie wykonywania. Pozwala również rozszerzyć listę wartości do odpowiedniej liczby symboli zastępczych.

Deklaracja interfejsu

Poniżej znajduje się deklaracja dla org.springframework.jdbc.core.NamedParameterJdbcTemplate klasa -

public class NamedParameterJdbcTemplate
   extends Object
      implements NamedParameterJdbcOperations

Składnia

MapSqlParameterSource in = new MapSqlParameterSource();
in.addValue("id", id);
in.addValue("description",  new SqlLobValue(description, new DefaultLobHandler()), Types.CLOB);

String SQL = "update Student set description = :description where id = :id";
NamedParameterJdbcTemplate jdbcTemplateObject = new NamedParameterJdbcTemplate(dataSource);
jdbcTemplateObject.update(SQL, in);

Gdzie,

  • in - SqlParameterSource do przekazania parametru w celu zaktualizowania zapytania.

  • SqlLobValue - Obiekt do reprezentowania parametru wartości BLOB / CLOB SQL.

  • jdbcTemplateObject - Obiekt NamedParameterJdbcTemplate do aktualizacji obiektu ucznia w bazie danych.

Aby zrozumieć powyższe koncepcje związane z Spring JDBC, napiszmy przykład, który zaktualizuje zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to update
      * a record into the Student table.
   */
   public void updateDescription(Integer id, String description);
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;
   private String description;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
   public String getDescription() {
      return description;
   }
   public void setDescription(String description) {
      this.description = description;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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"));
      student.setDescription(rs.getString("description"));
      return student;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.jdbc.core.support.SqlLobValue;
import org.springframework.jdbc.support.lob.DefaultLobHandler;

import java.io.ByteArrayInputStream;
import java.sql.Types;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
   }
   public void updateDescription(Integer id, String description) {
      MapSqlParameterSource in = new MapSqlParameterSource();
      in.addValue("id", id);
      in.addValue("description",  new SqlLobValue(
         description, new DefaultLobHandler()), Types.CLOB);

      String SQL = "update Student set description = :description where id = :id";
      NamedParameterJdbcTemplate jdbcTemplateObject = 
         new NamedParameterJdbcTemplate(dataSource);
      
      jdbcTemplateObject.update(SQL, in);
      System.out.println("Updated Record with ID = " + id );
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      studentJDBCTemplate.updateDescription(1, 
         "This can be a very long text upto 4 GB of size."); 
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

Updated Record with ID = 1

Możesz sprawdzić zapisany opis, wysyłając zapytanie do bazy danych.

Plik org.springframework.jdbc.core.SimpleJdbcInsertclass to wielowątkowy obiekt wielokrotnego użytku zapewniający łatwe wstawianie do tabeli. Zapewnia przetwarzanie metadanych w celu uproszczenia kodu potrzebnego do skonstruowania podstawowej instrukcji wstawiania. Rzeczywista wstawka jest obsługiwana za pomocą JdbcTemplate Springa

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.springframework.jdbc.core.SimpleJdbcInsert klasa -

public class SimpleJdbcInsert
   extends AbstractJdbcInsert
      implements SimpleJdbcInsertOperations

Poniższy przykład pokaże, jak wstawić zapytanie za pomocą Spring JDBC. Wstawimy jeden rekord w tabeli uczniów za pomocą obiektu SimpleJdbcInsert.

Składnia

jdbcInsert = new SimpleJdbcInsert(dataSource).withTableName("Student");
Map<String,Object> parameters = new HashMap<String,Object>();

parameters.put("name", name);
parameters.put("age", age);
jdbcInsert.execute(parameters);

Gdzie,

  • jdbcInsert - Obiekt SimpleJdbcInsert, aby wstawić rekord do tabeli ucznia.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu obiektu studenta w bazie danych.

Aby zrozumieć wspomniane wyżej koncepcje związane z Spring JDBC, napiszmy przykład, który wstawi zapytanie. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to create
      * a record in the Student table.
   */
   public void create(String name, Integer age);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;

public class StudentJDBCTemplate implements StudentDao {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   SimpleJdbcInsert jdbcInsert;

   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
      this.jdbcInsert = new SimpleJdbcInsert(dataSource).withTableName("Student");
   }
   public void create(String name, Integer age) {
      Map<String,Object> parameters = new HashMap<String,Object>();
      parameters.put("name", name);
      parameters.put("age", age);
      
      jdbcInsert.execute(parameters);
      System.out.println("Created Record Name = " + name + " Age = " + age);
      return;
   }
   public List<Student> listStudents() {
      String SQL = "select * from Student";
      List <Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("------Records Creation--------" );
      studentJDBCTemplate.create("Nuha", 2);

      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

------Records Creation--------
Created Record Name = Nuha Age = 12
------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 17
ID : 3, Name : Ayan, Age : 18
ID : 4, Name : Nuha, Age : 12

Plik org.springframework.jdbc.core.SimpleJdbcCallclass to wielowątkowy obiekt wielokrotnego użytku reprezentujący wywołanie procedury składowanej lub funkcji składowanej. Zapewnia przetwarzanie metadanych w celu uproszczenia kodu potrzebnego do uzyskania dostępu do podstawowych procedur / funkcji przechowywanych.

Wszystko, co musisz podać, to nazwa procedury / funkcji i mapa zawierająca parametry podczas wykonywania wywołania. Nazwy podanych parametrów zostaną dopasowane do parametrów wejścia i wyjścia zadeklarowanych podczas tworzenia procedury składowanej.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.springframework.jdbc.core.SimpleJdbcCall klasa -

public class SimpleJdbcCall
   extends AbstractJdbcCall
      implements SimpleJdbcCallOperations

Poniższy przykład pokaże, jak wywołać procedurę składowaną przy użyciu Spring SimpleJdbcCall. Odczytujemy jeden z dostępnych rekordów w tabeli uczniów, wywołując procedurę składowaną. Przekażemy legitymację i otrzymamy kartę studenta.

Składnia

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("getRecord");
SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
Map<String, Object> out = jdbcCall.execute(in);

Student student = new Student();
student.setId(id);
student.setName((String) out.get("out_name"));
student.setAge((Integer) out.get("out_age"));

Gdzie,

  • jdbcCall - Obiekt SimpleJdbcCall do reprezentowania procedury składowanej.

  • in - SqlParameterSource do przekazania parametru do procedury składowanej.

  • student - Obiekt studencki.

  • out - Mapowanie obiektu do reprezentowania wyniku wywołania procedury składowanej.

Aby zrozumieć wspomniane powyżej koncepcje związane z Spring JDBC, napiszmy przykład, który wywoła procedurę składowaną. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);  
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

public class StudentJDBCTemplate implements StudentDAO {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public Student getStudent(Integer id) {
      SimpleJdbcCall jdbcCall = new 
         SimpleJdbcCall(dataSource).withProcedureName("getRecord");

      SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
      Map<String, Object> out = jdbcCall.execute(in);

      Student student = new Student();
      student.setId(id);
      student.setName((String) out.get("out_name"));
      student.setAge((Integer) out.get("out_age"));
      return student;      
   }
}

Kod, który piszesz w celu wykonania wywołania, obejmuje utworzenie SqlParameterSource zawierającego parametr IN. Ważne jest, aby dopasować nazwę podaną dla wartości wejściowej z nazwą parametru zadeklarowaną w procedurze składowanej. Metoda execute przyjmuje parametry IN i zwraca Map zawierającą wszystkie parametry wyjściowe z kluczem o nazwie określonej w procedurze składowanej.

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      Student student = studentJDBCTemplate.getStudent(1);
      System.out.print("ID : " + student.getId() );
      System.out.print(", Name : " + student.getName() );
      System.out.println(", Age : " + student.getAge()); 
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

ID : 1, Name : Zara, Age : 11

Plik org.springframework.jdbc.object.SqlQuery Klasa zawiera obiekt operacji wielokrotnego użytku reprezentujący zapytanie SQL.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.springframework.jdbc.object.SqlQuery klasa -

public abstract class SqlQuery<T>
   extends SqlOperation

Stosowanie

  • Step 1 - Utwórz obiekt JdbcTemplate przy użyciu skonfigurowanego źródła danych.

  • Step 2 - Utwórz obiekt StudentMapper implementujący interfejs RowMapper.

  • Step 3 - Użyj metod obiektu JdbcTemplate do wykonywania operacji na bazie danych podczas korzystania z obiektu SqlQuery.

Poniższy przykład pokaże, jak odczytać zapytanie przy użyciu obiektu SqlQuery. Zmapujemy odczytane rekordy z tabeli ucznia do obiektu studenta za pomocą obiektu StudentMapper.

Składnia

String sql = "select * from Student";
SqlQuery<Student> sqlQuery = new SqlQuery<Student>() {
   @Override
   protected RowMapper<Student> newRowMapper(Object[] parameters,
      Map<?, ?> context) {
      return new StudentMapper();
   }
};
sqlQuery.setDataSource(dataSource);
sqlQuery.setSql(sql);
List <Student> students = sqlQuery.execute();

Gdzie,

  • SQL - Przeczytaj zapytanie, aby przeczytać wszystkie rekordy uczniów.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu rekordów uczniów z bazy danych.

  • StudentMapper - Obiekt StudentMapper do mapowania rekordów uczniów na obiekty uczniów.

  • SqlQuery - Obiekt SqlQuery do przeszukiwania rekordów uczniów i mapowania ich na obiekty uczniów.

Aby zrozumieć powyższe koncepcje związane z Spring JDBC, napiszmy przykład, który odczyta zapytanie i zmapuje wynik za pomocą obiektu StudentMapper. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDao.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDao {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * all the records from the Student table.
   */
   public List<Student> listStudents();   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.object.SqlQuery;

public class StudentJDBCTemplate implements StudentDao {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);     
   }
   public List<Student> listStudents() {
      String sql = "select * from Student";
      SqlQuery<Student> sqlQuery = new SqlQuery<Student>() {
         @Override
         protected RowMapper<Student> newRowMapper(Object[] parameters, Map<?, ?> context){
            
            return new StudentMapper();
         }
      };
      sqlQuery.setDataSource(dataSource);
      sqlQuery.setSql(sql);
      List <Student> students = sqlQuery.execute();
      return students;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("------Listing Multiple Records--------" );
      List<Student> students = studentJDBCTemplate.listStudents();
      
      for (Student record : students) {
         System.out.print("ID : " + record.getId() );
         System.out.print(", Name : " + record.getName() );
         System.out.println(", Age : " + record.getAge());
      }  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

------Listing Multiple Records--------
ID : 1, Name : Zara, Age : 17
ID : 3, Name : Ayan, Age : 18
ID : 4, Name : Nuha, Age : 12

Plik org.springframework.jdbc.object.SqlUpdate Klasa zapewnia obiekt operacji wielokrotnego użytku reprezentujący aktualizację SQL.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.springframework.jdbc.object.SqlUpdate klasa -

public abstract class SqlUpdate<T>
   extends SqlOperation

Stosowanie

Step 1 - Utwórz obiekt JdbcTemplate przy użyciu skonfigurowanego źródła danych.

Step 2 - Utwórz obiekt StudentMapper implementujący interfejs RowMapper.

Step 3 - Użyj metod obiektu JdbcTemplate do wykonywania operacji na bazie danych podczas korzystania z obiektu SqlUpdate.

Poniższy przykład pokaże, jak zaktualizować zapytanie przy użyciu obiektu SqlUpdate. Zmapujemy rekordy aktualizacji z tabeli ucznia do obiektu studenta za pomocą obiektu StudentMapper.

Składnia

String SQL = "update Student set age = ? where id = ?";

SqlUpdate sqlUpdate = new SqlUpdate(dataSource,SQL);
sqlUpdate.declareParameter(new SqlParameter("age", Types.INTEGER));
sqlUpdate.declareParameter(new SqlParameter("id", Types.INTEGER));
sqlUpdate.compile();

sqlUpdate.update(age.intValue(),id.intValue());

Gdzie,

  • SQL - Zaktualizuj zapytanie, aby zaktualizować rekordy uczniów.

  • jdbcTemplateObject - Obiekt StudentJDBCTemplate do odczytu rekordów studenta z bazy danych.

  • StudentMapper - Obiekt StudentMapper do mapowania rekordów uczniów na obiekty uczniów.

  • sqlUpdate - Obiekt SqlUpdate do aktualizacji rekordów uczniów.

Aby zrozumieć powyższe koncepcje związane z Spring JDBC, napiszmy przykład, który odczyta zapytanie i zmapuje wynik za pomocą obiektu StudentMapper. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDao.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDao {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to update
      * a record into the Student table.
   */
   public void update(Integer id, Integer age);

   /** 
      * This is the method to be used to list down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);   
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.sql.Types;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.SqlUpdate;

public class StudentJDBCTemplate implements StudentDao {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public void update(Integer id, Integer age){
      String SQL = "update Student set age = ? where id = ?";
      
      SqlUpdate sqlUpdate = new SqlUpdate(dataSource,SQL);
      sqlUpdate.declareParameter(new SqlParameter("age", Types.INTEGER));
      sqlUpdate.declareParameter(new SqlParameter("id", Types.INTEGER));
      sqlUpdate.compile();
      
      sqlUpdate.update(age.intValue(),id.intValue());
      System.out.println("Updated Record with ID = " + id );
      return;
   }
   public Student getStudent(Integer id) {
      String SQL = "select * from Student where id = ?";
      Student student = jdbcTemplateObject.queryForObject(
         SQL, new Object[]{id}, new StudentMapper());
      
      return student;
   }
}

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      System.out.println("----Updating Record with ID = 1 -----" );
      studentJDBCTemplate.update(1, 10);
      
      System.out.println("----Listing Record with ID = 1 -----" );
      Student student = studentJDBCTemplate.getStudent(1);
      
      System.out.print("ID : " + student.getId() );
      System.out.print(", Name : " + student.getName() );
      System.out.println(", Age : " + student.getAge());  
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

----Updating Record with ID = 1 -----
Updated Record with ID = 1
----Listing Record with ID = 1 -----
ID : 1, Name : Zara, Age : 10

Plik org.springframework.jdbc.core.StoredProcedureclass jest nadklasą dla abstrakcji obiektów procedur składowanych RDBMS. Ta klasa jest abstrakcyjna i zakłada się, że podklasy będą zapewniać określoną metodę wywołania, która deleguje do podanej metody execute (java.lang.Object ...). Dziedziczona właściwość SQL to nazwa procedury składowanej w RDBMS.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.springframework.jdbc.core.StoredProcedure klasa -

public abstract class StoredProcedure
   extends SqlCall

Poniższy przykład pokaże, jak wywołać procedurę składowaną przy użyciu Spring StoredProcedure. Odczytujemy jeden z dostępnych rekordów w tabeli uczniów, wywołując procedurę składowaną. Przekażemy legitymację i otrzymamy kartę studenta.

Składnia

class StudentProcedure extends StoredProcedure{
   public StudentProcedure(DataSource dataSource, String procedureName){
      super(dataSource,procedureName);
      declareParameter(new SqlParameter("in_id", Types.INTEGER));
      declareParameter(new SqlOutParameter("out_name", Types.VARCHAR));
      declareParameter(new SqlOutParameter("out_age", Types.INTEGER));
      compile();
   }
   public Student execute(Integer id){
      Map<String, Object> out = super.execute(id);
      Student student = new Student();
      student.setId(id);
      student.setName((String) out.get("out_name"));
      student.setAge((Integer) out.get("out_age"));
      return student;  	
   }
}

Gdzie,

  • StoredProcedure - Obiekt StoredProcedure do reprezentowania procedury składowanej.

  • StudentProcedure - Obiekt StudentProcedure rozszerza StoredProcedure w celu zadeklarowania danych wejściowych, zmiennych wyjściowych i wyniku odwzorowania na obiekt Student.

  • student - Obiekt studencki.

Aby zrozumieć wspomniane powyżej koncepcje związane z Spring JDBC, napiszmy przykład, który wywoła procedurę składowaną. Aby napisać nasz przykład, przygotujmy działające środowisko Eclipse IDE i wykonaj następujące kroki, aby utworzyć aplikację Spring.

Krok Opis
1 Zaktualizuj projekt Studenta utworzony w rozdziale Wiosna JDBC - Pierwsza aplikacja .
2 Zaktualizuj konfigurację fasoli i uruchom aplikację, jak wyjaśniono poniżej.

Poniżej znajduje się zawartość pliku interfejsu obiektu dostępu do danych StudentDAO.java.

package com.tutorialspoint;

import java.util.List;
import javax.sql.DataSource;

public interface StudentDAO {
   /** 
      * This is the method to be used to initialize
      * database resources ie. connection.
   */
   public void setDataSource(DataSource ds);
   
   /** 
      * This is the method to be used to list down
      * a record from the Student table corresponding
      * to a passed student id.
   */
   public Student getStudent(Integer id);  
}

Poniżej znajduje się zawartość Student.java plik.

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Poniżej znajduje się zawartość StudentMapper.java plik.

package com.tutorialspoint;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

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;
   }
}

Poniżej znajduje się plik klasy implementacji StudentJDBCTemplate.java dla zdefiniowanego interfejsu DAO StudentDAO.

package com.tutorialspoint;

import java.sql.Types;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.object.StoredProcedure;

public class StudentJDBCTemplate implements StudentDao {
   private DataSource dataSource;
   private JdbcTemplate jdbcTemplateObject;
   
   public void setDataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      this.jdbcTemplateObject = new JdbcTemplate(dataSource);
   }
   public Student getStudent(Integer id) {    
      StudentProcedure studentProcedure = new StudentProcedure(dataSource, "getRecord");
      return studentProcedure.execute(id);      
   }    
}
class StudentProcedure extends StoredProcedure{
   public StudentProcedure(DataSource dataSource, String procedureName) {
      super(dataSource,procedureName);
      declareParameter(new SqlParameter("in_id", Types.INTEGER));
      declareParameter(new SqlOutParameter("out_name", Types.VARCHAR));
      declareParameter(new SqlOutParameter("out_age", Types.INTEGER));
      compile();
   }
   public Student execute(Integer id){
      Map<String, Object> out = super.execute(id);
      Student student = new Student();
      student.setId(id);
      student.setName((String) out.get("out_name"));
      student.setAge((Integer) out.get("out_age"));
      return student;  	
   }
}

Kod, który piszesz w celu wykonania wywołania, obejmuje utworzenie SqlParameterSource zawierającego parametr IN. Ważne jest, aby dopasować nazwę podaną dla wartości wejściowej z nazwą parametru zadeklarowaną w procedurze składowanej. Metoda execute przyjmuje parametry IN i zwraca Map zawierającą wszystkie parametry wyjściowe z kluczem o nazwie określonej w procedurze składowanej.

Poniżej znajduje się zawartość MainApp.java plik.

package com.tutorialspoint;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tutorialspoint.StudentJDBCTemplate;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      StudentJDBCTemplate studentJDBCTemplate = 
         (StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
      
      Student student = studentJDBCTemplate.getStudent(1);
      System.out.print("ID : " + student.getId() );
      System.out.print(", Name : " + student.getName() );
      System.out.println(", Age : " + student.getAge()); 
   }
}

Poniżej znajduje się plik konfiguracyjny Beans.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-3.0.xsd ">

   <!-- Initialization for data source -->
   <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 = "admin"/>
   </bean>

   <!-- Definition for studentJDBCTemplate bean -->
   <bean id = "studentJDBCTemplate" 
      class = "com.tutorialspoint.StudentJDBCTemplate">
      <property name = "dataSource" ref = "dataSource" />    
   </bean>
      
</beans>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.

ID : 1, Name : Zara, Age : 10