By khateeb

2014-02-03 04:55:19 8 Comments

In Spring, when we are inserting into the database, we can use JdbcDaoSupport or not. My question is, what are the advantages in using it and in which circumstances we should use it?


@gavenkoa 2014-02-24 15:51:34

According to these answers:

JdbcDaoSupport, NamedParameterJdbcDaoSupport, SimpleJdbcDaoSupport are unnecessary and are mental dust. They doesn't save any line of code because you need to inject data-source or template into.

What I recommend - to create templates in XML/class config per data source and reuse/inject them as templates are thread safe according to docs:

Once configured, a JdbcTemplate instance is threadsafe. You may want multiple JdbcTemplate instances if your application accesses multiple databases, which requires multiple DataSources, and subsequently multiple differently configured JdbcTemplates.

Compare applicationContext.xml:

<bean id="dataSource"
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
<bean id="jdbcTemplate" 
    <constructor-arg ref="dataSource"/>


public class YourDaoImpl implements YourDao {

    private NamedParameterJdbcTemplate jdbcTemplate;

    public int tableExists(String table) {
        String sql = "select count(*) from all_tables"
                + "  where table_name = :tbl";
        return jdbcTemplate.queryForObject(
                    sql, new MapSqlParameterSource("tbl", table), Integer.class);


public class YourDaoImpl extends NamedParameterJdbcDaoSupport implements YourDao {

    public void setDs(DataSource dataSource) {

    public int tableExists(String table) {
        String sql = "select count(*) from all_tables"
                + "  where table_name = :tbl";
        return getNamedParameterJdbcTemplate()
                       new MapSqlParameterSource("tbl", table), Integer.class);


UPDATE Official statement about stateless (and so thread safety) of JdbcTemplate/NamedParameterJdbcTemplate here

@Prancer 2014-02-03 14:14:11

First lets point out the API specifies this class as a convenience class ("support"). I believe JdbcDaoSupport supports, aka provides you with, a base implementation of the DAO design for jdbc whereas a template class (see template pattern) will give you a singleton that is used to inject into your DAO classes.

In my experience I haven't found a reason to couple my DAO to a *Support class. I instead create my specific jdbcTemplate beans and inject them into my DAO classes favoring composition over inheritence -- generally a good object-oriented practice.

From the Spring docs, "You can choose whether to inherit from this class. The JdbcDaoSupport class is provided as a convenience only.".

As Spring states, JdbcDaoSupport is a convenience only. They say nothing about its advantages over using one of the template implementations.

Related Questions

Sponsored Content

5 Answered Questions

18 Answered Questions

[SOLVED] Why is my Spring @Autowired field null?

6 Answered Questions

[SOLVED] What is the difference between Hibernate and Spring Data JPA

6 Answered Questions

[SOLVED] Spring - @Transactional - What happens in background?

11 Answered Questions

[SOLVED] What in the world are Spring beans?

  • 2013-06-19 14:05:06
  • grantmcconnaughey
  • 155953 View
  • 396 Score
  • 11 Answer
  • Tags:   java spring grails

15 Answered Questions

1 Answered Questions

Extending DAO with JDBCDAOSupport, a bad practice?

  • 2015-01-29 09:26:44
  • faisalbhagat
  • 249 View
  • 0 Score
  • 1 Answer
  • Tags:   java spring jdbc

2 Answered Questions

[SOLVED] Spring JdbcDaoSupport

  • 2014-06-11 09:32:14
  • user3729326
  • 299 View
  • 2 Score
  • 2 Answer
  • Tags:   java mysql spring

1 Answered Questions

JdbcDaoSupport with a SQL SELECT FROM INSERT

Sponsored Content