1. JdbcDaoSupport
public abstract class JdbcDaoSupport extends DaoSupport {
private JdbcTemplate jdbcTemplate;
public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
}
public final JdbcTemplate getJdbcTemplate() {
return this.jdbcTemplate;
}
}
As we can see from the source code that DaoSupport simply added a JdbcTemplate property.
And when we extends JdbcDaoSupport, we don't need to write the redundancy code of setDataSource().
When we need get jdbcTemplate, we simply call getJdbcTemplate() method.
package edu.xmu.jdbc.dao;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import edu.xmu.jdbc.bean.Student;
public class JdbcSupportDao extends JdbcDaoSupport {
public void createStudent(Student student) {
String sql = "insert into student(name, age) value(?, ?)";
JdbcTemplate jdbcTemplate = getJdbcTemplate();
jdbcTemplate.update(sql, student.getName(), student.getAge());
}
}
?
2. NamedParameterDaoSupport
public class NamedParameterJdbcDaoSupport extends JdbcDaoSupport {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
return namedParameterJdbcTemplate;
}
}
As we can see, when our dao need NamedParameterJdbcTemplate instead of JdbcTemplate,
we can extends NamedParameterDaoSupport.

3. NamedParameterJdbcTemplate
When we execute preparedStatements, we need to use ? as place holder.
But NamedParameterJdbcTemplate offers a mechanism that we can use specific name as holder.
package edu.xmu.jdbc.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import edu.xmu.jdbc.bean.Student;
public class NamedParameterJdbcTemplateDao extends NamedParameterJdbcDaoSupport {
/**
* In this method, we use MapSqlParameterSource for placeholder value
* mapping
*
* @param student
*/
public void createStudent(Student student) {
String sql = "insert into student(name, age) value(:name, :age)";
NamedParameterJdbcTemplate jdbcTemplate = getNamedParameterJdbcTemplate();
MapSqlParameterSource namedParameters = new MapSqlParameterSource(
"name", student.getName());
namedParameters.addValue("age", student.getAge());
jdbcTemplate.update(sql, namedParameters);
}
/**
* In this method, we use BeanPropertySqlParameterSource for placeholder
* value mapping
*
* @param student
*/
public void createStudent2(Student student) {
String sql = "insert into student(name, age) value(:name, :age)";
NamedParameterJdbcTemplate jdbcTemplate = getNamedParameterJdbcTemplate();
SqlParameterSource parameterSo