Spring JDBC - คู่มือฉบับย่อ

ในขณะที่ทำงานกับฐานข้อมูลโดยใช้ JDBC แบบเดิม ๆ การเขียนโค้ดที่ไม่จำเป็นเพื่อจัดการกับข้อยกเว้นการเปิดและปิดการเชื่อมต่อฐานข้อมูลเป็นต้นจะยุ่งยากอย่างไรก็ตาม Spring JDBC Framework จะดูแลรายละเอียดระดับต่ำทั้งหมดโดยเริ่มตั้งแต่การเปิดการเชื่อมต่อการเตรียมและ การดำเนินการคำสั่ง SQL การประมวลผลข้อยกเว้นการจัดการธุรกรรมและสุดท้ายปิดการเชื่อมต่อ

สิ่งที่คุณทำมีเพียงกำหนดพารามิเตอร์การเชื่อมต่อและระบุคำสั่ง SQL ที่จะดำเนินการและทำงานที่จำเป็นสำหรับการทำซ้ำแต่ละครั้งในขณะที่ดึงข้อมูลจากฐานข้อมูล

Spring JDBC มีหลายแนวทางและคลาสที่แตกต่างกันเพื่อเชื่อมต่อกับฐานข้อมูล ในบทช่วยสอนนี้เราจะใช้แนวทางคลาสสิกและเป็นที่นิยมมากที่สุดซึ่งใช้คลาส JDBC Template ของเฟรมเวิร์ก นี่คือคลาสเฟรมเวิร์กกลางที่จัดการการสื่อสารฐานข้อมูลและการจัดการข้อยกเว้นทั้งหมด

คลาสเทมเพลต JDBC

คลาส JDBC Template เรียกใช้เคียวรี SQL อัพเดตคำสั่งและการเรียกโพรซีเดอร์ที่จัดเก็บดำเนินการวนซ้ำบน ResultSets และการแยกค่าพารามิเตอร์ที่ส่งคืน นอกจากนี้ยังตรวจจับข้อยกเว้น JDBC และแปลเป็นลำดับชั้นข้อยกเว้นทั่วไปที่ให้ข้อมูลมากขึ้นซึ่งกำหนดไว้ในแพ็คเกจ org.springframework.dao

อินสแตนซ์ของคลาส JDBC Template คือ threadsafe เมื่อกำหนดค่าแล้ว ดังนั้นคุณสามารถกำหนดค่าอินสแตนซ์เดียวของเทมเพลต JDBC จากนั้นฉีดข้อมูลอ้างอิงที่แชร์นี้ลงใน DAO หลายตัวได้อย่างปลอดภัย

แนวทางปฏิบัติทั่วไปเมื่อใช้คลาส JDBC Template คือการกำหนดค่า DataSource ในไฟล์คอนฟิกูเรชัน Spring ของคุณจากนั้นใช้การพึ่งพา DataSource bean ที่แบ่งใช้ในคลาส DAO เทมเพลต JDBC ถูกสร้างขึ้นใน setter สำหรับ DataSource

วัตถุการเข้าถึงข้อมูล (DAO)

DAO ย่อมาจาก Data Access Objectซึ่งมักใช้สำหรับการโต้ตอบกับฐานข้อมูล DAO มีอยู่เพื่อจัดหาวิธีการอ่านและเขียนข้อมูลไปยังฐานข้อมูลและควรเปิดเผยฟังก์ชันนี้ผ่านอินเทอร์เฟซที่แอปพลิเคชันที่เหลือจะเข้าถึงได้

การสนับสนุน Data Access Object (DAO) ใน Spring ทำให้ง่ายต่อการทำงานกับเทคโนโลยีการเข้าถึงข้อมูลเช่น JDBC, Hibernate, JPA หรือ JDO ในลักษณะที่สอดคล้องกัน

บทนี้จะนำคุณเข้าสู่ขั้นตอนการตั้งค่า Spring-AOP บนระบบที่ใช้ Windows และ Linux Spring AOP สามารถติดตั้งและรวมเข้ากับสภาพแวดล้อม Java และ MAVEN ปัจจุบันของคุณได้อย่างง่ายดายโดยทำตามขั้นตอนง่ายๆไม่กี่ขั้นตอนโดยไม่ต้องมีขั้นตอนการตั้งค่าที่ซับซ้อน จำเป็นต้องมีการดูแลระบบผู้ใช้ขณะติดตั้ง

ความต้องการของระบบ

JDK Java SE 2 JDK 1.5 ขึ้นไป
หน่วยความจำ RAM 1 GB (แนะนำ)
พื้นที่ดิสก์ ไม่มีข้อกำหนดขั้นต่ำ
เวอร์ชันระบบปฏิบัติการ Windows XP ขึ้นไปลินุกซ์

ให้เราดำเนินการตามขั้นตอนเพื่อติดตั้ง Spring AOP

ขั้นตอนที่ 1 - ตรวจสอบการติดตั้ง Java ของคุณ

ก่อนอื่นคุณต้องติดตั้ง Java Software Development Kit (SDK) ในระบบของคุณ ในการตรวจสอบสิ่งนี้ให้ดำเนินการสองคำสั่งต่อไปนี้ขึ้นอยู่กับแพลตฟอร์มที่คุณกำลังทำงานอยู่

หากการติดตั้ง Java ทำได้อย่างถูกต้องการติดตั้งจะแสดงเวอร์ชันปัจจุบันและข้อมูลจำเพาะของการติดตั้ง Java ของคุณ ตัวอย่างผลลัพธ์จะได้รับในตารางต่อไปนี้

แพลตฟอร์ม คำสั่ง ตัวอย่างผลลัพธ์
Windows

เปิดคอนโซลคำสั่งและพิมพ์ -

\>java -version

เวอร์ชัน Java "1.7.0_60"

Java (TM) SE Run Time Environment (บิวด์ 1.7.0_60-b19)

Java Hotspot (TM) 64-bit Server VM (build 24.60-b09, mixed mode)

ลินุกซ์

เปิดเทอร์มินัลคำสั่งแล้วพิมพ์ -

$java -version

เวอร์ชัน java "1.7.0_25"

เปิด JDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64)

เปิด JDK 64-Bit Server VM (สร้าง 23.7-b01 โหมดผสม)

เราถือว่าผู้อ่านบทช่วยสอนนี้ติดตั้ง Java SDK เวอร์ชัน 1.7.0_60 ในระบบ ในกรณีที่คุณไม่มี Java SDK ให้ดาวน์โหลดเวอร์ชันปัจจุบันจากไฟล์https://www.oracle.com/technetwork/java/javase/downloads/index.html และติดตั้ง

ขั้นตอนที่ 2 - ตั้งค่าสภาพแวดล้อม Java ของคุณ

ตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME ให้ชี้ไปยังตำแหน่งไดเร็กทอรีฐานที่ติดตั้ง Java บนเครื่องของคุณ ตัวอย่างเช่น,

แพลตฟอร์ม คำอธิบาย
Windows ตั้งค่า JAVA_HOME เป็น C: \ ProgramFiles \ java \ jdk1.7.0_60
ลินุกซ์ ส่งออก JAVA_HOME = / usr / local / java-current

ผนวกพา ธ แบบเต็มของตำแหน่งคอมไพเลอร์ Java เข้ากับ System Path

แพลตฟอร์ม คำอธิบาย
Windows ต่อท้าย String "C: \ Program Files \ Java \ jdk1.7.0_60 \ bin" ต่อท้ายตัวแปรระบบ PATH
ลินุกซ์ ส่งออกเส้นทาง = $ PATH: $ JAVA_HOME / bin /

ดำเนินการคำสั่ง java -version จากพรอมต์คำสั่งตามที่อธิบายไว้ข้างต้น

ขั้นตอนที่ 3 - ดาวน์โหลด Maven Archive

ดาวน์โหลด Maven 3.3.3 จาก https://maven.apache.org/download.cgi

ระบบปฏิบัติการ ชื่อที่เก็บถาวร
Windows apache-maven-3.3.3-bin.zip
ลินุกซ์ apache-maven-3.3.3-bin.tar.gz
Mac apache-maven-3.3.3-bin.tar.gz

ขั้นตอนที่ 4 - แยกไฟล์ Maven Archive

แตกไฟล์เก็บถาวรไปยังไดเร็กทอรีที่คุณต้องการติดตั้ง Maven 3.3.3 ไดเร็กทอรีย่อย apache-maven-3.3.3 จะถูกสร้างขึ้นจากไฟล์เก็บถาวร

ระบบปฏิบัติการ ตำแหน่ง (อาจแตกต่างกันไปตามการติดตั้งของคุณ)
Windows C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3
ลินุกซ์ / usr / local / apache-maven
Mac / usr / local / apache-maven

ขั้นตอนที่ 5 - ตั้งค่าตัวแปรสภาพแวดล้อม Maven

เพิ่ม M2_HOME, M2, MAVEN_OPTS ให้กับตัวแปรสภาพแวดล้อม

ระบบปฏิบัติการ เอาต์พุต
Windows

ตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้คุณสมบัติของระบบ

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

M2 =% M2_HOME% \ bin

MAVEN_OPTS = -Xms256m -Xmx512m

ลินุกซ์

เปิดเทอร์มินัลคำสั่งและตั้งค่าตัวแปรสภาพแวดล้อม

ส่งออก M2_HOME = /usr/local/apache-maven/apache-maven-3.3.3

ส่งออก M2 = $ M2_HOME / bin

ส่งออก MAVEN_OPTS = -Xms256m -Xmx512m

Mac

เปิดเทอร์มินัลคำสั่งและตั้งค่าตัวแปรสภาพแวดล้อม

ส่งออก M2_HOME = /usr/local/apache-maven/apache-maven-3.3.3

ส่งออก M2 = $ M2_HOME / bin

ส่งออก MAVEN_OPTS = -Xms256m -Xmx512m

ขั้นตอนที่ 6 - เพิ่มตำแหน่ง Maven Bin Directory ไปยัง System Path

ต่อท้ายตัวแปร M2 เข้ากับ System Path

ระบบปฏิบัติการ เอาต์พุต
Windows ต่อท้ายสตริง% M2% ต่อท้ายตัวแปรระบบ Path
ลินุกซ์ เส้นทางการส่งออก = $ M2: $ PATH
Mac เส้นทางการส่งออก = $ M2: $ PATH

ขั้นตอนที่ 7 - ตรวจสอบการติดตั้ง Maven

ตอนนี้เปิดคอนโซลดำเนินการต่อไปนี้ mvn คำสั่ง

ระบบปฏิบัติการ งาน คำสั่ง
Windows เปิด Command Console c: \> mvn - รุ่น
ลินุกซ์ เปิด Command Terminal $ mvn - รุ่น
Mac เปิด Terminal เครื่อง: <joseph $ mvn --version

สุดท้ายตรวจสอบผลลัพธ์ของคำสั่งข้างต้นซึ่งควรเป็นดังนี้ -

ระบบปฏิบัติการ เอาต์พุต
Windows

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

บ้าน Maven: C: \ Program Files \ Apache Software Foundation \ apache-maven-3.3.3

เวอร์ชัน Java: 1.7.0_75 ผู้จำหน่าย: Oracle Corporation

หน้าแรกของ Java: C: \ Program Files \ Java \ jdk1.7.0_75 \ jre

ภาษาเริ่มต้น: en_US การเข้ารหัสแพลตฟอร์ม: Cp1252

ลินุกซ์

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

บ้าน Maven: /usr/local/apache-maven/apache-maven-3.3.3

เวอร์ชัน Java: 1.7.0_75 ผู้จำหน่าย: Oracle Corporation

โฮม Java: /usr/local/java-current/jdk1.7.0_75/jre

Mac

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

บ้าน Maven: /usr/local/apache-maven/apache-maven-3.3.3

เวอร์ชัน Java: 1.7.0_75 ผู้จำหน่าย: Oracle Corporation

โฮม Java: /Library/Java/Home/jdk1.7.0_75/jre

ขั้นตอนที่ 8 - ตั้งค่า Eclipse IDE

ตัวอย่างทั้งหมดในบทช่วยสอนนี้เขียนขึ้นโดยใช้ Eclipse IDE ดังนั้นฉันขอแนะนำให้คุณติดตั้ง Eclipse เวอร์ชันล่าสุดในเครื่องของคุณ

ในการติดตั้ง Eclipse IDE ให้ดาวน์โหลดไบนารี Eclipse ล่าสุดจาก https://www.eclipse.org/downloads/. เมื่อคุณดาวน์โหลดการติดตั้งแล้วให้แกะการกระจายไบนารีลงในตำแหน่งที่สะดวก ตัวอย่างเช่นใน C: \ eclipse บน Windows หรือ / usr / local / eclipse บน Linux / Unix สุดท้ายตั้งค่าตัวแปร PATH ให้เหมาะสม

Eclipse สามารถเริ่มต้นได้โดยดำเนินการคำสั่งต่อไปนี้บนเครื่อง Windows หรือคุณสามารถดับเบิลคลิกที่ eclipse.exe

%C:\eclipse\eclipse.exe

Eclipse สามารถเริ่มต้นได้โดยดำเนินการคำสั่งต่อไปนี้บนเครื่อง Unix (Solaris, Linux และอื่น ๆ )

$/usr/local/eclipse/eclipse

หลังจากเริ่มต้นสำเร็จหากทุกอย่างเรียบร้อยดีควรแสดงผลลัพธ์ต่อไปนี้

เมื่อคุณทำขั้นตอนสุดท้ายนี้เสร็จแล้วคุณก็พร้อมที่จะดำเนินการต่อสำหรับตัวอย่าง JDBC แรกของคุณซึ่งคุณจะเห็นในบทถัดไป

ให้เราสร้างตารางฐานข้อมูล Student ในฐานข้อมูลของเรา TEST. ฉันคิดว่าคุณกำลังทำงานกับฐานข้อมูล MySQL หากคุณทำงานกับฐานข้อมูลอื่นคุณสามารถเปลี่ยนการสืบค้น DDL และ SQL ของคุณได้

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

ตอนนี้เราจำเป็นต้องจัดหาแหล่งข้อมูลให้กับเทมเพลต JDBC เพื่อให้สามารถกำหนดค่าตัวเองเพื่อเข้าถึงฐานข้อมูลได้ คุณสามารถกำหนดค่า DataSource ในไฟล์ XML ด้วยโค้ดที่แสดงดังต่อไปนี้ -

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

ในบทถัดไปเราจะเขียนแอปพลิเคชันแรกโดยใช้ฐานข้อมูลที่กำหนดค่าไว้

เพื่อทำความเข้าใจแนวคิดที่เกี่ยวข้องกับ Spring JDBC framework ด้วยคลาส JDBC Template ให้เราเขียนตัวอย่างง่ายๆซึ่งจะใช้การดำเนินการแทรกและอ่านในตารางนักเรียนต่อไปนี้

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

ให้เราดำเนินการเขียนแอปพลิเคชัน Spring JDBC บนคอนโซลแบบง่ายๆซึ่งจะแสดงแนวคิด JDBC

สร้างโครงการ

มาเปิดคอนโซลคำสั่งไปที่ไดเร็กทอรี C: \ MVN และดำเนินการต่อไปนี้ mvn คำสั่ง

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

Maven จะเริ่มประมวลผลและจะสร้างโครงสร้างโครงการแอปพลิเคชัน Java ที่สมบูรณ์

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

ตอนนี้ไปที่ไดเรกทอรี C: / MVN คุณจะเห็นโปรเจ็กต์แอปพลิเคชัน Java ที่สร้างขึ้นชื่อ student (ตามที่ระบุใน artifactId) อัพเดต POM.xml เพื่อรวมการอ้างอิง Spring JDBC เพิ่มไฟล์ Student.java, StudentMapper.java, MainApp.java, StudentDAO.java และ 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>

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

ตัวอย่างต่อไปนี้จะสาธิตวิธีสร้างแบบสอบถามโดยใช้แทรกคิวรีด้วยความช่วยเหลือของ Spring JDBC เราจะแทรกระเบียนสองสามรายการในตารางนักเรียน

ไวยากรณ์

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

ที่ไหน

  • insertQuery - แทรกแบบสอบถามที่มีตัวยึด

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่อแทรกวัตถุนักเรียนในฐานข้อมูล

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะแทรกแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัปเดตโครงการที่นักเรียนสร้างขึ้นภายใต้บทSpring JDBC - First Application.
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอ่านแบบสอบถามโดยใช้ Spring JDBC เราจะอ่านบันทึกที่มีอยู่ในตารางนักเรียน

ไวยากรณ์

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

ที่ไหน

  • selectQuery - เลือกแบบสอบถามเพื่ออ่านนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออ่านวัตถุนักเรียนจากฐานข้อมูล

  • StudentMapper - StudentMapper เป็นออบเจ็กต์ RowMapper เพื่อแมปแต่ละระเบียนที่ดึงมากับวัตถุของนักเรียน

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเลือกคิวรี ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอัพเดตแบบสอบถามโดยใช้ Spring JDBC เราจะอัปเดตบันทึกที่มีอยู่ในตารางนักเรียน

ไวยากรณ์

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

ที่ไหน

  • updateQuery - อัปเดตแบบสอบถามเพื่ออัปเดตนักเรียนกับผู้ถือสถานที่

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออัปเดตวัตถุนักเรียนในฐานข้อมูล

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอัปเดตแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

ตัวอย่างต่อไปนี้จะสาธิตวิธีการลบแบบสอบถามโดยใช้ Spring JDBC เราจะลบหนึ่งในระเบียนที่มีอยู่ในตารางนักเรียน

ไวยากรณ์

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

ที่ไหน

  • deleteQuery - ลบแบบสอบถามเพื่อลบนักเรียนด้วยตัวยึด

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่อลบวัตถุนักเรียนในฐานข้อมูล

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะลบคิวรี ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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); 
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

ตัวอย่างต่อไปนี้จะสาธิตวิธีการเรียกใช้โพรซีเดอร์ที่เก็บไว้โดยใช้ Spring JDBC เราจะอ่านหนึ่งในบันทึกที่มีอยู่ในตารางนักเรียนโดยเรียกขั้นตอนที่จัดเก็บไว้ เราจะส่งรหัสและรับบันทึกของนักเรียน

ไวยากรณ์

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

ที่ไหน

  • jdbcCall - วัตถุ SimpleJdbcCall เพื่อแสดงกระบวนงานที่เก็บไว้

  • in - วัตถุ SqlParameterSource เพื่อส่งผ่านพารามิเตอร์ไปยังกระบวนงานที่เก็บไว้

  • student - วัตถุนักเรียน

  • out - แมปวัตถุเพื่อแสดงผลลัพธ์ของผลลัพธ์การเรียกกระบวนงานที่เก็บไว้

SimpleJdbcCallคลาสสามารถใช้เพื่อเรียกโพรซีเดอร์ที่จัดเก็บด้วยพารามิเตอร์ IN และ OUT คุณสามารถใช้แนวทางนี้ขณะทำงานกับ RDBMS อย่างใดอย่างหนึ่งเช่น Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle และ Sybase

เพื่อทำความเข้าใจแนวทางนี้ให้พิจารณาขั้นตอนการจัดเก็บ MySQL ต่อไปนี้ซึ่งใช้รหัสนักเรียนและส่งคืนชื่อและอายุของนักเรียนที่เกี่ยวข้องโดยใช้พารามิเตอร์ OUT ให้เราสร้างโพรซีเดอร์ที่เก็บไว้นี้ในฐานข้อมูล TEST โดยใช้พรอมต์คำสั่ง 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 ;

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเรียกขั้นตอนการจัดเก็บ ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);  
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

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

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

โค้ดที่คุณเขียนสำหรับการเรียกใช้งานเกี่ยวข้องกับการสร้าง SqlParameterSource ที่มีพารามิเตอร์ IN สิ่งสำคัญคือต้องจับคู่ชื่อที่ระบุสำหรับค่าอินพุตกับชื่อพารามิเตอร์ที่ประกาศในโพรซีเดอร์ที่เก็บไว้ เมธอด execute รับพารามิเตอร์ IN และส่งคืน Map ที่มีพารามิเตอร์ out ที่คีย์ด้วยชื่อตามที่ระบุในโพรซีเดอร์ที่เก็บไว้

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

ID : 1, Name : Zara, Age : 11

ตัวอย่างต่อไปนี้จะสาธิตวิธีการเรียกใช้ฟังก์ชันที่เก็บไว้โดยใช้ Spring JDBC เราจะอ่านบันทึกที่มีอยู่ในตารางนักเรียนโดยเรียกใช้ฟังก์ชันที่จัดเก็บไว้ เราจะส่งรหัสและรับชื่อนักเรียน

ไวยากรณ์

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

ที่ไหน

  • in - วัตถุ SqlParameterSource เพื่อส่งผ่านพารามิเตอร์ไปยังฟังก์ชันที่เก็บไว้

  • jdbcCall - วัตถุ SimpleJdbcCall เพื่อแสดงฟังก์ชันที่เก็บไว้

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุที่เรียกว่าฟังก์ชันที่เก็บไว้จากฐานข้อมูล

  • student - วัตถุนักเรียน

SimpleJdbcCallคลาสสามารถใช้เพื่อเรียกใช้ฟังก์ชันที่จัดเก็บด้วยพารามิเตอร์ IN และค่าส่งกลับ คุณสามารถใช้แนวทางนี้ขณะทำงานกับ RDBMS อย่างใดอย่างหนึ่งเช่น Apache Derby, DB2, MySQL, Microsoft SQL Server, Oracle และ Sybase

เพื่อทำความเข้าใจแนวทางนี้ให้พิจารณาขั้นตอนการจัดเก็บ MySQL ต่อไปนี้ซึ่งใช้รหัสนักเรียนและส่งคืนชื่อนักเรียนที่เกี่ยวข้อง ดังนั้นให้เราสร้างฟังก์ชันที่เก็บไว้ในฐานข้อมูล TEST ของคุณโดยใช้พรอมต์คำสั่ง 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 ;

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเรียกใช้ฟังก์ชันที่เก็บไว้ ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);  
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

โค้ดที่คุณเขียนสำหรับการเรียกใช้งานเกี่ยวข้องกับการสร้าง SqlParameterSource ที่มีพารามิเตอร์ IN สิ่งสำคัญคือต้องจับคู่ชื่อที่ระบุไว้สำหรับค่าอินพุตกับชื่อพารามิเตอร์ที่ประกาศในฟังก์ชันที่จัดเก็บ เมธอด executeFunction รับพารามิเตอร์ IN และส่งคืนสตริงตามที่ระบุในฟังก์ชันที่จัดเก็บ

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

ID : 1, Name : Zara

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอัพเดต BLOB โดยใช้ Update Query ด้วยความช่วยเหลือของ Spring JDBC เราจะอัปเดตบันทึกที่มีอยู่ในตารางนักเรียน

โต๊ะนักเรียน

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

ไวยากรณ์

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

ที่ไหน

  • in - วัตถุ SqlParameterSource เพื่อส่งผ่านพารามิเตอร์เพื่ออัปเดตแบบสอบถาม

  • SqlLobValue - วัตถุเพื่อแสดงพารามิเตอร์ค่า SQL BLOB / CLOB

  • jdbcTemplateObject - ออบเจ็กต์ NamedParameterJdbcTemplate เพื่ออัปเดตวัตถุนักเรียนในฐานข้อมูล

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอัปเดตแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

Updated Record with ID = 1

คุณสามารถตรวจสอบไบต์ [] ที่จัดเก็บโดยการสืบค้นฐานข้อมูล

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอัพเดต CLOB โดยใช้ Update Query ด้วยความช่วยเหลือของ Spring JDBC เราจะอัปเดตบันทึกที่มีอยู่ในตารางนักเรียน

โต๊ะนักเรียน

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

ไวยากรณ์

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

ที่ไหน

  • in - วัตถุ SqlParameterSource เพื่อส่งผ่านพารามิเตอร์เพื่ออัปเดตแบบสอบถาม

  • SqlLobValue - วัตถุเพื่อแสดงพารามิเตอร์ค่า SQL BLOB / CLOB

  • jdbcTemplateObject - ออบเจ็กต์ NamedParameterJdbcTemplate เพื่ออัปเดตวัตถุนักเรียนในฐานข้อมูล

เพื่อให้เข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอัปเดตแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

Updated Record with ID = 1

คุณสามารถตรวจสอบคำอธิบายที่จัดเก็บโดยการสอบถามฐานข้อมูล

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอัพเดตแบตช์โดยใช้ Spring JDBC เราจะอัปเดตระเบียนที่มีในตารางนักเรียนในการดำเนินการชุดเดียว

ไวยากรณ์

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

ที่ไหน

  • SQL - อัปเดตแบบสอบถามเพื่ออัปเดตอายุของนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออัปเดตวัตถุนักเรียนในฐานข้อมูล

  • BatchPreparedStatementSetter- ตัวดำเนินการแบทช์กำหนดค่าใน PerparedStatement ต่อรายการที่ระบุโดยรายการของนักเรียนและดัชนี i getBatchSize () ส่งกลับขนาดของชุดงาน

  • updateCounts - อาร์เรย์ภายในประกอบด้วยจำนวนแถวที่อัปเดตต่อการค้นหาการอัปเดต

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอัปเดตการดำเนินการแบตช์ ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอัพเดตแบตช์โดยใช้อ็อบเจ็กต์ใน Spring JDBC เราจะอัปเดตระเบียนที่มีในตารางนักเรียนในการดำเนินการชุดเดียว

ไวยากรณ์

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

ที่ไหน

  • SQL - อัปเดตแบบสอบถามเพื่ออัปเดตอายุของนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออัปเดตวัตถุนักเรียนในฐานข้อมูล

  • batch - วัตถุ SqlParameterSource เพื่อแสดงชุดของวัตถุ

  • updateCounts - อาร์เรย์ภายในประกอบด้วยจำนวนแถวที่อัปเดตต่อการค้นหาการอัปเดต

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอัปเดตการดำเนินการแบตช์ ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอัปเดตหลายชุดในการโทรครั้งเดียวโดยใช้ Spring JDBC เราจะอัปเดตระเบียนที่มีอยู่ในตารางนักเรียนในการดำเนินการหลายชุดโดยที่ขนาดชุดงานคือ 1

ไวยากรณ์

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

ที่ไหน

  • SQL - อัปเดตแบบสอบถามเพื่ออัปเดตอายุของนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออัปเดตวัตถุนักเรียนในฐานข้อมูล

  • ParameterizedPreparedStatementSetter - ตัวดำเนินการแบทช์กำหนดค่าใน PerparedStatement ต่อรายการที่ระบุโดยรายการของวัตถุนักเรียน

  • updateCounts - Int [] [] อาร์เรย์ที่มีจำนวนแถวที่อัปเดตต่อแบบสอบถามการอัปเดตต่อชุด

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอัปเดตการดำเนินการหลายชุด ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

import java.sql.SQLException;

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

org.springframework.jdbc.core.JdbcTemplateคลาสเป็นคลาสกลางในแพ็คเกจหลักของ JDBC ช่วยลดความยุ่งยากในการใช้ JDBC และช่วยหลีกเลี่ยงข้อผิดพลาดทั่วไป เรียกใช้เวิร์กโฟลว์ JDBC หลักโดยปล่อยให้โค้ดแอปพลิเคชันจัดเตรียม SQL และแยกผลลัพธ์ คลาสนี้รันเคียวรี SQL หรืออัพเดตเริ่มต้นการทำซ้ำบน ResultSets และตรวจจับข้อยกเว้น JDBC และแปลเป็นลำดับชั้นข้อยกเว้นทั่วไปที่ให้ข้อมูลเพิ่มเติมที่กำหนดไว้ในorg.springframework.dao แพ็คเกจ

การประกาศคลาส

ต่อไปนี้เป็นการประกาศสำหรับคลาส org.springframework.jdbc.core.JdbcTemplate -

public class JdbcTemplate
   extends JdbcAccessor
      implements JdbcOperations

การใช้งาน

Step 1 - สร้างวัตถุ JdbcTemplate โดยใช้แหล่งข้อมูลที่กำหนดค่าไว้

Step 2 - ใช้วิธีการวัตถุ JdbcTemplate เพื่อดำเนินการฐานข้อมูล

ตัวอย่าง

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอ่านแบบสอบถามโดยใช้คลาส JdbcTemplate เราจะอ่านบันทึกที่มีอยู่ในตารางนักเรียน

ไวยากรณ์

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

ที่ไหน

  • selectQuery - เลือกแบบสอบถามเพื่ออ่านนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออ่านวัตถุนักเรียนจากฐานข้อมูล

  • StudentMapper - StudentMapper เป็นออบเจ็กต์ RowMapper เพื่อแมปแต่ละระเบียนที่ดึงมากับวัตถุของนักเรียน

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเลือกแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

org.springframework.jdbc.core.PreparedStatementSetterอินเตอร์เฟสทำหน้าที่เป็นอินเทอร์เฟซการเรียกกลับทั่วไปที่ใช้โดยคลาส JdbcTemplate อินเทอร์เฟซนี้ตั้งค่าบน PreparedStatement ที่จัดเตรียมโดยคลาส JdbcTemplate สำหรับการอัปเดตแต่ละรายการในชุดงานโดยใช้ SQL เดียวกัน

การใช้งานมีหน้าที่รับผิดชอบในการตั้งค่าพารามิเตอร์ที่จำเป็น จะมีการจัดหา SQL ที่มีตัวยึดตำแหน่งแล้ว การใช้อินเทอร์เฟซนี้ง่ายกว่า PreparedStatementCreator JdbcTemplate จะสร้าง PreparedStatement โดยการเรียกกลับจะทำหน้าที่ในการตั้งค่าพารามิเตอร์เท่านั้น

ประกาศอินเตอร์เฟส

ต่อไปนี้เป็นการประกาศสำหรับอินเทอร์เฟซ org.springframework.jdbc.core.PreparedStatementSetter -

public interface PreparedStatementSetter

การใช้งาน

Step 1 - สร้างวัตถุ JdbcTemplate โดยใช้แหล่งข้อมูลที่กำหนดค่าไว้

Step 2 - ใช้วิธีการวัตถุ JdbcTemplate เพื่อดำเนินการฐานข้อมูลในขณะที่ส่งวัตถุ PreparedStatementSetter เพื่อแทนที่ตัวยึดตำแหน่งในแบบสอบถาม

ตัวอย่าง

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอ่านแบบสอบถามโดยใช้คลาส JdbcTemplate และอินเทอร์เฟซ PreparedStatementSetter เราจะอ่านบันทึกที่มีอยู่ของนักเรียนในตารางนักเรียน

ไวยากรณ์

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

ที่ไหน

  • SQL - เลือกแบบสอบถามเพื่ออ่านนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออ่านวัตถุนักเรียนจากฐานข้อมูล

  • PreparedStatementSetter - วัตถุ PreparedStatementSetter เพื่อตั้งค่าพารามิเตอร์ในแบบสอบถาม

  • StudentMapper - StudentMapper เป็นออบเจ็กต์ RowMapper เพื่อแมปแต่ละระเบียนที่ดึงมากับวัตถุของนักเรียน

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเลือกแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

ID : 1, Age : 17

org.springframework.jdbc.core.ResultSetExtractorอินเทอร์เฟซคืออินเทอร์เฟซการเรียกกลับที่ใช้โดยวิธีการสอบถามของ JdbcTemplate การนำอินเทอร์เฟซนี้ไปใช้งานจริงในการดึงผลลัพธ์จาก ResultSet แต่ไม่จำเป็นต้องกังวลเกี่ยวกับการจัดการข้อยกเว้น

SQLExceptions จะถูกจับและจัดการโดยการเรียก JdbcTemplate อินเทอร์เฟซนี้ส่วนใหญ่ใช้ภายในเฟรมเวิร์ก JDBC เอง โดยปกติแล้ว RowMapper เป็นตัวเลือกที่ง่ายกว่าสำหรับการประมวลผล ResultSet โดยจะแมปวัตถุผลลัพธ์หนึ่งรายการต่อแถวแทนที่จะเป็นวัตถุผลลัพธ์เดียวสำหรับทั้ง ResultSet

ประกาศอินเตอร์เฟส

ต่อไปนี้เป็นการประกาศสำหรับอินเทอร์เฟซ org.springframework.jdbc.core.ResultSetExtractor -

public interface ResultSetExtractor

การใช้งาน

Step 1 - สร้างวัตถุ JdbcTemplate โดยใช้แหล่งข้อมูลที่กำหนดค่าไว้

Step 2 - ใช้เมธอดอ็อบเจ็กต์ JdbcTemplate เพื่อดำเนินการฐานข้อมูลในขณะที่แยกวิเคราะห์ผลลัพธ์โดยใช้ ResultSetExtractor

ตัวอย่าง

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอ่านแบบสอบถามโดยใช้คลาส JdbcTemplate และอินเทอร์เฟซ ResultSetExtractor เราจะอ่านบันทึกที่มีอยู่ของนักเรียนในตารางนักเรียน

ไวยากรณ์

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

ที่ไหน

  • SQL - เลือกแบบสอบถามเพื่ออ่านนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออ่านวัตถุนักเรียนจากฐานข้อมูล

  • ResultSetExtractor - วัตถุ ResultSetExtractor เพื่อแยกวิเคราะห์วัตถุ resultset

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเลือกแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

org.springframework.jdbc.core.RowMapper<T>อินเทอร์เฟซถูกใช้โดย JdbcTemplate สำหรับการแม็พแถวของ ResultSet แบบต่อแถว การนำอินเทอร์เฟซนี้ไปใช้งานจริงในการแมปแต่ละแถวกับออบเจ็กต์ผลลัพธ์ SQLE ข้อยกเว้นหากมีการโยนจะถูกจับและจัดการโดย JdbcTemplate ที่เรียก

ประกาศอินเตอร์เฟส

ต่อไปนี้เป็นคำประกาศสำหรับ org.springframework.jdbc.core.RowMapper<T> อินเตอร์เฟซ -

public interface RowMapper<T>

การใช้งาน

Step 1 - สร้างวัตถุ JdbcTemplate โดยใช้แหล่งข้อมูลที่กำหนดค่าไว้

Step 2 - สร้างวัตถุ StudentMapper โดยใช้อินเทอร์เฟซ RowMapper

Step 3 - ใช้วิธีการวัตถุ JdbcTemplate เพื่อดำเนินการฐานข้อมูลในขณะที่ใช้วัตถุ StudentMapper

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอ่านแบบสอบถามโดยใช้ spring jdbc เราจะแมปบันทึกการอ่านจากตารางนักเรียนไปยังวัตถุนักเรียนโดยใช้วัตถุ StudentMapper

ไวยากรณ์

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

ที่ไหน

  • SQL - อ่านแบบสอบถามเพื่ออ่านบันทึกของนักเรียนทั้งหมด

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออ่านบันทึกของนักเรียนจากฐานข้อมูล

  • StudentMapper - StudentMapper เป็นวัตถุในการจับคู่บันทึกของนักเรียนกับวัตถุของนักเรียน

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอ่านแบบสอบถามและผลลัพธ์แผนที่โดยใช้วัตถุ StudentMapper ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

org.springframework.jdbc.core.NamedParameterJdbcTemplateคลาสเป็นคลาสเทมเพลตที่มีชุดการดำเนินการ JDBC พื้นฐานซึ่งอนุญาตให้ใช้พารามิเตอร์ที่ตั้งชื่อแทนที่จะเป็น '?' แบบดั้งเดิม ตัวยึดตำแหน่ง คลาสนี้มอบสิทธิ์ให้กับ JdbcTemplate แบบรวมเมื่อการแทนที่จากพารามิเตอร์ที่ตั้งชื่อเป็นสไตล์ JDBC '?' ตัวยึดจะทำในเวลาดำเนินการ นอกจากนี้ยังช่วยให้สามารถขยายรายการของค่าไปยังจำนวนตัวยึดตำแหน่งที่เหมาะสม

ประกาศอินเตอร์เฟส

ต่อไปนี้เป็นคำประกาศสำหรับ org.springframework.jdbc.core.NamedParameterJdbcTemplate ชั้นเรียน -

public class NamedParameterJdbcTemplate
   extends Object
      implements NamedParameterJdbcOperations

ไวยากรณ์

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

ที่ไหน

  • in - วัตถุ SqlParameterSource เพื่อส่งผ่านพารามิเตอร์เพื่ออัปเดตแบบสอบถาม

  • SqlLobValue - วัตถุเพื่อแสดงพารามิเตอร์ค่า SQL BLOB / CLOB

  • jdbcTemplateObject - ออบเจ็กต์ NamedParameterJdbcTemplate เพื่ออัปเดตวัตถุนักเรียนในฐานข้อมูล

เพื่อทำความเข้าใจแนวคิดที่กล่าวถึงข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอัปเดตแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

Updated Record with ID = 1

คุณสามารถตรวจสอบคำอธิบายที่จัดเก็บโดยการสอบถามฐานข้อมูล

org.springframework.jdbc.core.SimpleJdbcInsertคลาสเป็นอ็อบเจ็กต์แบบมัลติเธรดที่นำกลับมาใช้ใหม่ได้ซึ่งให้ความสามารถในการแทรกตารางได้อย่างง่ายดาย ให้การประมวลผลข้อมูลเมตาเพื่อลดความซับซ้อนของรหัสที่จำเป็นในการสร้างคำสั่งแทรกพื้นฐาน เม็ดมีดจริงจะถูกจัดการโดยใช้ JdbcTemplate ของ Spring

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ org.springframework.jdbc.core.SimpleJdbcInsert ชั้นเรียน -

public class SimpleJdbcInsert
   extends AbstractJdbcInsert
      implements SimpleJdbcInsertOperations

ตัวอย่างต่อไปนี้จะสาธิตวิธีการแทรกแบบสอบถามโดยใช้ Spring JDBC เราจะแทรกหนึ่งระเบียนในตารางนักเรียนโดยใช้วัตถุ SimpleJdbcInsert

ไวยากรณ์

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

ที่ไหน

  • jdbcInsert - SimpleJdbcInsert วัตถุเพื่อแทรกบันทึกในตารางนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออ่านวัตถุนักเรียนในฐานข้อมูล

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะแทรกแบบสอบถาม ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

import javax.sql.DataSource;

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

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

org.springframework.jdbc.core.SimpleJdbcCallคลาสคืออ็อบเจ็กต์แบบมัลติเธรดที่ใช้ซ้ำได้ซึ่งแสดงถึงการเรียกไปยังโพรซีเดอร์ที่เก็บไว้หรือฟังก์ชันที่จัดเก็บ มีการประมวลผลข้อมูลเมตาเพื่อลดความซับซ้อนของรหัสที่จำเป็นในการเข้าถึงขั้นตอน / ฟังก์ชันพื้นฐานที่จัดเก็บไว้

สิ่งที่คุณต้องระบุคือชื่อของขั้นตอน / ฟังก์ชันและแผนที่ที่มีพารามิเตอร์เมื่อคุณเรียกใช้งาน ชื่อของพารามิเตอร์ที่ให้มาจะถูกจับคู่กับพารามิเตอร์เข้าและออกที่ประกาศเมื่อสร้างโพรซีเดอร์ที่เก็บไว้

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ org.springframework.jdbc.core.SimpleJdbcCall ชั้นเรียน -

public class SimpleJdbcCall
   extends AbstractJdbcCall
      implements SimpleJdbcCallOperations

ตัวอย่างต่อไปนี้จะสาธิตวิธีการเรียกใช้กระบวนงานที่เก็บไว้โดยใช้ Spring SimpleJdbcCall เราจะอ่านหนึ่งในบันทึกที่มีอยู่ในตารางนักเรียนโดยเรียกขั้นตอนที่จัดเก็บไว้ เราจะส่งรหัสและรับบันทึกของนักเรียน

ไวยากรณ์

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

ที่ไหน

  • jdbcCall - วัตถุ SimpleJdbcCall เพื่อแสดงกระบวนงานที่เก็บไว้

  • in - วัตถุ SqlParameterSource เพื่อส่งผ่านพารามิเตอร์ไปยังกระบวนงานที่เก็บไว้

  • student - วัตถุนักเรียน

  • out - แมปวัตถุเพื่อแสดงผลลัพธ์ของผลลัพธ์การเรียกกระบวนงานที่เก็บไว้

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเรียกขั้นตอนการจัดเก็บ ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);  
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

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

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

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

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

โค้ดที่คุณเขียนสำหรับการเรียกใช้งานเกี่ยวข้องกับการสร้าง SqlParameterSource ที่มีพารามิเตอร์ IN สิ่งสำคัญคือต้องจับคู่ชื่อที่ระบุสำหรับค่าอินพุตกับชื่อพารามิเตอร์ที่ประกาศในโพรซีเดอร์ที่เก็บไว้ เมธอด execute รับพารามิเตอร์ IN และส่งคืน Map ที่มีพารามิเตอร์ out ที่คีย์ด้วยชื่อตามที่ระบุในโพรซีเดอร์ที่เก็บไว้

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

ID : 1, Name : Zara, Age : 11

org.springframework.jdbc.object.SqlQuery คลาสจัดเตรียมอ็อบเจ็กต์การดำเนินการที่ใช้ซ้ำได้ซึ่งแสดงถึงคิวรี SQL

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ org.springframework.jdbc.object.SqlQuery ชั้นเรียน -

public abstract class SqlQuery<T>
   extends SqlOperation

การใช้งาน

  • Step 1 - สร้างวัตถุ JdbcTemplate โดยใช้แหล่งข้อมูลที่กำหนดค่าไว้

  • Step 2 - สร้างวัตถุ StudentMapper โดยใช้อินเทอร์เฟซ RowMapper

  • Step 3 - ใช้วิธีการวัตถุ JdbcTemplate เพื่อดำเนินการฐานข้อมูลในขณะที่ใช้วัตถุ SqlQuery

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอ่านแบบสอบถามโดยใช้ SqlQuery Object เราจะแมปบันทึกการอ่านจากตารางนักเรียนไปยังวัตถุนักเรียนโดยใช้วัตถุ StudentMapper

ไวยากรณ์

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

ที่ไหน

  • SQL - อ่านแบบสอบถามเพื่ออ่านบันทึกของนักเรียนทั้งหมด

  • jdbcTemplateObject - StudentJDBCTemplate object เพื่ออ่านบันทึกของนักเรียนจากฐานข้อมูล

  • StudentMapper - StudentMapper เป็นวัตถุในการแมปบันทึกของนักเรียนกับวัตถุของนักเรียน

  • SqlQuery - วัตถุ SqlQuery เพื่อค้นหาบันทึกของนักเรียนและจับคู่กับวัตถุของนักเรียน

เพื่อให้เข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอ่านแบบสอบถามและจับคู่ผลลัพธ์โดยใช้วัตถุ StudentMapper ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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();   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

import javax.sql.DataSource;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

org.springframework.jdbc.object.SqlUpdate คลาสจัดเตรียมอ็อบเจ็กต์การดำเนินการที่ใช้ซ้ำได้ซึ่งเป็นตัวแทนของการอัพเดต SQL

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ org.springframework.jdbc.object.SqlUpdate ชั้นเรียน -

public abstract class SqlUpdate<T>
   extends SqlOperation

การใช้งาน

Step 1 - สร้างวัตถุ JdbcTemplate โดยใช้แหล่งข้อมูลที่กำหนดค่าไว้

Step 2 - สร้างวัตถุ StudentMapper โดยใช้อินเทอร์เฟซ RowMapper

Step 3 - ใช้วิธีการวัตถุ JdbcTemplate เพื่อดำเนินการฐานข้อมูลในขณะที่ใช้วัตถุ SqlUpdate

ตัวอย่างต่อไปนี้จะสาธิตวิธีการอัปเดตแบบสอบถามโดยใช้ SqlUpdate Object เราจะแมปบันทึกการอัปเดตจากตารางนักเรียนไปยังวัตถุนักเรียนโดยใช้วัตถุ StudentMapper

ไวยากรณ์

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

ที่ไหน

  • SQL - อัปเดตแบบสอบถามเพื่ออัปเดตบันทึกของนักเรียน

  • jdbcTemplateObject - StudentJDBCTemplate วัตถุเพื่ออ่านนักเรียนบันทึกจากฐานข้อมูล

  • StudentMapper - StudentMapper เป็นวัตถุในการจับคู่บันทึกของนักเรียนกับวัตถุของนักเรียน

  • sqlUpdate - วัตถุ SqlUpdate เพื่ออัปเดตบันทึกของนักเรียน

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะอ่านแบบสอบถามและผลลัพธ์แผนที่โดยใช้วัตถุ StudentMapper ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);   
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

import java.sql.Types;

import javax.sql.DataSource;

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

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

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

org.springframework.jdbc.core.StoredProcedureคลาสเป็น superclass สำหรับอ็อบเจ็กต์ abstractions ของโพรซีเดอร์ที่เก็บ RDBMS คลาสนี้เป็นนามธรรมและตั้งใจว่าคลาสย่อยจะจัดเตรียมเมธอดที่พิมพ์สำหรับการเรียกใช้ที่มอบหมายให้เมธอด execute (java.lang.Object ... คุณสมบัติ SQL ที่สืบทอดมาคือชื่อของกระบวนงานที่เก็บไว้ใน RDBMS

การประกาศคลาส

ต่อไปนี้เป็นคำประกาศสำหรับ org.springframework.jdbc.core.StoredProcedure ชั้นเรียน -

public abstract class StoredProcedure
   extends SqlCall

ตัวอย่างต่อไปนี้จะสาธิตวิธีการเรียกใช้กระบวนงานที่เก็บไว้โดยใช้ Spring StoredProcedure เราจะอ่านหนึ่งในบันทึกที่มีอยู่ในตารางนักเรียนโดยเรียกขั้นตอนที่จัดเก็บไว้ เราจะส่งรหัสและรับบันทึกของนักเรียน

ไวยากรณ์

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

ที่ไหน

  • StoredProcedure - วัตถุ StoredProcedure เพื่อแสดงกระบวนงานที่เก็บไว้

  • StudentProcedure - ออบเจ็กต์ StudentProcedure ขยาย StoredProcedure เพื่อประกาศอินพุตตัวแปรเอาต์พุตและผลลัพธ์แผนที่ไปยังอ็อบเจ็กต์ Student

  • student - วัตถุนักเรียน

เพื่อทำความเข้าใจแนวคิดดังกล่าวข้างต้นที่เกี่ยวข้องกับ Spring JDBC ให้เราเขียนตัวอย่างซึ่งจะเรียกขั้นตอนการจัดเก็บ ในการเขียนตัวอย่างของเราให้เรามี Eclipse IDE ที่ใช้งานได้และใช้ขั้นตอนต่อไปนี้เพื่อสร้างแอ็พพลิเคชัน Spring

ขั้นตอน คำอธิบาย
1 อัพเดทโครงการนักศึกษาสร้างขึ้นภายใต้บทที่ฤดูใบไม้ผลิ JDBC - การใช้งานครั้งแรก
2 อัปเดตการกำหนดค่า bean และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้เป็นเนื้อหาของไฟล์อินเตอร์เฟส Data Access Object 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);  
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ Student.java ไฟล์.

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

ต่อไปนี้เป็นเนื้อหาของไฟล์ StudentMapper.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์คลาสการนำไปใช้งาน StudentJDBCTemplate.java สำหรับอินเทอร์เฟซ DAO ที่กำหนด StudentDAO

package com.tutorialspoint;

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

import javax.sql.DataSource;

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

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

โค้ดที่คุณเขียนสำหรับการเรียกใช้งานเกี่ยวข้องกับการสร้าง SqlParameterSource ที่มีพารามิเตอร์ IN สิ่งสำคัญคือต้องจับคู่ชื่อที่ระบุสำหรับค่าอินพุตกับชื่อพารามิเตอร์ที่ประกาศในโพรซีเดอร์ที่เก็บไว้ เมธอด execute รับพารามิเตอร์ IN และส่งคืน Map ที่มีพารามิเตอร์ out ที่คีย์ด้วยชื่อตามที่ระบุในโพรซีเดอร์ที่เก็บไว้

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์.

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

ต่อไปนี้เป็นไฟล์กำหนดค่า 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>

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้

ID : 1, Name : Zara, Age : 10