Spring入门(10)-Spring JDBC

Spring入门(10)-Spring JDBC

0. 目录

  1. JdbcTemplate介绍
  2. JdbcTemplate常见方法
  3. 代码示例
  4. 参考资料

1. JdbcTemplate介绍

JdbcTemplate是core包的核心类。它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用。它还可以帮助我们避免一些常见的错误,比如忘记关闭数据库连接。JdbcTemplate将完成JDBC核心处理流程,比如SQL语句的创建、执行,而把SQL语句的生成以及查询结果的提取工作留给我们的应用代码。它可以完成SQL查询、更新以及调用存储过程,可以对ResultSet进行遍历并加以提取。它还可以捕获JDBC异常并将其转换成org.springframework.dao包中定义的,通用的、信息更丰富的异常。

2. JdbcTemplate常见方法

JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;
  • batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。

JdbcTemplate类支持的回调类:

  • 预编译语句及存储过程创建回调:用于根据JdbcTemplate提供的连接创建相应的语句;

    PreparedStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的PreparedStatement;
    CallableStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的CallableStatement;

  • 预编译语句设值回调:用于给预编译语句相应参数设值;

    PreparedStatementSetter:通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值;
    BatchPreparedStatementSetter:类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小;

  • 自定义功能回调:提供给用户一个扩展点,用户可以在指定类型的扩展点执行任何数量需要的操作;

    ConnectionCallback:通过回调获取JdbcTemplate提供的Connection,用户可在该Connection执行任何数量的操作;
    StatementCallback:通过回调获取JdbcTemplate提供的Statement,用户可以在该Statement执行任何数量的操作;
    PreparedStatementCallback:通过回调获取JdbcTemplate提供的PreparedStatement,用户可以在该PreparedStatement执行任何数量的操作;
    CallableStatementCallback:通过回调获取JdbcTemplate提供的CallableStatement,用户可以在该CallableStatement执行任何数量的操作;

  • 结果集处理回调:通过回调处理ResultSet或将ResultSet转换为需要的形式;

    RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型。
    RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可。
    ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集;

3. 代码示例

3.1 实体类

package com.chzhao.spring.jdbctemplatetest;

public class Dept {
    private String DeptNo;
    private String DName;

    public String getDeptNo() {
        return DeptNo;
    }

    public void setDeptNo(String deptNo) {
        DeptNo = deptNo;
    }

    public String getDName() {
        return DName;
    }

    public void setDName(String dName) {
        DName = dName;
    }
}

实体类很简单,就不介绍对应数据库了。

3.2 DAO类

package com.chzhao.spring.jdbctemplatetest;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

public class DeptDao {
    private JdbcTemplate jdbcT;

    public void setJdbcT(JdbcTemplate jdbcT) {
        this.jdbcT = jdbcT;
    }

    public List findALL() {
        String sql = "select * from dept";
        return jdbcT.queryForList(sql);
    }

    public List<Dept> QueryALLDepts() {
        String sql = "select * from dept";
        return this.jdbcT.query(sql, new RowMapper<Dept>() {
            public Dept mapRow(ResultSet rs, int rowNum) throws SQLException {
                Dept entity = new Dept();
                entity.setDeptNo(rs.getString("DEPTNO"));
                entity.setDName(rs.getString("DNAME"));
                return entity;
            }
        });
    }

    public List<Dept> findALLDepts() {
        List<Dept> depts = new ArrayList<Dept>();

        String sql = "select * from dept";

        List list = jdbcT.queryForList(sql);
        Iterator iterator = list.iterator();
        Dept dept = null;
        while (iterator.hasNext()) {
            Map map4dept = (Map) iterator.next();
            dept = new Dept();
            dept.setDeptNo((String) map4dept.get("DEPTNO"));
            dept.setDName((String) map4dept.get("DNAME"));
            depts.add(dept);
        }
        return depts;
    }

    public int delete(int bid) {
        String sql = "delete from DeptInfo where bid =?";
        return jdbcT.update(sql, new Object[] { bid });
    }

}

3.3 配置文件

<?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-2.5.xsd">

    <bean id="springDSN"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value> <![CDATA[jdbc:mysql://localhost:3306/tz?useUnicode=true&characterEncoding=utf8]]></value>            
        </property>
        <property name="username">
            <value>tz</value>
        </property>
        <property name="password">
            <value>tz</value>
        </property>
    </bean>

    <bean id="jdbcTemplate"
        class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
        lazy-init="false" autowire="default" dependency-check="default">
        <property name="dataSource">
            <ref bean="springDSN" />
        </property>
    </bean>
    
    <bean id="deptDao" class="com.chzhao.spring.jdbctemplatetest.DeptDao">
        <property name="jdbcT">
            <ref bean="jdbcTemplate" />
        </property>
    </bean>
    
</beans>

3.4 MAIN入口

package com.chzhao.spring.jdbctemplatetest;

import java.util.Iterator;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JdbcMain {
    private static ApplicationContext ctx = new ClassPathXmlApplicationContext(
            "jdbc.xml");

    public static Object getBean(String beanName) {
        return ctx.getBean(beanName);
    }

    public static void main(String[] args) {
        DeptDao dao = (DeptDao) getBean("deptDao");
        List<Dept> depts = dao.findALLDepts();
        for (Dept dept : depts) {
            System.out.println(dept.getDeptNo() + "," + dept.getDName() + ",");
        }
        System.out.println("---------------------------------");

        List list = dao.findALL();
        for (Iterator it = list.iterator(); it.hasNext();) {
            System.out.println(it.next());
        }
        System.out.println("---------------------------------");
        List<Dept> depts2 = dao.QueryALLDepts();
        for (Dept dept : depts2) {
            System.out.println(dept.getDeptNo() + "," + dept.getDName() + ",");
        }
    }
}

3.5 MAVEN配置

<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.chzhao</groupId>
    <artifactId>springtest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springtest</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.30</version>
        </dependency>
    </dependencies>
</project>

4. 参考资料

Spring In Action 第三版
Spring JdbcTemplate方法详解
Spring JdbcTemplate例子

转载于:https://www.cnblogs.com/wardensky/p/4217268.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值