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的部分方法。

     

  • 相关阅读:
    centos下vsftpd不能显示文件,不能创建文件及文件夹
    PHP过滤常用标签的正则表达式
    px、dp、sp、mm、in、pt这些单位有什么区别?
    Android Studio升级后报 method not found: 'runProguard'的错误
    Android应用签名
    Android技巧小结之新旧版本Notification
    java中 synchronized 的使用,确保异步执行某一段代码。
    android开发笔记(二)导入项目到eclipse和另一个项目
    android开发笔记(一)Android studio 输入法
    这个算asp.net的一个bug吗?
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982103.html
Copyright © 2011-2022 走看看