Giao diện PreparedStatementSetter
Các org.springframework.jdbc.core.PreparedStatementSettergiao diện hoạt động như một giao diện gọi lại chung được sử dụng bởi lớp JdbcTemplate. Giao diện này đặt các giá trị trên một PreparedStatement được cung cấp bởi lớp JdbcTemplate, cho mỗi bản cập nhật trong một đợt sử dụng cùng một SQL.
Triển khai có trách nhiệm thiết lập bất kỳ thông số cần thiết nào. SQL với trình giữ chỗ sẽ đã được cung cấp. Giao diện này dễ sử dụng hơn PreparedStatementCreator. JdbcTemplate sẽ tạo PreparedStatement, với callback chỉ chịu trách nhiệm thiết lập các giá trị tham số.
Khai báo giao diện
Sau đây là khai báo cho giao diện org.springframework.jdbc.core.PreparedStatementSetter -
public interface PreparedStatementSetter
Sử dụng
Step 1 - Tạo một đối tượng JdbcTemplate bằng cách sử dụng một nguồn dữ liệu được cấu hình.
Step 2 - Sử dụng các phương thức đối tượng JdbcTemplate để thực hiện các hoạt động cơ sở dữ liệu trong khi truyền đối tượng PreparedStatementSetter để thay thế các trình giữ chỗ trong truy vấn.
Thí dụ
Ví dụ sau sẽ trình bày cách đọc một truy vấn bằng cách sử dụng lớp JdbcTemplate và giao diện PreparedStatementSetter. Chúng tôi sẽ đọc hồ sơ có sẵn của một sinh viên trong Bảng Sinh viên.
Cú pháp
final String SQL = "select * from Student where id = ? ";
List <Student> students = jdbcTemplateObject.query(
SQL, new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setInt(1, id);
}
},
new StudentMapper());
Ở đâu,
SQL - Chọn câu truy vấn để học sinh đọc.
jdbcTemplateObject - Đối tượng StudentJDBCTemplate để đọc đối tượng sinh viên từ cơ sở dữ liệu.
PreparedStatementSetter - Đối tượng PreparedStatementSetter để thiết lập các tham số trong truy vấn.
StudentMapper - StudentMapper là một đối tượng RowMapper để ánh xạ từng bản ghi được tìm nạp thành đối tượng học sinh.
Để hiểu các khái niệm được đề cập ở trên liên quan đến Spring JDBC, chúng ta hãy viết một ví dụ sẽ chọn một truy vấn. Để viết ví dụ của chúng tôi, hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và sử dụng các bước sau để tạo một ứng dụng Spring.
Bươc | Sự miêu tả |
---|---|
1 | Cập nhật dự án Sinh viên đã tạo theo chương Spring JDBC - Ứng dụng đầu tiên . |
2 | Cập nhật cấu hình bean và chạy ứng dụng như được giải thích bên dưới. |
Sau đây là nội dung của tệp giao diện Đối tượng Truy cập Dữ liệu StudentDAO.java.
package com.tutorialspoint;
import java.util.List;
import javax.sql.DataSource;
public interface StudentDAO {
/**
* This is the method to be used to initialize
* database resources ie. connection.
*/
public void setDataSource(DataSource ds);
/**
* This is the method to be used to list down
* a record from the Student table corresponding
* to a passed student id.
*/
public Student getStudent(Integer id);
}
Sau đây là nội dung của Student.java tập tin.
package com.tutorialspoint;
public class Student {
private Integer age;
private String name;
private Integer id;
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
}
Sau đây là nội dung của StudentMapper.java tập tin.
package com.tutorialspoint;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class StudentMapper implements RowMapper<Student> {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}
Sau đây là tệp lớp triển khai StudentJDBCTemplate.java cho giao diện DAO được xác định StudentDAO.
package com.tutorialspoint;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class StudentJDBCTemplate implements StudentDAO {
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
}
public Student getStudent(final Integer id) {
final String SQL = "select * from Student where id = ? ";
List <Student> students = jdbcTemplateObject.query(
SQL, new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setInt(1, id);
}
},
new StudentMapper());
return students.get(0);
}
}
Sau đây là nội dung của MainApp.java tập tin.
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
StudentJDBCTemplate studentJDBCTemplate =
(StudentJDBCTemplate)context.getBean("studentJDBCTemplate");
Student student = studentJDBCTemplate.getStudent(1);
System.out.print("ID : " + student.getId() );
System.out.println(", Age : " + student.getAge());
}
}
Sau đây là tệp cấu hình Beans.xml.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
<!-- Initialization for data source -->
<bean id = "dataSource"
class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
<property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
<property name = "username" value = "root"/>
<property name = "password" value = "admin"/>
</bean>
<!-- Definition for studentJDBCTemplate bean -->
<bean id = "studentJDBCTemplate"
class = "com.tutorialspoint.StudentJDBCTemplate">
<property name = "dataSource" ref = "dataSource" />
</bean>
</beans>
Khi bạn đã hoàn tất việc tạo các tệp cấu hình nguồn và bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau.
ID : 1, Age : 17