新彩天欢迎您!
幻海优品

Spring JDBC - 多批次操作

以下示例将演示如何使用Spring JDBC在单个调用中进行多个批处理更新.我们将在批量大小为1的多批处理操作中更新Student表中的可用记录.

语法

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应用程序.

Step描述
1更新在章节下创建的项目学生 Spring JDBC  -  First Application .
2更新bean配置并运行应用程序,如下所述.

以下是数据访问对象接口文件的内容 StudentDAO.java .

package com.it1352; 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.it1352; 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.it1352; 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;   }}


以下是定义的DAO接口StudentDAO的实现类文件 StudentJDBCTemplate.java .

package com.it1352; 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.it1352; 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.IT屋.StudentJDBCTemplate">      <property name = "dataSource" ref = "dataSource" />       </bean>      </beans>


完成源和bean配置文件的创建后,让我们运行应用程序.如果你的申请一切正常,它将打印以下信息.

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

免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除