鍍金池/ 教程/ Java/ Spring JDBC SqlUpdate類示例
Spring JDBC調(diào)用存儲函數(shù)
Spring JDBC NamedParameterJdbcTemplate類示例
Spring JDBC SimpleJdbcCall類示例
Spring JDBC PreparedStatementSetter接口示例
Spring JDBC環(huán)境設(shè)置
Spring JDBC多批次操作
Spring JDBC SimpleJdbcInsert類示例
Spring JDBC RowMapper接口示例
Spring JDBC對象批量操作
Spring JDBC ResultSetExtractor接口示例
Spring JDBC配置數(shù)據(jù)源
Spring JDBC處理CLOB類型字段
Spring JDBC刪除數(shù)據(jù)
Spring JDBC更新數(shù)據(jù)
Spring JDBC SqlUpdate類示例
Spring JDBC SqlQuery類示例
Spring JDBC插入數(shù)據(jù)
Spring JDBC StoredProcedure類示例
Spring JDBC JdbcTemplate類示例
Spring JDBC入門程序
Spring JDBC調(diào)用存儲過程
Spring JDBC查詢數(shù)據(jù)
Spring JDBC批量操作
Spring JDBC處理BLOB類型字段
Spring JDBC教程

Spring JDBC SqlUpdate類示例

org.springframework.jdbc.object.SqlUpdate類提供了表示SQL更新的可重用操作對象。

使用到的 Student 表的結(jié)構(gòu)如下 -

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

類的聲明

以下是org.springframework.jdbc.object.SqlUpdate接口的聲明 -

public abstract class SqlUpdate<T>
   extends SqlOperation

用法

  • 步驟1 - 使用配置的數(shù)據(jù)源創(chuàng)建一個JdbcTemplate對象。
  • 步驟2 - 創(chuàng)建一個實(shí)現(xiàn)RowMapper接口的StudentMapper對象。
  • 步驟3 - 使用JdbcTemplate對象方法在使用SqlUpdate對象時進(jìn)行數(shù)據(jù)庫操作。

以下示例將演示如何使用SqlUpdate對象進(jìn)行數(shù)據(jù)更新操作。首先使用StudentMapper對象將讀取記錄從student表映射到Student對象。

語法

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 - 用于讀取查詢所有學(xué)生記錄語句。
  • jdbcTemplateObject - StudentJDBCTemplate對象用于從數(shù)據(jù)庫中讀取學(xué)生記錄。
  • StudentMapper - StudentMapper對象將student表中記錄映射到Student對象。
  • sqlUpdate - SqlUpdate對象用于更新學(xué)生記錄。

實(shí)例項(xiàng)目

要了解上述與Spring JDBC相關(guān)的概念,下面我們編寫一個使用StudentMapper對象進(jìn)行讀取查詢和映射結(jié)果。打開Eclipse IDE,并按照以下步驟創(chuàng)建一個Spring應(yīng)用程序,這里創(chuàng)建一個名稱為:SqlUpdate 的項(xiàng)目。

步驟說明

  1. 參考第一個Spring JDBC項(xiàng)目來創(chuàng)建一個Maven項(xiàng)目 - http://www.yiibai.com/springjdbc/first_application.html
  2. 更新bean配置并運(yùn)行應(yīng)用程序。

完整的項(xiàng)目結(jié)構(gòu)如下所示 -

以下是Maven配置文件:pom.xml的代碼內(nèi)容:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yiibai</groupId>
    <artifactId>SqlUpdate</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>SqlUpdate</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>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </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>

以下是數(shù)據(jù)訪問對象接口文件:StudentDAO.java的內(nèi)容:

package com.yiibai;

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

    /**
     * This is the method to be used to update a record into the Student table.
     */
    public void update(Integer id, Integer age);

}

以下是文件:Student.java的代碼內(nèi)容:

package com.yiibai;

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的代碼內(nèi)容:

package com.yiibai;

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

實(shí)現(xiàn)類StudentJDBCTemplate.java實(shí)現(xiàn)了定義的DAO接口 - StudentDAO.java,以下是文件:StudentJDBCTemplate.java的代碼內(nèi)容:

package com.yiibai;

import java.sql.Types;
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.RowMapper;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.object.SqlQuery;
import org.springframework.jdbc.object.SqlUpdate;

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

    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的代碼內(nèi)容:

package com.yiibai;

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

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

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

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

        System.out.println("------Records Creation--------");
        studentJDBCTemplate.create("Maxsu", 21);
        studentJDBCTemplate.create("Curry", 22);
        studentJDBCTemplate.create("Suzend", 23);

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

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

以下是文件:application-beans.xml的代碼內(nèi)容:

<?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?characterEncoding=utf8&useSSL=true" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
    </bean>

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

</beans>

注意: application-beans.xml 文件的位置是:{workspace}/fistapp/src/main/java 目錄,如果放置錯了,程序可能會因?yàn)檎也坏酱伺渲梦募鲥e。

完成創(chuàng)建源代碼和bean和數(shù)據(jù)庫連接信息的文件配置后,運(yùn)行應(yīng)用程序。這里先簡單說明一下運(yùn)行的步驟,在項(xiàng)目名稱(SqlUpdate)上點(diǎn)擊右鍵,在彈出的菜單中選擇:【Run As】-> 【Maven test】

在運(yùn)行測試成功后,應(yīng)該會輸出類似以下內(nèi)容(含有 BUILD SUCCESS 的信息) 。
接下來,點(diǎn)擊類文件:MainApp.java 選擇【Run As】->【Java Application】,如果應(yīng)用程序一切正常,這將打印以下結(jié)果:

------Records Creation--------
Created Record Name = Maxsu Age = 21
Created Record Name = Curry Age = 22
Created Record Name = Suzend Age = 23
----Updating Record with ID = 1 -----
Updated Record with ID = 1
----Listing Record with ID = 1 -----
ID : 1, Name : Maxsu, Age : 10
------Listing Multiple Records--------
ID : 1, Name : Maxsu, Age : 10
ID : 2, Name : Curry, Age : 22
ID : 3, Name : Suzend, Age : 23