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

}

}

原文地址:https://www.cnblogs.com/TYDBLOG/p/7445604.html