• spring jdbc


    原文地址:https://www.iteye.com/blog/flycw-2360528

    Spring-JDBC:

     spring提供一致的API来简化JDBC编程-spring jdbc。我们只需要声明SQL、调用合适的Spring JDBC框架API、处理结果集。事务由Spring管理,并将JDBC受查异常转换为Spring一致的非受查异常。

    Spring主要提供JDBC模板方式、关系数据库对象化方式和SimpleJdbc三种方式:
    1.JDBC模板方式(JdbcTemplate):Spring JDBC框架提供以下几种模板类来简化JDBC编程,实现GoF模板设计模式,将可变部分和非可变部分分离,可变部分采用回调接口方式由用户来实现:如JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate。

    2.关系数据库操作对象化方式:Spring JDBC框架提供了将关系数据库操作对象化的表示形式,从而使用户可以采用面向对象编程来完成对数据库的访问;如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类。这些类的实现一旦建立即可重用并且是线程安全的。
    3.SimpleJdbc方式:Spring JDBC框架还提供了SimpleJdbc方式来简化JDBC编程,SimpleJdbcInsert 、 SimpleJdbcCall用来简化数据库表插入、存储过程或函数访问。
    Spring JDBC还提供了一些强大的工具类,如DataSourceUtils来在必要的时候手工获取数据库连接等。

    主要使用NamedParameterJdbcTemplate方式实现。


    7.1.4    Spring的JDBC架构
    四部分:datasource、support、core、object

    datasource:jdbc访问数据源实现类,并封装了datasource的事务支持

    support:jdbc异常转换为自己的异常。

    core:jdbc模板实现类和回调接口。

    objec:提供关系数据库的对象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类,该包是基于core包JDBC模板类实现。

    --------------------------------------------------------------------------------------------------

    Spring jdbc模板类JdbcTemplate:

    JdbcTemplate是core包的核心类,其他模板类都是基于它封装完成的。

    JdbcTemplate类通过模板设计模式帮助我们消除了冗长的代码,只做需要做的事情(即可变部分),并且帮我们做哪些固定部分,如连接的创建及关闭。

    JdbcTemplate类对可变部分采用回调接口方式实现,如ConnectionCallback通过回调接口返回给用户一个连接,从而可以使用该连接做任何事情;StatementCallback通过回调接口返回给用户一个Statement,从而可以使用该Statement做任何事情等等

    JdbcTempalte支持的回调接口:

    1.预编译语句创建和存储过程语句创建接口(根据JdbcTemplate提供的连接创建相应的语句):  PreparedStatementCreator(通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的PreparedStatement),

     CollableStatementCreator(通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的CallableStatement)

    2.预编译赋值接口(给预编译语句相应参数设值):

     PreparedStatementSetter(通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值),

     BetchPreparedStatementSetter(类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小)

    3.用户回调接口(给用户一个扩展点,用户可以在指定类型的扩展点执行任何数量需要的操作):  ConnnectionCallback(回调获取JdbcTemplate提供的Connection,用户可在该Connection执行任何数量的操作),

     CallableStatementCallback(回调获取JdbcTemplate提供的CallableStatement,用户可以在该CallableStatement执行任何数量的操作),

     StatementCallback(回调获取JdbcTemplate提供的Statement,用户可以在该Statement执行任何数量的操作),

     PreparedStatementCallback(回调获取JdbcTemplate提供的PreparedStatement,用户可以在该PreparedStatement执行任何数量的操作)

    4.结果集接口(回调处理ResultSet或将ResultSet转换为需要的形式):

     RowMapper(将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型),

     ResultSetExtrator(结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集),

     RowCallbackHanlder(处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理)

    Spring除了提供JdbcTemplate核心类,还提供了基于JdbcTemplate实现的NamedParameterJdbcTemplate子类用于支持命名参数绑定、 SimpleJdbcTemplate类用于支持Java5+的可变参数及自动装箱拆箱

    JdbcTemplate类:

    1.execute():执行任何语句,ddl

    2.update()/batchUpdate():增删改、批处理

    3.query()/queryForInt()/...:查询

    4.call():存储过程、函数

    --------------------------------------------------------------------------------------------------

    NamedParameterJdbcTemplate:

    NamedParameterJdbcTemplate类是基于JdbcTemplate子实现类,并对它进行了封装从而支持命名参数特性,NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。

     namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource/jdbcTempalte);

     String sql = " select count(1) from a where id =:id ";

     map.put("id", "123");

     namedParameterJdbcTemplate.query(sql, map);

     1)NamedParameterJdbcTempalte初始化:可使用DataSource/JdbcTemplate实例作为构造器参数

     2) :id ":id"就是命名参数

     3) query(sql, map): map类型包含键为id,与命名参数一致,值即为参数值。

    也可以:

     SqlParamaterSource paramSource = new  MapSqlParameterSource(map);

     namedParameterJdbcTemplate.update(updateSql, paramSource);

     5)使用封装后的paramSource参数。

     (NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource)

    1)java.util.Map使用Map键数据来对于命名参数,而Map值数据用于设值;

    2)SqlParameterSource可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。

    BeanPropertySqlParameterSource使用能减少很多工作量,但命名参数必须和JavaBean属性名称相对应

    --------------------------------------------------------------------------------------------------

    SimpleJdbcTemplate:

    基于JdbcTemplate子类,但利用Java5+的可变参数列表和自动装箱和拆箱从而获取。

    SimpleJdbcTemplate主要提供两类方法:query及queryForXXX方法、update及batchUpdate方法。

     SimpleJdbcTemplate simpleTem = new SimpleJdbcTemplate(DataSource/JdbcTemplate/NamedParameterJdbcTemplate); 

     String insSql = "insert into a(id, name) values(?, ?)";

     simpleTem.update(insSql, 1, "caowei");

  • 相关阅读:
    基础DP背包
    哲学思絮01
    Vue使用ElementUI
    Vue-Mock数据
    Vue生命周期
    Vue实战之CURD
    读《间客》有感
    ASP.Net Core网站发布
    Cycling之 标签化
    Vue环境搭建
  • 原文地址:https://www.cnblogs.com/dyh004/p/11550187.html
Copyright © 2020-2023  润新知