Spring JDBC


SpringJDBC

Spring通过抽象JDBC访问并提供一致的API来简化JDBC编程的工作量。我们只需声明sql,调用合适的SpringJDBC框架API,处理结果集即可。事务由Spring管理,并将JDBC受查异常转换为Spring一致的非受查异常,从而简化开发。

Spring的JDBC架构

  1. support包:提供将JDBC异常转换为DAO非检查异常转换类、一些工具类如JdbcUtils等。
  2. datasource包:提供简化访问JDBC 数据源(javax.sql.DataSource实现)工具类,并提供了一些DataSource简单实现类从而能使从这些DataSource获取的连接能自动得到Spring管理事务支持。
  3. core包:提供JDBC模板类(JdbcTemplate)实现及可变部分的回调接口,还提供SimpleJdbcInsert等简单辅助类。
  4. object包:提供关系数据库的对象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类,该包是基于core包JDBC模板类实现。

可选择的SpringJDBC的工作模式

  1. JdbcTemplate方式:
    此方式是最流行与最经典的一种访问操作JDBC的方法。它将可变部分和非可变部分分离,可变部分采用回调接口方式由用户来实现:如JdbcTemplate

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

    • 创建JdbcTemplate

      DriverManagerDataSource dmds = new DriverManagerDataSource("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
      jdbcTemplate = new JdbcTemplate(dmds);
      
    • JdbcTemplate常用方法

      1. execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

      2. update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

      3. query方法及queryForXXX方法:用于执行查询相关语句;

      4. call方法:用于执行存储过程、函数相关语句。

        示例:

        String sql = "insert into dept values(?,?,?)";
        jdbcTemplate.update(sql, 1, "经理部", "钟文涛");
        
  • JdbcTemplate实现查询 –返回Object

    返回Object
    public  T queryForObject(String sql, Class requiredType)
    不带参数,只能返回一个值,requiredType返回结果类型
    public  T queryForObject(String sql, Object[] args, int[] argTypes, Class requiredType)
    带参数,只能返回一个值;argTypes参数类型(java.sql.Types)
    public  T queryForObject(String sql, RowMapper rowMapper, Object... args)
    带参数,返回一个JavaBean对象
    
  • JdbcTemplate实现查询 – 返回Map

    返回Map集合(只能返回一条记录)
    public Map queryForMap(String sql, Object... args)
    
  • JdbcTemplate实现查询 – 返回List

    返回List,元素为JavaBean对象
    public  List query(String sql, RowMapper rowMapper)
    public  List query(String sql, Object[] args, RowMapper rowMapper)
    返回List,
    元素为Map对象(sql语句中可以查询多列)
    public List> queryForList(String sql, Object... args)
    元素为某个类型(sql语句中查询某个列)
    public List> queryForList(String sql,Class elementType, Object... args)
    
  1. NamedParameterJdbcTemplate方式:
    进一步封装了JdbcTemplate,传统的JDBC参数为占位符基础上提供了命名参数。

    NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性。
    NamedParameterJdbcTemplate的使用与JdbcTemplate基本相同。

  2. RDBMS objects(关系数据库操作对象化方式):
    Spring JDBC框架提供了将关系数据库操作对象化的表示形式,从而使用户可以采用面向对象编程来完成对数据库的访问;如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类。这些类的实现一旦建立即可重用并且是线程安全的。

  3. SimpleJdbcInsert和SimpleJdbcCall方式:
    Spring JDBC框架还提供了SimpleJdbc方式来简化JDBC编程,SimpleJdbcInsert 、 SimpleJdbcCall用来简化数据库表插入、存储过程或函数访问。