zoukankan      html  css  js  c++  java
  • Spring JdbcTemplate实例

    Spring JdbcTemplate实例

    JDBCTemplate:是经典的也是最常用的Spring对于JDBC访问的方案。这也是最低级别的封装,其他的工作模式事实了在底层使用了JdbcTemplate作为其底层的实现基础。

    Spring Framework的JDBC抽象框架由四个包构成:core,dataSource,ovject and support。org.springframework.jdbc.core包由JdbcTemplate类以及相关的回调接口(callback interface)和类组成。

    org.springframework.jdbc.datasource包提供了一些工具类来简化对DataSource的访问。同时提供了多种简单的DataSource实现。这些实现可以脱离J2EE容器进行独立测试和运行。这些工具类提供了一些静态方法,允许你通过JDNI来获取数据库连接和关闭连接。同时支持绑定到当前线程的数据库连接,例如使用DataSourceTransactionManager。

    org.springframework.jdbc.object包包含了一些类,用于将RDBMS查询,更新以及存储过程表述为一些可重用的,线程安全的对象,这种方式通过JDO进行模型化,不过这些通过查询返回的对象是与数据库脱离的对象,这种对于JDBC的高层次的封装是基于org.springframework.jdbc.core包对JDBC的低层次封装之上的。

    org.springframework.jdbc.support包定义了SQLException转化类以及一些其他的工具类。

    在JDBC调用过程中所抛出的异常都会被转化为在org.springframework.dao包中定义的异常。也就是说,凡是使用Spring的JDBC封装层的代码无需实现任何JDBC或者RDBMS相关的异常处理,所有的这些被转化的异常都是unchecked异常,因而也给了你一种额外的选择,就是可以抓住这些异常,从而转化成其他类型的异常被允许调用者传播。

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

    使用JdbcTemplate进行编码只需要根据明确定义的一组契约来实现回调接口。PreparedStatementCreator回调接口通过给定的Connection创建一个PreparedStatement,包含SQL和任何相关的参数。CallableStatementCreateor实现同样的处理,只不过它创建的是CallableStatement。RowCallbackHandler接口则从数据集的每一行中提取值。我们可以在DAO实现类中通过传递一个DataSource引用来完成JdbcTemplate的实例化,也可以在Spring的IOC容器中配置一个JdbcTemplate的bean并赋予DAO实现类作为一个实例,需要注意的是DataSource在Spring的IOC容器中总是配成一个bean,第一种情况下,DataSource bean将传递给service,第二种情况下DataSource bean 传递给JdbcTemplate bean。

    最后JdbcTemplate中使用的所有SQL将会以DEBUG级别记入入职。

    1. 如何获取一个表中的所有行数:

    int rowCount = jdbcTemplate.queryForInt("SELECT COUNT(*) FROMERM_CHILD2");

    1. 列出每列的值:

    Stringsql = "SELECT * FROM ERM_CHILD1";

                 

                      List<Map<String,Object>> rows = jdbcTemplate.queryForList(sql);

                      for (Map row : rows) {

                            System.out.println(row.get("CHILD1_COL1"));

                            System.out.println(row.get("CHILD1_COL2"));

                            System.out.println(row.get("CHILD1_COL3"));

                            System.out.println(row.get("CHILD1_COL4"));

                      }

    1. 如何进行参数绑定

    intcountOfActorsNamedJoe = jdbcTemplate. queryForInt (

                              "select count(*) from ERM_CHILD2 where CHILD2_COL3 = ?", new Object[]{"2"});

    1. 查询一个String

    Map<String,Object> results =

                                  jdbcTemplate.queryForMap(

                              "selectCHILD2_COL1,CHILD2_COL2 from ERM_CHILD2 where CHILD2_COL1 = ? "

                              ,new Object[]{new BigDecimal(501)});

    String column1 = (String)jdbcTemplate.queryForObject("selectCHILD2_COL2 from ERM_CHILD2 where CHILD2_COL1 = ?", new Object[]{newBigDecimal(501)}, String.class);

    1. 更新(插入/更新/删除)

    jdbcTemplate.update(

                              "insertinto ERM_CHILD1 (CHILD1_COL1,CHILD1_COL2,CHILD1_COL3,CHILD1_COL4) values(?,?,?,?)",

                              new Object[] {999, "1","2","3"});

    int rows = jdbcTemplate.update(

                              "UPDATEERM_CHILD1 SET CHILD1_COL1 = ? WHERE CHILD1_COL1 = ?",

                              new Object[] {“444”,new BigDecimal(999)});

    int rows = jdbcTemplate.update(

                              "DELETEFROM  ERM_CHILD1 WHERE CHILD1_COL1 =?",

                              new Object[] {new BigDecimal(999)});

    1. 其他操作
                   jdbcTemplate.execute("create table mytable (id integer, name varchar(100))");
    jdbcTemplate.update(
            "call SUPPORT.REFRESH_ACTORS_SUMMARY(?)", 
            new Object[]{Long.valueOf(unionId)});
  • 相关阅读:
    luogu1197 [JSOI2008]星球大战
    luogu2085 最小函数值
    Vijos 1144 小胖守皇宫 【树形DP】
    洛谷 P1941 飞扬的小鸟 【DP+众多特判】
    codevs 1516 平均分数 【数学推理+求逆序对】
    tyvj 1936 太空战队 【强连通分量】
    USACO 2.4 Overfencing 【种子染色法+递推】
    code[vs] 2488 绿豆蛙的归宿【反向拓扑+DP】
    USACO 2.3 Zero Sum 【搜索+字符串处理+模拟计算】
    USACO 2.3 Cow Pedigrees 【DP+前缀和优化】
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3260312.html
Copyright © 2011-2022 走看看