Spring JDBC NamedParameterJdbcTemplate类

org.springframework.jdbc.core.NamedParameterJdbcTemplate类是一个具有基本JDBC操作的模板类,允许使用命名参数而不是传统的’?‘占位符。 这个类代表一个包装的JdbcTemplate,在执行时完成从命名参数占位符替换为JDBC样式’?‘ 占位符。它还允许将值列表扩展到适当数量的占位符。

使用到的 Student 表的结构如下 -

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

类的声明

以下是org.springframework.jdbc.core.NamedParameterJdbcTemplate接口的声明 -

public class NamedParameterJdbcTemplate implements NamedParameterJdbcOperations
语法
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 jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
        jdbcTemplate.update(sql,in);
        System.out.println("Updated Record with ID = " + id);
    }

在上代码中,

  • in - SqlParameterSource对象将参数传递给更新查询。
  • SqlLobValue - 表示SQL BLOB/CLOB值参数的对象。
  • jdbcTemplateObject - NamedParameterJdbcTemplate对象来更新数据库中的Student对象。

实例项目

要了解上述与Spring JDBC相关的概念,下面我们编写一个使用NamedParameterJdbcTemplate来更新Student对象。按照以下步骤创建一个Spring应用程序,这里创建一个名称为:NamedParameterJdbcTemplate 的项目。


以下是Maven配置文件:pom.xml的代码内容:

<?xml version="1.0" encoding="UTF-8"?>
<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.ray</groupId>
    <artifactId>NamedParameterJdbcTemplate</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</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>

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

/**
 * @author Ray
 * @create 2018-03-10 8:48
 **/
public interface StudentDAO {
    public void setDataSource(DataSource dataSource);
    public List<Student> listStudents();
    public void updateDescription(Integer id,String description);
    public void create(String name,Integer age);
}

以下是文件:Student.java的代码内容:

/**
 * @author Ray
 * @create 2018-03-10 8:55
 **/
public class Student {
    private Integer age;
    private String name;
    private Integer id;
    private String description;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

以下是文件:StudentMapper.java的代码内容:

/**
 * Created by Ray on 2018/3/10 0010.
 **/
public class StudentMapper implements RowMapper{

    public Object mapRow(ResultSet resultSet, int i) throws SQLException {
        Student student = new Student();
        student.setId(resultSet.getInt("id"));
        student.setName(resultSet.getString("name"));
        student.setAge(resultSet.getInt("age"));
        student.setDescription(resultSet.getString("description"));
        return student;
    }
}

实现类StudentJDBCTemplate.java实现了定义的DAO接口 - StudentDAO.java,以下是文件:StudentJDBCTemplate.java的代码内容:

/**
 * Created by Ray on 2018/3/10 0010.
 **/
public class StudentJDBCTemplate implements StudentDAO {
    private DataSource dataSource;
    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public List<Student> listStudents() {
        String sql = "select * from student";
        List<Student> students = jdbcTemplate.query(sql,new StudentMapper());
        return students;
    }

    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 jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
        jdbcTemplate.update(sql,in);
        System.out.println("Updated Record with ID = " + id);
    }

    public void create(String name, Integer age) {
        String insertQuery = "insert into student(name,age,description) values(?,?,NULL)";
        jdbcTemplate.update(insertQuery,name,age);
        System.out.println("Created Record Name = " + name + " Age = " + age);
        return;
    }
}

以下是文件:MainApp.java的代码内容:

/**
 * Created by Ray on 2018/3/10 0010.
 **/
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);

//        更新描述
        studentJDBCTemplate.updateDescription(1,"test");
        studentJDBCTemplate.updateDescription(2,"2018-3-10 09:26:24");

        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.print(",Age : " + record.getAge());
            System.out.println(",Description : " + record.getDescription());
        }
    }
}

以下是文件:application-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.xsd">

    <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="root"/>
    </bean>

    <bean id="studentJDBCTemplate" class="com.ray.StudentJDBCTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

注意: application-beans.xml 文件的位置是:{workspace}/fistapp/src/main/java 目录,如果放置错了,程序可能会因为找不到此配置文件而出错。

完成创建源代码和bean和数据库连接信息的文件配置后,运行应用程序。这里先简单说明一下运行的步骤,在项目名称(NamedParameterJdbcTemplate)上点击右键,在弹出的菜单中选择:【Run As】-> 【Maven test】

在运行测试成功后,应该会输出类似以下内容(含有 BUILD SUCCESS 的信息) 。
接下来,点击类文件:MainApp.java 选择【Run As】->【Java Application】,如果应用程序一切正常,这将打印以下结果:


"C:\Program Files\Java\jdk1.8.0_161\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=60776:C:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_161\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\rt.jar;C:\Users\2018\IdeaProjects\NamedParameterJdbcTemplate\target\classes;F:\drive\MVN\junit\junit\3.8.1\junit-3.8.1.jar;F:\drive\MVN\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar;F:\drive\MVN\org\springframework\spring-jdbc\4.1.0.RELEASE\spring-jdbc-4.1.0.RELEASE.jar;F:\drive\MVN\org\springframework\spring-beans\4.1.0.RELEASE\spring-beans-4.1.0.RELEASE.jar;F:\drive\MVN\org\springframework\spring-core\4.1.0.RELEASE\spring-core-4.1.0.RELEASE.jar;F:\drive\MVN\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar;F:\drive\MVN\org\springframework\spring-tx\4.1.0.RELEASE\spring-tx-4.1.0.RELEASE.jar;F:\drive\MVN\org\springframework\spring-context\4.1.4.RELEASE\spring-context-4.1.4.RELEASE.jar;F:\drive\MVN\org\springframework\spring-aop\4.1.4.RELEASE\spring-aop-4.1.4.RELEASE.jar;F:\drive\MVN\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;F:\drive\MVN\org\springframework\spring-expression\4.1.4.RELEASE\spring-expression-4.1.4.RELEASE.jar" com.ray.MainApp
三月 10, 2018 9:40:02 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@238e0d81: startup date [Sat Mar 10 09:40:02 CST 2018]; root of context hierarchy
三月 10, 2018 9:40:03 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [application-beans.xml]
三月 10, 2018 9:40:03 上午 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
信息: Loaded JDBC driver: com.mysql.jdbc.Driver
------Records Creation--------
Created Record Name = Maxsu Age = 21
Created Record Name = Curry Age = 22
Created Record Name = Suzend Age = 23
Updated Record with ID = 1
Updated Record with ID = 2
------Listing Multiple Records--------
ID : 1,Name : Maxsu,Age : 21,Description : test
ID : 2,Name : Curry,Age : 22,Description : 2018-3-10 09:26:24
ID : 3,Name : Suzend,Age : 23,Description : null

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值