zoukankan      html  css  js  c++  java
  • 配数据源过程—JdbcTemplate, DataSource

    前提:配个数据源(mysql or oracle),设置到JdbcTemplate中,然后直接执行sql以及带绑定变量的sql

    对于普通sql:

    JdbcTemplate

    • 用于create/drop

    jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");

    • 用于insert/update/delete

    jdbcTemplate.update("INSERT INTO USER VALUES('123', 'bieber')");
    jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});

    • 用于select

    int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER"); // 条数
    String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class); // 返回单个name
    List rows = jdbcTemplate.queryForList("SELECT * FROM USER"); // 返回若干行
    Iterator it = rows.iterator();
    while(it.hasNext()) {
    Map userMap = (Map) it.next(); // 可以直接强转?
    System.out.print(userMap.get("user_id") + "\t");
    System.out.print(userMap.get("name") + "\t");
    }

    • 其他

    jdbcTemplate.update("INSERT INTO USER VALUES(?, ?)", new PreparedStatementSetter() {
      public void setValues(PreparedStatement ps) throws SQLException {
        ps.setString(1, "123");
        ps.setString(2, "bieber");
      }
    });

    jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?", new Object[] {id}, new RowCallbackHandler(){
      public void processRow(ResultSet rs) throws SQLException {
        User user = new User();
        user.setId(rs.getString("user_id"));
        user.setName(rs.getString("name"));
      }
    });

    List list = jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));
    return (User)list.get(0);
    class UserRowMapper implements RowMapper {
      public Object mapRow(ResultSet rs, int index) throws SQLException {
        User user = new User();
        user.setId(rs.getString("user_id"));
        user.setName(rs.getString("name"));
        return user;
      }
    }
    JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。
    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。
    更多方法:http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/core/JdbcTemplate.html


    对于绑定变量的sql:

    • JdbcTemplate

    String insert = "insert into myTable (id, email, password) values (null, ?, ?)";

    jdbcTemplate.update(insert, new Object[] {"happybabyme@gmail.com", "lalalalala"});
    无论是按照Object[]或PreparedStatementSetter的方式,参数个数都必须预先知道,顺序也不可变换。如此一来,如果要调整一下sql语句,那么相应的参数顺序都必须进行相应调整。

    • NamedParameterJdbcTemplate 

    String insert = "insert into myTable (id, email, password) values (null, :email, :password)";

    Map<String, String> map = new HashMap<String, String>;

    map.put("email", "happybabyme@gmail.com");

    map.put("password", "lalalalala");

    jdbcTemplate.update(insert, map);

  • 相关阅读:
    mysql的存储过程
    一份php高级工程师的面试题,我每天看一点点
    php的常用函数(持续更新)
    php 中文字符串截取
    php递归遍历文件目录
    ajax timeout 断网处理
    angular 刷新问题
    angular state中templateUrl 路径的模板
    angular请求传递不了数据
    截取字符串 substring substr slice
  • 原文地址:https://www.cnblogs.com/alipayhutu/p/2796102.html
Copyright © 2011-2022 走看看