zoukankan      html  css  js  c++  java
  • JdbcTemplate(2)(数据连接池)

    一、使用具名参数的JdbcTemplate

    1.1 关于具名参数

      在HibernateHQL查询中我们体验过具名参数的使用,相对于基于位置的参数,具名参数具有更好的可维护性,在SQL语句中参数较多时可以考虑使用具名参数。在Spring中可以通过NamedParameterJdbcTemplate类的对象使用带有具名参数的SQL语句。

    1.2 通过IOC容器创建NamedParameterJdbcTemplate对象

    <!-- 配置可以使用具名参数的JDBCTemplate类对象 -->

    <bean 

    id="namedTemplate" 

    class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">

    <!-- 没有无参构造器,必须传入数据源或JdbcTemplate对象 -->

    <constructor-arg ref="dataSource"/>

    </bean>

     

    1.3 具名参数在SQL语句中的格式

    INSERT INTO depts (dept_name) VALUES (:deptName)

    1.4 具名参数传入

    ①通过Map对象传入

    NamedParameterJdbcTemplate.update(String, Map<String, ?>)

    Map的键是参数名,值是参数值

    ②通过SqlParameterSource对象传入

    String sql = "INSERT INTO depts (dept_name) VALUES (:deptName)";

    Department department = new Department(null, "YYY", null);

    SqlParameterSource sqlParameterSource =

    new BeanPropertySqlParameterSource(department);

    namedTemplate.update(sql, sqlParameterSource);

    二、 使用JdbcTemplate实现Dao

    2.1 通过IOC容器自动注入

    JdbcTemplate类是线程安全的,所以可以在IOC容器中声明它的单个实例,并将这个实例注入到所有的Dao实例中。

    @Repository

    public class EmployeeDao {

    @Autowired

    private JdbcTemplate jdbcTemplate;

    public Employee get(Integer id){

    //…

    }

    }

    2.2 扩展JdbcDaoSupport

    /**

     * 不推荐

     */

    @Repository

    public class DepartmentDao extends JdbcDaoSupport{

    @Autowired

    public void setDataSource2(DataSource dataSource){

    //父类提供的setDataSource()方法是final修饰的,不能通过覆盖的方式注入dataSource

    setDataSource(dataSource);

    }

    public Department get(Integer id){

    String sql = "SELECT id, dept_name name FROM departments WHERE id = ?";

    RowMapper<Department> rowMapper = new BeanPropertyRowMapper<>(Department.class);

    return getJdbcTemplate().queryForObject(sql, rowMapper, id);

    }

    }

  • 相关阅读:
    【现代程序设计】【Homework01】
    Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题
    PHP 使用CURL库IP欺骗,隐藏真实客户端IP
    php客服聊天回话系统,长连接加ajax轮询实现
    Which PHP version do I choose
    批量操作,向后台传数组
    angularjs的directive详解
    table中表头不动,表体产生滚动条
    3263232
    forEach、for+i、map的用法及区别
  • 原文地址:https://www.cnblogs.com/TYDBLOG/p/7445604.html
Copyright © 2011-2022 走看看