Spring JDBC - Hướng dẫn nhanh

Trong khi làm việc với cơ sở dữ liệu bằng JDBC cũ, việc viết mã không cần thiết để xử lý các ngoại lệ, mở và đóng các kết nối cơ sở dữ liệu, v.v. Tuy nhiên, Spring JDBC Framework sẽ quản lý tất cả các chi tiết cấp thấp bắt đầu từ việc mở kết nối, chuẩn bị và thực thi câu lệnh SQL, xử lý ngoại lệ, xử lý giao dịch và cuối cùng là đóng kết nối.

Những gì bạn phải làm chỉ là xác định các tham số kết nối và chỉ định câu lệnh SQL sẽ được thực thi và thực hiện công việc cần thiết cho mỗi lần lặp trong khi tìm nạp dữ liệu từ cơ sở dữ liệu.

Spring JDBC cung cấp một số cách tiếp cận và các lớp tương ứng khác nhau để giao tiếp với cơ sở dữ liệu. Trong hướng dẫn này, chúng tôi sẽ sử dụng cách tiếp cận cổ điển và phổ biến nhất sử dụng lớp Mẫu JDBC của khung. Đây là lớp khung trung tâm quản lý tất cả các giao tiếp cơ sở dữ liệu và xử lý ngoại lệ.

Lớp mẫu JDBC

Lớp JDBC Template thực hiện các truy vấn SQL, cập nhật các câu lệnh và các lệnh gọi thủ tục được lưu trữ, thực hiện lặp lại các ResultSets và trích xuất các giá trị tham số trả về. Nó cũng bắt các ngoại lệ JDBC và dịch chúng sang hệ thống phân cấp ngoại lệ chung, nhiều thông tin hơn, được xác định trong gói org.springframework.dao.

Các phiên bản của lớp Mẫu JDBC được an toàn luồng sau khi được cấu hình. Vì vậy, bạn có thể định cấu hình một phiên bản của Mẫu JDBC và sau đó đưa tham chiếu được chia sẻ này vào nhiều DAO một cách an toàn.

Một thực tiễn phổ biến khi sử dụng lớp Mẫu JDBC là định cấu hình DataSource trong tệp cấu hình Spring của bạn, sau đó phụ thuộc đưa bean DataSource được chia sẻ đó vào các lớp DAO của bạn. Mẫu JDBC được tạo trong bộ thiết lập cho Nguồn dữ liệu.

Đối tượng truy cập dữ liệu (DAO)

DAO là viết tắt của Data Access Objectthường được sử dụng để tương tác cơ sở dữ liệu. Các DAO tồn tại để cung cấp một phương tiện để đọc và ghi dữ liệu vào cơ sở dữ liệu và chúng sẽ hiển thị chức năng này thông qua một giao diện mà phần còn lại của ứng dụng sẽ truy cập chúng.

Hỗ trợ Đối tượng Truy cập Dữ liệu (DAO) trong Spring giúp bạn dễ dàng làm việc với các công nghệ truy cập dữ liệu như JDBC, Hibernate, JPA hoặc JDO một cách nhất quán.

Chương này sẽ hướng dẫn bạn quá trình thiết lập Spring-AOP trên các hệ thống chạy Windows và Linux. Spring AOP có thể dễ dàng cài đặt và tích hợp với môi trường Java hiện tại của bạn và MAVEN bằng cách làm theo một vài bước đơn giản mà không cần bất kỳ thủ tục thiết lập phức tạp nào. Quản trị người dùng được yêu cầu trong khi cài đặt.

yêu cầu hệ thống

JDK Java SE 2 JDK 1.5 trở lên
Ký ức RAM 1 GB (khuyến nghị)
Dung lượng đĩa Không có yêu cầu tối thiểu
Phiên bản hệ điều hành Windows XP trở lên, Linux

Bây giờ chúng ta hãy tiến hành các bước cài đặt Spring AOP.

Bước 1 - Xác minh cài đặt Java của bạn

Trước hết, bạn cần cài đặt Bộ phát triển phần mềm Java (SDK) trên hệ thống của mình. Để xác minh điều này, hãy thực hiện bất kỳ lệnh nào trong hai lệnh sau tùy thuộc vào nền tảng bạn đang làm việc.

Nếu cài đặt Java đã được thực hiện đúng cách, thì nó sẽ hiển thị phiên bản hiện tại và đặc điểm kỹ thuật của cài đặt Java của bạn. Đầu ra mẫu được đưa ra trong bảng sau.

Nền tảng Chỉ huy Đầu ra mẫu
các cửa sổ

Mở bảng điều khiển lệnh và gõ -

\>java -version

Phiên bản Java "1.7.0_60"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.7.0_60-b19)

Java Hotspot (TM) Máy chủ 64-bit VM (bản dựng 24.60-b09, chế độ hỗn hợp)

Linux

Mở đầu cuối lệnh và nhập -

$java -version

phiên bản java "1.7.0_25"

Mở môi trường thời gian chạy JDK (rhel-2.3.10.4.el6_4-x86_64)

Mở JDK 64-Bit Server VM (bản dựng 23.7-b01, chế độ hỗn hợp)

Chúng tôi giả định rằng người đọc của hướng dẫn này đã cài đặt Java SDK phiên bản 1.7.0_60 trên hệ thống của họ. Trong trường hợp bạn không có Java SDK, hãy tải xuống phiên bản hiện tại của nó từhttps://www.oracle.com/technetwork/java/javase/downloads/index.html và đã cài đặt nó.

Bước 2 - Đặt Môi trường Java của bạn

Đặt biến môi trường JAVA_HOME trỏ đến vị trí thư mục cơ sở nơi Java được cài đặt trên máy của bạn. Ví dụ,

Nền tảng Sự miêu tả
các cửa sổ Đặt JAVA_HOME thành C: \ ProgramFiles \ java \ jdk1.7.0_60
Linux Xuất JAVA_HOME = / usr / local / java-current

Nối đường dẫn đầy đủ của vị trí trình biên dịch Java vào Đường dẫn hệ thống.

Nền tảng Sự miêu tả
các cửa sổ Nối chuỗi "C: \ Program Files \ Java \ jdk1.7.0_60 \ bin" vào cuối biến hệ thống PATH.
Linux Xuất PATH = $ PATH: $ JAVA_HOME / bin /

Thực hiện lệnh java -version từ dấu nhắc lệnh như đã giải thích ở trên.

Bước 3 - Tải xuống Maven Archive

Tải xuống Maven 3.3.3 từ https://maven.apache.org/download.cgi

Hệ điều hành Tên lưu trữ
các cửa sổ apache-maven-3.3.3-bin.zip
Linux apache-maven-3.3.3-bin.tar.gz
Mac apache-maven-3.3.3-bin.tar.gz

Bước 4 - Giải nén kho lưu trữ Maven

Giải nén kho lưu trữ vào thư mục bạn muốn cài đặt Maven 3.3.3. Thư mục con apache-maven-3.3.3 sẽ được tạo từ kho lưu trữ.

Hệ điều hành Vị trí (có thể khác tùy theo cài đặt của bạn)
các cửa sổ C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3
Linux / usr / local / apache-maven
Mac / usr / local / apache-maven

Bước 5 - Đặt các biến môi trường Maven

Thêm M2_HOME, M2, MAVEN_OPTS vào các biến môi trường.

Hệ điều hành Đầu ra
các cửa sổ

Đặt các biến môi trường bằng cách sử dụng thuộc tính hệ thống.

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

M2 =% M2_HOME% \ bin

MAVEN_OPTS = -Xms256m -Xmx512m

Linux

Mở đầu cuối lệnh và đặt các biến môi trường.

xuất M2_HOME = /usr/local/apache-maven/apache-maven-3.3.3

xuất M2 = $ M2_HOME / thùng

xuất MAVEN_OPTS = -Xms256m -Xmx512m

Mac

Mở đầu cuối lệnh và đặt các biến môi trường.

xuất M2_HOME = /usr/local/apache-maven/apache-maven-3.3.3

xuất M2 = $ M2_HOME / thùng

xuất MAVEN_OPTS = -Xms256m -Xmx512m

Bước 6 - Thêm Vị trí Thư mục Maven Bin vào Đường dẫn Hệ thống

Bây giờ nối biến M2 vào Đường dẫn hệ thống.

Hệ điều hành Đầu ra
các cửa sổ Nối chuỗi;% M2% vào cuối biến hệ thống, Đường dẫn.
Linux xuất PATH = $ M2: $ PATH
Mac xuất PATH = $ M2: $ PATH

Bước 7 - Xác minh cài đặt Maven

Bây giờ mở bảng điều khiển, thực hiện như sau mvn chỉ huy.

Hệ điều hành Bài tập Chỉ huy
các cửa sổ Mở bảng điều khiển lệnh c: \> mvn --version
Linux Mở Command Terminal $ mvn - phiên bản
Mac Mở thiết bị đầu cuối máy: <joseph $ mvn --version

Cuối cùng, xác minh kết quả đầu ra của các lệnh trên, sẽ như sau:

Hệ điều hành Đầu ra
các cửa sổ

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

Trang chủ Maven: C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3

Phiên bản Java: 1.7.0_75, nhà cung cấp: Oracle Corporation

Trang chủ Java: C: \ Program Files \ Java \ jdk1.7.0_75 \ jre

Ngôn ngữ mặc định: en_US, mã hóa nền tảng: Cp1252

Linux

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

Trang chủ Maven: /usr/local/apache-maven/apache-maven-3.3.3

Phiên bản Java: 1.7.0_75, nhà cung cấp: Oracle Corporation

Trang chủ Java: /usr/local/java-current/jdk1.7.0_75/jre

Mac

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

Trang chủ Maven: /usr/local/apache-maven/apache-maven-3.3.3

Phiên bản Java: 1.7.0_75, nhà cung cấp: Oracle Corporation

Trang chủ Java: /Library/Java/Home/jdk1.7.0_75/jre

Bước 8 - Thiết lập IDE Eclipse

Tất cả các ví dụ trong hướng dẫn này đã được viết bằng Eclipse IDE. Vì vậy, tôi khuyên bạn nên cài đặt phiên bản Eclipse mới nhất trên máy của mình.

Để cài đặt Eclipse IDE, hãy tải xuống các tệp nhị phân Eclipse mới nhất từ https://www.eclipse.org/downloads/. Khi bạn đã tải xuống bản cài đặt, hãy giải nén bản phân phối nhị phân vào một vị trí thuận tiện. Ví dụ: trong C: \ eclipse trên Windows hoặc / usr / local / eclipse trên Linux / Unix. Cuối cùng, đặt biến PATH một cách thích hợp.

Eclipse có thể được khởi động bằng cách thực hiện các lệnh sau trên máy Windows hoặc bạn có thể chỉ cần nhấp đúp vào eclipse.exe.

%C:\eclipse\eclipse.exe

Eclipse có thể được khởi động bằng cách thực hiện các lệnh sau trên máy Unix (Solaris, Linux, v.v.).

$/usr/local/eclipse/eclipse

Sau khi khởi động thành công, nếu mọi thứ đều ổn thì nó sẽ hiển thị kết quả sau.

Khi bạn đã hoàn thành bước cuối cùng này, bạn đã sẵn sàng tiếp tục với ví dụ JDBC đầu tiên mà bạn sẽ thấy trong chương tiếp theo.

Hãy để chúng tôi tạo một bảng cơ sở dữ liệu Student trong cơ sở dữ liệu của chúng tôi TEST. Tôi giả sử bạn đang làm việc với cơ sở dữ liệu MySQL, nếu bạn làm việc với bất kỳ cơ sở dữ liệu nào khác thì bạn có thể thay đổi các truy vấn DDL và SQL của mình cho phù hợp.

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

Bây giờ chúng ta cần cung cấp Nguồn dữ liệu cho Mẫu JDBC để nó có thể tự cấu hình để có quyền truy cập cơ sở dữ liệu. Bạn có thể định cấu hình Nguồn dữ liệu trong tệp XML với một đoạn mã được hiển thị như sau:

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

Trong chương tiếp theo, chúng ta sẽ viết ứng dụng đầu tiên bằng cách sử dụng cơ sở dữ liệu được cấu hình.

Để hiểu các khái niệm liên quan đến khung Spring JDBC với lớp Mẫu JDBC, chúng ta hãy viết một ví dụ đơn giản sẽ thực hiện các thao tác Chèn và Đọc trên bảng Sinh viên sau đây.

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

Chúng ta hãy tiến hành viết một Ứng dụng Spring JDBC dựa trên bảng điều khiển đơn giản, ứng dụng này sẽ trình bày các khái niệm JDBC.

Tạo dự án

Hãy mở bảng điều khiển lệnh, truy cập thư mục C: \ MVN và thực hiện như sau mvn chỉ huy.

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

Maven sẽ bắt đầu xử lý và sẽ tạo ra cấu trúc dự án ứng dụng Java hoàn chỉnh.

[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] ------------------------------------------------------------------------

Bây giờ vào thư mục C: / MVN. Bạn sẽ thấy một dự án ứng dụng Java được tạo có tên là sinh viên (như được chỉ định trong ArtifactId). Cập nhật POM.xml để bao gồm các phụ thuộc Spring JDBC. Thêm các tệp Student.java, StudentMapper.java, MainApp.java, StudentDAO.java và 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>

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Ví dụ sau sẽ trình bày cách tạo truy vấn bằng cách sử dụng truy vấn Chèn với sự trợ giúp của Spring JDBC. Chúng tôi sẽ chèn một vài bản ghi vào Bảng Sinh viên.

Cú pháp

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

Ở đâu,

  • insertQuery - Chèn truy vấn có trình giữ chỗ.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để chèn đối tượng sinh viên vào cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ chèn một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chươngSpring JDBC - First Application.
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Ví dụ sau sẽ trình bày cách đọc truy vấn bằng Spring JDBC. Chúng tôi sẽ đọc các bản ghi có sẵn trong Bảng Sinh viên.

Cú pháp

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

Ở đâu,

  • selectQuery - Chọn truy vấn để học sinh đọc.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc đối tượng sinh viên từ cơ sở dữ liệu.

  • StudentMapper - StudentMapper là một đối tượng RowMapper để ánh xạ từng bản ghi được tìm nạp thành đối tượng sinh viên.

Để hiểu các khái niệm đã đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ chọn một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Ví dụ sau sẽ trình bày cách cập nhật truy vấn bằng Spring JDBC. Chúng tôi sẽ cập nhật các bản ghi hiện có trong Bảng Sinh viên.

Cú pháp

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

Ở đâu,

  • updateQuery - Cập nhật truy vấn để cập nhật sinh viên với người giữ chỗ.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để cập nhật đối tượng sinh viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ cập nhật một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Ví dụ sau sẽ trình bày cách xóa truy vấn bằng Spring JDBC. Chúng tôi sẽ xóa một trong các bản ghi có sẵn trong Bảng Sinh viên.

Cú pháp

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

Ở đâu,

  • deleteQuery - Xóa truy vấn để xóa học sinh với chỗ dành sẵn.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để xóa đối tượng sinh viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ xóa một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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); 
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Ví dụ sau sẽ trình bày cách gọi một thủ tục được lưu trữ bằng Spring JDBC. Chúng tôi sẽ đọc một trong các bản ghi có sẵn trong Bảng Sinh viên bằng cách gọi một thủ tục được lưu trữ. Chúng tôi sẽ chuyển id và nhận hồ sơ học sinh.

Cú pháp

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"));

Ở đâu,

  • jdbcCall - Đối tượng SimpleJdbcCall để biểu diễn một thủ tục được lưu trữ.

  • in - Đối tượng SqlParameterSource để truyền một tham số cho một thủ tục được lưu trữ.

  • student - Đối tượng sinh viên.

  • out - Đối tượng ánh xạ để biểu diễn đầu ra của kết quả cuộc gọi thủ tục được lưu trữ.

Các SimpleJdbcCalllớp có thể được sử dụng để gọi một thủ tục được lưu trữ với các tham số IN và OUT. Bạn có thể sử dụng phương pháp này khi làm việc với một trong các RDBMS như Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle và Sybase.

Để hiểu cách tiếp cận, hãy xem xét thủ tục lưu trữ MySQL sau đây, lấy Id sinh viên và trả về tên và tuổi của sinh viên tương ứng bằng cách sử dụng các tham số OUT. Hãy để chúng tôi tạo quy trình được lưu trữ này trong cơ sở dữ liệu TEST bằng cách sử dụng dấu nhắc lệnh 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 ;

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ gọi một thủ tục được lưu trữ. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);  
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;      
   }
}

Mã bạn viết để thực hiện cuộc gọi liên quan đến việc tạo một SqlParameterSource chứa tham số IN. Điều quan trọng là phải khớp tên được cung cấp cho giá trị đầu vào với tên của tham số được khai báo trong thủ tục được lưu trữ. Phương thức thực thi nhận các tham số IN và trả về một Bản đồ có chứa bất kỳ tham số nào được khóa bằng tên như được chỉ định trong thủ tục được lưu trữ.

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID : 1, Name : Zara, Age : 11

Ví dụ sau sẽ trình bày cách gọi một hàm được lưu trữ bằng Spring JDBC. Chúng tôi sẽ đọc một trong các bản ghi có sẵn trong Bảng Sinh viên bằng cách gọi một hàm được lưu trữ. Chúng tôi sẽ chuyển một id và nhận tên sinh viên.

Cú pháp

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

Ở đâu,

  • in - Đối tượng SqlParameterSource để truyền một tham số cho một hàm được lưu trữ.

  • jdbcCall - Đối tượng SimpleJdbcCall để biểu diễn một hàm được lưu trữ.

  • jdbcTemplateObject - StudentJDBCTemplate đối tượng để gọi hàm được lưu trữ từ cơ sở dữ liệu.

  • student - Đối tượng sinh viên.

Các SimpleJdbcCalllớp có thể được sử dụng để gọi một hàm được lưu trữ với tham số IN và giá trị trả về. Bạn có thể sử dụng phương pháp này khi làm việc với một trong các RDBMS như Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle và Sybase.

Để hiểu cách tiếp cận, hãy xem xét thủ tục được lưu trữ MySQL sau, thủ tục này lấy Id sinh viên và trả về tên của sinh viên tương ứng. Vì vậy, hãy để chúng tôi tạo hàm được lưu trữ này trong cơ sở dữ liệu TEST của bạn bằng cách sử dụng dấu nhắc lệnh 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 ;

Để hiểu các khái niệm đã đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ gọi một hàm được lưu trữ. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);  
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;      
   }
}

Mã bạn viết để thực hiện cuộc gọi liên quan đến việc tạo một SqlParameterSource chứa tham số IN. Điều quan trọng là phải khớp tên được cung cấp cho giá trị đầu vào với tên của tham số được khai báo trong hàm được lưu trữ. Phương thức executeFunction nhận các tham số IN và trả về một Chuỗi như được chỉ định trong hàm được lưu trữ.

Sau đây là nội dung của MainApp.java tập tin

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID : 1, Name : Zara

Ví dụ sau sẽ trình bày cách cập nhật BLOB bằng Truy vấn cập nhật với sự trợ giúp của Spring JDBC. Chúng tôi sẽ cập nhật các bản ghi hiện có trong Bảng Sinh viên.

Bàn học sinh

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

Cú pháp

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

Ở đâu,

  • in - Đối tượng SqlParameterSource để truyền một tham số để cập nhật một truy vấn.

  • SqlLobValue - Đối tượng đại diện cho một tham số giá trị BLOB / CLOB của SQL.

  • jdbcTemplateObject - Đối tượng NamedParameterJdbcTemplate để cập nhật đối tượng sinh viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ cập nhật một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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 );
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

Updated Record with ID = 1

Bạn có thể kiểm tra byte [] được lưu trữ bằng cách truy vấn cơ sở dữ liệu.

Ví dụ sau sẽ trình bày cách cập nhật CLOB bằng cách sử dụng Truy vấn cập nhật với sự trợ giúp của Spring JDBC. Chúng tôi sẽ cập nhật các bản ghi hiện có trong Bảng Sinh viên.

Bàn học sinh

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

Cú pháp

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

Ở đâu,

  • in - Đối tượng SqlParameterSource để truyền một tham số để cập nhật một truy vấn.

  • SqlLobValue - Đối tượng đại diện cho một tham số giá trị BLOB / CLOB của SQL.

  • jdbcTemplateObject - Đối tượng NamedParameterJdbcTemplate để cập nhật đối tượng sinh viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ, ví dụ này sẽ cập nhật một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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 );
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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."); 
   }
}

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

Updated Record with ID = 1

Bạn có thể kiểm tra mô tả được lưu trữ bằng cách truy vấn cơ sở dữ liệu.

Ví dụ sau sẽ trình bày cách cập nhật hàng loạt bằng Spring JDBC. Chúng tôi sẽ cập nhật các bản ghi có sẵn trong bảng Sinh viên trong một hoạt động hàng loạt.

Cú pháp

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

Ở đâu,

  • SQL - Cập nhật truy vấn để cập nhật tuổi học sinh.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để cập nhật đối tượng sinh viên trong cơ sở dữ liệu.

  • BatchPreparedStatementSetter- Trình thực thi hàng loạt, thiết lập các giá trị trong PerparedStatement cho mỗi mục được xác định theo danh sách các đối tượng sinh viên và chỉ số i. getBatchSize () trả về kích thước của lô.

  • updateCounts - Mảng int chứa số hàng cập nhật cho mỗi truy vấn cập nhật.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ cập nhật một hoạt động hàng loạt. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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!");
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Ví dụ sau sẽ trình bày cách cập nhật hàng loạt bằng cách sử dụng các đối tượng trong Spring JDBC. Chúng tôi sẽ cập nhật các bản ghi có sẵn trong bảng Sinh viên trong một hoạt động hàng loạt.

Cú pháp

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!");

Ở đâu,

  • SQL - Cập nhật truy vấn để cập nhật tuổi học sinh.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để cập nhật đối tượng sinh viên trong cơ sở dữ liệu.

  • batch - Đối tượng SqlParameterSource để đại diện cho một loạt đối tượng.

  • updateCounts - Mảng int chứa số hàng cập nhật cho mỗi truy vấn cập nhật.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ cập nhật một hoạt động hàng loạt. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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!");
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Ví dụ sau sẽ trình bày cách thực hiện nhiều cập nhật hàng loạt trong một cuộc gọi bằng cách sử dụng Spring JDBC. Chúng tôi sẽ cập nhật các bản ghi có sẵn trong bảng Sinh viên trong một hoạt động hàng loạt với kích thước lô là 1.

Cú pháp

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

Ở đâu,

  • SQL - Cập nhật truy vấn để cập nhật tuổi học sinh.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để cập nhật đối tượng sinh viên trong cơ sở dữ liệu.

  • ParameterizedPreparedStatementSetter - Trình thực thi hàng loạt, thiết lập giá trị trong PerparedStatement cho mỗi mục được xác định bởi danh sách các đối tượng sinh viên.

  • updateCounts - Mảng int [] [] chứa số lượng hàng được cập nhật cho mỗi truy vấn cập nhật mỗi đợt.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ cập nhật nhiều hoạt động hàng loạt. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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!");
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.springframework.jdbc.core.JdbcTemplatelớp là lớp trung tâm trong gói lõi JDBC. Nó đơn giản hóa việc sử dụng JDBC và giúp tránh các lỗi phổ biến. Nó thực thi quy trình làm việc JDBC cốt lõi, để lại mã ứng dụng để cung cấp SQL và trích xuất kết quả. Lớp này thực thi các truy vấn hoặc cập nhật SQL, bắt đầu lặp qua ResultSets và bắt các ngoại lệ JDBC và dịch chúng sang hệ thống phân cấp ngoại lệ chung, nhiều thông tin hơn được xác định trongorg.springframework.dao gói hàng.

Khai báo lớp học

Sau đây là khai báo cho lớp org.springframework.jdbc.core.JdbcTemplate:

public class JdbcTemplate
   extends JdbcAccessor
      implements JdbcOperations

Sử dụng

Step 1 - Tạo một đối tượng JdbcTemplate bằng cách sử dụng nguồn dữ liệu đã định cấu hình.

Step 2 - Sử dụng các phương thức đối tượng JdbcTemplate để thực hiện các thao tác với cơ sở dữ liệu.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc một truy vấn bằng lớp JdbcTemplate. Chúng tôi sẽ đọc các bản ghi có sẵn trong Bảng Sinh viên.

Cú pháp

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

Ở đâu,

  • selectQuery - Chọn truy vấn để học sinh đọc.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc đối tượng sinh viên từ cơ sở dữ liệu.

  • StudentMapper - StudentMapper là một đối tượng RowMapper để ánh xạ từng bản ghi đã tìm nạp tới đối tượng student.

Để hiểu các khái niệm nêu trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ chọn một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.springframework.jdbc.core.PreparedStatementSettergiao diện hoạt động như một giao diện gọi lại chung được sử dụng bởi lớp JdbcTemplate. Giao diện này đặt các giá trị trên một PreparedStatement được cung cấp bởi lớp JdbcTemplate, cho mỗi bản cập nhật trong một đợt sử dụng cùng một SQL.

Triển khai có trách nhiệm thiết lập bất kỳ thông số cần thiết nào. SQL với trình giữ chỗ sẽ đã được cung cấp. Giao diện này dễ sử dụng hơn PreparedStatementCreator. JdbcTemplate sẽ tạo PreparedStatement, với callback chỉ chịu trách nhiệm thiết lập các giá trị tham số.

Khai báo giao diện

Sau đây là khai báo cho giao diện org.springframework.jdbc.core.PreparedStatementSetter -

public interface PreparedStatementSetter

Sử dụng

Step 1 - Tạo một đối tượng JdbcTemplate bằng cách sử dụng nguồn dữ liệu đã định cấu hình.

Step 2 - Sử dụng các phương thức đối tượng JdbcTemplate để thực hiện các hoạt động cơ sở dữ liệu trong khi truyền đối tượng PreparedStatementSetter để thay thế các trình giữ chỗ trong truy vấn.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc một truy vấn bằng cách sử dụng lớp JdbcTemplate và giao diện PreparedStatementSetter. Chúng tôi sẽ đọc hồ sơ có sẵn của một sinh viên trong Bảng Sinh viên.

Cú pháp

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());

Ở đâu,

  • SQL - Chọn truy vấn để học sinh đọc.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc đối tượng sinh viên từ cơ sở dữ liệu.

  • PreparedStatementSetter - Đối tượng PreparedStatementSetter để thiết lập các tham số trong truy vấn.

  • StudentMapper - StudentMapper là một đối tượng RowMapper để ánh xạ từng bản ghi được tìm nạp thành đối tượng sinh viên.

Để hiểu các khái niệm nêu trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ chọn một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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);
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID : 1, Age : 17

Các org.springframework.jdbc.core.ResultSetExtractorinterface là một giao diện gọi lại được sử dụng bởi các phương thức truy vấn của JdbcTemplate. Việc triển khai giao diện này thực hiện công việc thực sự là trích xuất kết quả từ Tập kết quả, nhưng không cần lo lắng về việc xử lý ngoại lệ.

SQLExceptions sẽ được bắt và xử lý bởi JdbcTemplate đang gọi. Giao diện này chủ yếu được sử dụng trong khuôn khổ JDBC. RowMapper thường là lựa chọn đơn giản hơn để xử lý ResultSet, ánh xạ một đối tượng kết quả trên mỗi hàng thay vì một đối tượng kết quả cho toàn bộ ResultSet.

Khai báo giao diện

Sau đây là khai báo cho giao diện org.springframework.jdbc.core.ResultSetExtractor -

public interface ResultSetExtractor

Sử dụng

Step 1 - Tạo một đối tượng JdbcTemplate bằng cách sử dụng nguồn dữ liệu đã định cấu hình.

Step 2 - Sử dụng các phương thức đối tượng JdbcTemplate để thực hiện các hoạt động cơ sở dữ liệu trong khi phân tích cú pháp tập kết quả bằng cách sử dụng ResultSetExtractor.

Thí dụ

Ví dụ sau sẽ trình bày cách đọc một truy vấn bằng cách sử dụng lớp JdbcTemplate và giao diện ResultSetExtractor. Chúng tôi sẽ đọc hồ sơ có sẵn của một sinh viên trong Bảng Sinh viên.

Cú pháp

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

Ở đâu,

  • SQL - Chọn truy vấn để học sinh đọc.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc đối tượng sinh viên từ cơ sở dữ liệu.

  • ResultSetExtractor - Đối tượng ResultSetExtractor để phân tích cú pháp đối tượng resultset.

Để hiểu các khái niệm nêu trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ chọn một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.springframework.jdbc.core.RowMapper<T>giao diện được sử dụng bởi JdbcTemplate để ánh xạ các hàng của Tập kết quả trên cơ sở mỗi hàng. Các triển khai của giao diện này thực hiện công việc thực tế là ánh xạ từng hàng với một đối tượng kết quả. SQLExceptions nếu được ném bất kỳ sẽ bị bắt và xử lý bởi JdbcTemplate đang gọi.

Khai báo giao diện

Sau đây là khai báo cho org.springframework.jdbc.core.RowMapper<T> giao diện -

public interface RowMapper<T>

Sử dụng

Step 1 - Tạo một đối tượng JdbcTemplate bằng cách sử dụng nguồn dữ liệu đã định cấu hình.

Step 2 - Tạo một đối tượng StudentMapper thực hiện giao diện RowMapper.

Step 3 - Sử dụng các phương thức đối tượng JdbcTemplate để thực hiện các hoạt động cơ sở dữ liệu trong khi sử dụng đối tượng StudentMapper.

Ví dụ sau sẽ trình bày cách đọc một truy vấn bằng spring jdbc. Chúng tôi sẽ ánh xạ các bản ghi đã đọc từ Bảng Sinh viên sang đối tượng Sinh viên bằng đối tượng StudentMapper.

Cú pháp

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

Ở đâu

  • SQL - Đọc truy vấn để đọc tất cả hồ sơ học sinh.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc hồ sơ sinh viên từ cơ sở dữ liệu.

  • StudentMapper - Đối tượng StudentMapper để ánh xạ hồ sơ sinh viên sang các đối tượng sinh viên.

Để hiểu các khái niệm đã đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ đọc một truy vấn và ánh xạ kết quả bằng cách sử dụng đối tượng StudentMapper. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.springframework.jdbc.core.NamedParameterJdbcTemplatelớp là một lớp mẫu với tập hợp các hoạt động JDBC cơ bản, cho phép sử dụng các tham số được đặt tên thay vì '?' truyền thống trình giữ chỗ. Lớp này ủy quyền cho một JdbcTemplate được bao bọc sau khi thay thế từ các tham số được đặt tên thành kiểu JDBC '?' trình giữ chỗ được thực hiện tại thời điểm thực thi. Nó cũng cho phép mở rộng danh sách các giá trị với số lượng trình giữ chỗ thích hợp.

Khai báo giao diện

Sau đây là khai báo cho org.springframework.jdbc.core.NamedParameterJdbcTemplate lớp học -

public class NamedParameterJdbcTemplate
   extends Object
      implements NamedParameterJdbcOperations

Cú pháp

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

Ở đâu,

  • in - Đối tượng SqlParameterSource để truyền một tham số để cập nhật một truy vấn.

  • SqlLobValue - Đối tượng đại diện cho một tham số giá trị BLOB / CLOB của SQL.

  • jdbcTemplateObject - Đối tượng NamedParameterJdbcTemplate để cập nhật đối tượng sinh viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ cập nhật một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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 );
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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."); 
   }
}

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

Updated Record with ID = 1

Bạn có thể kiểm tra mô tả được lưu trữ bằng cách truy vấn cơ sở dữ liệu.

Các org.springframework.jdbc.core.SimpleJdbcInsertlớp là một đối tượng đa luồng, có thể tái sử dụng, cung cấp khả năng chèn dễ dàng cho bảng. Nó cung cấp xử lý dữ liệu meta để đơn giản hóa mã cần thiết để xây dựng một câu lệnh chèn cơ bản. Chèn thực tế đang được xử lý bằng JdbcTemplate của Spring

Khai báo lớp học

Sau đây là khai báo cho org.springframework.jdbc.core.SimpleJdbcInsert lớp học -

public class SimpleJdbcInsert
   extends AbstractJdbcInsert
      implements SimpleJdbcInsertOperations

Ví dụ sau sẽ trình bày cách chèn một truy vấn bằng Spring JDBC. Chúng tôi sẽ chèn một bản ghi trong Bảng sinh viên bằng đối tượng SimpleJdbcInsert.

Cú pháp

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

Ở đâu,

  • jdbcInsert - Đối tượng SimpleJdbcInsert để chèn bản ghi trong bảng sinh viên.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc đối tượng sinh viên trong cơ sở dữ liệu.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ chèn một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.springframework.jdbc.core.SimpleJdbcCalllớp là một đối tượng đa luồng, có thể tái sử dụng đại diện cho một lệnh gọi đến một thủ tục được lưu trữ hoặc một hàm được lưu trữ. Nó cung cấp xử lý dữ liệu meta để đơn giản hóa mã cần thiết để truy cập các thủ tục / chức năng cơ bản được lưu trữ.

Tất cả những gì bạn cần cung cấp là tên của thủ tục / hàm và một bản đồ chứa các tham số khi bạn thực hiện lệnh gọi. Tên của các tham số được cung cấp sẽ được khớp với các tham số vào và ra được khai báo khi tạo thủ tục được lưu trữ.

Khai báo lớp học

Sau đây là khai báo cho org.springframework.jdbc.core.SimpleJdbcCall lớp học -

public class SimpleJdbcCall
   extends AbstractJdbcCall
      implements SimpleJdbcCallOperations

Ví dụ sau sẽ trình bày cách gọi một thủ tục được lưu trữ bằng Spring SimpleJdbcCall. Chúng tôi sẽ đọc một trong các bản ghi có sẵn trong Bảng Sinh viên bằng cách gọi một thủ tục được lưu trữ. Chúng tôi sẽ chuyển id và nhận hồ sơ học sinh.

Cú pháp

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"));

Ở đâu,

  • jdbcCall - Đối tượng SimpleJdbcCall để biểu diễn một thủ tục được lưu trữ.

  • in - Đối tượng SqlParameterSource để truyền một tham số cho một thủ tục được lưu trữ.

  • student - Đối tượng sinh viên.

  • out - Đối tượng ánh xạ để biểu diễn đầu ra của kết quả cuộc gọi thủ tục đã lưu trữ.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ gọi một thủ tục được lưu trữ. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);  
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;      
   }
}

Mã bạn viết để thực hiện cuộc gọi liên quan đến việc tạo một SqlParameterSource chứa tham số IN. Điều quan trọng là phải khớp tên được cung cấp cho giá trị đầu vào với tên của tham số được khai báo trong thủ tục được lưu trữ. Phương thức thực thi nhận các tham số IN và trả về một Bản đồ có chứa bất kỳ tham số nào được khóa bằng tên như được chỉ định trong thủ tục được lưu trữ.

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID : 1, Name : Zara, Age : 11

Các org.springframework.jdbc.object.SqlQuery lớp cung cấp một đối tượng hoạt động có thể tái sử dụng đại diện cho một truy vấn SQL.

Khai báo lớp học

Sau đây là khai báo cho org.springframework.jdbc.object.SqlQuery lớp học -

public abstract class SqlQuery<T>
   extends SqlOperation

Sử dụng

  • Step 1 - Tạo một đối tượng JdbcTemplate bằng cách sử dụng nguồn dữ liệu đã định cấu hình.

  • Step 2 - Tạo một đối tượng StudentMapper thực hiện giao diện RowMapper.

  • Step 3 - Sử dụng các phương thức đối tượng JdbcTemplate để thực hiện các hoạt động cơ sở dữ liệu trong khi sử dụng đối tượng SqlQuery.

Ví dụ sau sẽ trình bày cách đọc một Truy vấn bằng Đối tượng SqlQuery. Chúng tôi sẽ ánh xạ các bản ghi đã đọc từ Bảng Sinh viên sang đối tượng Sinh viên bằng đối tượng StudentMapper.

Cú pháp

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();

Ở đâu,

  • SQL - Đọc truy vấn để đọc tất cả hồ sơ học sinh.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc hồ sơ sinh viên từ cơ sở dữ liệu.

  • StudentMapper - Đối tượng StudentMapper để ánh xạ hồ sơ học sinh thành các đối tượng học sinh.

  • SqlQuery - Đối tượng SqlQuery để truy vấn hồ sơ sinh viên và ánh xạ chúng thành các đối tượng sinh viên.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ đọc một truy vấn và ánh xạ kết quả bằng đối tượng StudentMapper. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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();   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.springframework.jdbc.object.SqlUpdate lớp cung cấp đối tượng hoạt động có thể tái sử dụng đại diện cho một bản cập nhật SQL.

Khai báo lớp học

Sau đây là khai báo cho org.springframework.jdbc.object.SqlUpdate lớp học -

public abstract class SqlUpdate<T>
   extends SqlOperation

Sử dụng

Step 1 - Tạo một đối tượng JdbcTemplate bằng cách sử dụng nguồn dữ liệu đã định cấu hình.

Step 2 - Tạo một đối tượng StudentMapper thực hiện giao diện RowMapper.

Step 3 - Sử dụng các phương thức đối tượng JdbcTemplate để thực hiện các hoạt động cơ sở dữ liệu trong khi sử dụng đối tượng SqlUpdate.

Ví dụ sau sẽ trình bày cách cập nhật một Truy vấn bằng SqlUpdate Object. Chúng tôi sẽ ánh xạ các bản ghi cập nhật từ Bảng sinh viên sang đối tượng Sinh viên bằng đối tượng StudentMapper.

Cú pháp

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());

Ở đâu,

  • SQL - Cập nhật truy vấn cập nhật hồ sơ học sinh.

  • jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc các bản ghi sinh viên từ cơ sở dữ liệu.

  • StudentMapper - Đối tượng StudentMapper để ánh xạ hồ sơ sinh viên sang các đối tượng sinh viên.

  • sqlUpdate - Đối tượng SqlUpdate để cập nhật hồ sơ sinh viên.

Để hiểu các khái niệm đã đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ đọc một truy vấn và ánh xạ kết quả bằng cách sử dụng đối tượng StudentMapper. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);   
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;
   }
}

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

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

Các org.springframework.jdbc.core.StoredProcedurelớp là lớp cha cho sự trừu tượng hóa đối tượng của các thủ tục được lưu trữ RDBMS. Lớp này là trừu tượng và mục đích là các lớp con sẽ cung cấp một phương thức được định kiểu để gọi mà ủy quyền cho phương thức thực thi (java.lang.Object ...) được cung cấp. Thuộc tính SQL kế thừa là tên của thủ tục được lưu trữ trong RDBMS.

Khai báo lớp học

Sau đây là khai báo cho org.springframework.jdbc.core.StoredProcedure lớp học -

public abstract class StoredProcedure
   extends SqlCall

Ví dụ sau sẽ trình bày cách gọi một thủ tục được lưu trữ bằng Spring StoredProcedure. Chúng tôi sẽ đọc một trong các bản ghi có sẵn trong Bảng Sinh viên bằng cách gọi một thủ tục được lưu trữ. Chúng tôi sẽ chuyển id và nhận hồ sơ học sinh.

Cú pháp

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

Ở đâu,

  • StoredProcedure - Đối tượng StoredProcedure để biểu diễn một thủ tục được lưu trữ.

  • StudentProcedure - Đối tượng StudentProcedure mở rộng StoredProcedure để khai báo biến đầu vào, đầu ra và ánh xạ kết quả cho đối tượng Student.

  • student - Đối tượng sinh viên.

Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ gọi một thủ tục được lưu trữ. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.

Bươc Sự miêu tả
1 Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên .
2 Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu 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);  
}

Sau đây là nội dung của Student.java tập tin.

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

Sau đây là nội dung của StudentMapper.java tập tin.

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

Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được định nghĩa 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;  	
   }
}

Mã bạn viết để thực hiện cuộc gọi liên quan đến việc tạo một SqlParameterSource chứa tham số IN. Điều quan trọng là phải khớp tên được cung cấp cho giá trị đầu vào với tên của tham số được khai báo trong thủ tục được lưu trữ. Phương thức thực thi nhận các tham số IN và trả về một Bản đồ có chứa bất kỳ tham số nào được khóa bằng tên như được chỉ định trong thủ tục được lưu trữ.

Sau đây là nội dung của MainApp.java tập tin.

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

Sau đây là tệp cấu hình 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.

ID : 1, Name : Zara, Age : 10