zoukankan      html  css  js  c++  java
  • 《Spring 2.0技术手册》 读书笔记七Spring的DAO框架(2)JDBC支持

    在上篇笔记中,说道使用JDBC存取数据库时,流程大体相同,反复使用较为繁琐。因此Spring采用了Template-Callback模式来简化JDBC使用时的流程。

    Spring提供了org.springframework.jdbc.core.JdbcTemplate类,它被设计为线程安全,它提供的一些操作方法封装了JDBC流程。使用JdbcTemplate,首先需要一个DataSource对象作为构造对象:JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource)。然后就可以使用JdbcTemplate提供的update/execute/query等系列方法执行具体存取操作了。省去了自己建立连接、创建statement等。

    DAO实现类中需有注入DataSource的方法,此方法使用dataSource初始化JdbcTemplate。

    Bean定义文件中进行配置:

     

    接着对JdbcTemplate的常用方法进行分类介绍如下:

    1. 执行静态陈述

    public void execute(final String sql):执行DDL statement,包括create table/index,alter table/index,drop table/index。

    2. 更新表格:DML statement-insert,update,delete。使用update系列函数

     

    3. 查询.使用queryForXXX系列

    对查询结果进行封装-ORM(对象关系映射)。除了上面提到的使用RowCallbackHandler进行关系-对象映射,还可以使用org.springframework.jdbc.core.RowMapper接口,实现单行、多行封装。使用例子如下:

     

    4. 存取Lob

    在JDBC中可以使用Clob(character large object-文字文本文件)与Blob(Binary large object-图像等二进制文件),JdbcTemplate也可以进行大对象的便捷存取。储存大对象使用 public <T> T execute(String sql, PreparedStatementCallback<T> action)方法,读取大对象使用 public <T> T query(String sql, Object[] args, ResultSetExtractor<T> rse)。具体过程如下:

     

    在建立org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback(抽象类)对象时,需传递一个接口org.springframework.jdbc.support.lob.LobHandler实例,对于MySQL、SQL Server、Oracle 10g,LobHander实例使用org.springframework.jdbc.support.lob.DefaultLobHandler。对于oracle 9i可以使用OracleLobHandler。在setValues()方法实现中,使用org.springframework.jdbc.support.lob.LobCreator分别设置Blob与Clob的来源串流,索引1/2表示第一与第二个占位字符'?'的位置,并指定读取长度。

    从数据库读取大对象文件时,使用了org.springframework.util.FileCopyUtils的copy方法,将LobHandler取的串流直接转接给文件输出FileWriter/FileOutputStream对象。

    下面贴出,抽象类AbstractLobCreatingPreparedStatementCallback的部分定义、接口LobCreator的方法、抽象类AbstractLobStreamingResultSetExtractor部分定义、抽象类FileCopyUtils的copy方法、接口LobHandler的部分方法。

     

  • 相关阅读:
    51Nod 1267 4个数和为0 二分
    51Nod 1090 3个数和为0 set 二分优化
    51Nod 1001 数组中和等于K的数对 Set
    Codeforces 890C
    Codeforces 890B
    Codeforces 890A
    51nod 1058 N的阶乘的长度 位数公式
    C#调用本机摄像头
    读取、写入excel数据
    数据库笔记--基本应用
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982103.html
Copyright © 2011-2022 走看看