• 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);

    }

    }

  • 相关阅读:
    Redis的安装和部署
    SaltStack应用grains和jinja模板-第四篇
    SaltStack部署配置Tomcat-第三篇
    python魔法方法、构造函数、序列与映射、迭代器、生成器
    python异常
    python类
    python之函数、参数、作用域、递归
    docker+openvswitch实现主机与容器的网络通信
    Docker网络和容器的通信
    docker命名空间、控制组及联合文件系统概念
  • 原文地址:https://www.cnblogs.com/TYDBLOG/p/7445604.html
Copyright © 2020-2023  润新知