SlideShare a Scribd company logo
1 of 34
Spring Part - 2
Course Contents
•   Who This Tutor Is For
•   Introduction
•   DAO: Spring and You
•   Steps for DAO
      • Configure Data Source
           • Driver Based Data Source
           • JNDI Data source
           • Pooled Data source
      • Configure JDBC Template
      • Writing DAO Layer
      • Different Template classes and their uses
           • JdbcTemplate
           • NamedParameterJdbcTemplate
           • SimpleJdbcTemplate
      • DAO Support class for different Templates
Who This Tutor Is For?
After going through this session, you will have fair understanding on how to work with
Databases using Spring Framework. You must have basic understanding on Spring Core
parts, Spring IOC (dependency injection). If you are new to Spring, I would suggest you to
refer my Spring pat -1 (Beginning of Spring) before going through this session. I expect
you (as a reader) must have fair knowledge on JDBC including establishing a
Connection, how to use Statement/PreparedStatement, ResultSet etc in JDBC. Also you
must know how to use a connection pool created in an application server such as
WebLogic or WebSphere to understand pooled data source in Spring. Also it would be
better you must understand the basic database queries such as create table, insert
records in table, update a record etc.

You can download the source codes of the examples given in this tutor from Download
Links available at http://springs-download.blogspot.com/


Good Reading…

Author,
Santosh
Introduction:
In Spring part-1, we had the basic understanding on using Spring and the use of DI
(Dependency Injection). If you have not already visited the spring part-1 section
and want to start from beginning of Spring, I would suggest you to visit the url:
http://javacompanionbysantosh.blogspot.com/2011/05/easy-steps-to-learn-springs-
in.html

In this tutor, Spring part-2, we will see how one can deal with Databases using
Spring framework.

Spring comes with a family of data access frameworks that integrate with a variety
of data access technologies. You may use direct JDBC, iBATIS, or an object
relational mapping (ORM) framework like Hibernate to persist your data. Spring
supports all of these persistence mechanisms.
DAO: Spring and You
DAO (Data Access Object) is used to read and write data to the database. The table
shows what actions Spring will take care of and which actions are the responsibility
of you, the application developer.
                           Action                                 Spring       You
Define connection parameters.                                                   
Open the connection.                                                 
Specify the SQL statement.                                                      
Declare parameters and provide parameter values                                 
Prepare and execute the statement.                                   
Set up the loop to iterate through the results (if any).             
Do the work for each iteration.                                                 
Process any exception.                                               
Handle transactions.                                                 
Close the connection, statement and resultset.                       
The Spring Framework takes care of all the low-level details that can make JDBC such a
tedious API to develop with
Steps for DAO:
You need to follow 3 basic steps while configuring the spring context in XML.

   Step 1: Configure Data Source
                1. Driver Based Data Source
                2. JNDI Data source
                3. Pooled Data source

   Step 2: Configure JDBC Template
                1. JdbcTemplate
                2. NamedParameterJdbcTemplate
                3. SimpleJdbcTemplate

   Step 3: Configure custom DAO Class

Now we will discuss each step one by one. I request to concentrate each step one
by one very carefully and understand the needs. Concentrate more on configuring
the data source.
Step 1: Configure Data Source
 The very first step you need to work on database is configuring the data source in Spring’s
 context file. If you remember the basic steps of JDBC Connection in Java, first we load the
 driver using Class.forName(<driver name>), then getting connection using DriverManager
 providing the URL such as Connection con = DriverManger.getConnection(<URL>,
 <username>,<password>) and then using Statement or PreparedStatement.

 While configuring the DataSource in Spring we may need to pass connection details (such as
 DriverName, URL, Username, Password) to Spring framework. The benefit of configuring data sources
 in this way is that they can be managed completely external to the application, leaving the
 application to simply ask for a data source when it’s ready to access the database.



 Spring offers several options for configuring data source beans in your Spring application,:

  •   Driver Based Data Source
  •   JNDI Data source
  •   Pooled Data source


Note: In production, I would recommend to use JNDI Data Source which draws its connection
from a connection pool. Driver Based Data Source is good for unit testing.
Driver Based Data Source
Driver Based data source is the simplest data source that can be configured in Spring. This should
not be used in Production but it is good to use in Development Environment for unit testing.
Spring provides 2 data source classes to choose one of them. They are:
     •   DriverManagerDataSource
     •   SingleConnectionDataSource
Remember, these both provides non-pooled connections but the only difference
is, DriverManagerDataSource provides a new connection each time a new connection is requested
by the application where as SingleConnectionDataSource provides the same connection.

Let’s see an example, to connect MySQL database I am using com.mysql.jdbc.Driver class. And
don’t need any user name or password. We use DriverManagerDataSource so the configuration
would be:

     <bean id="MydataSource"
                class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="com.mysql.jdbc.Driver" />
      <property name="url" value="jdbc:mysql://localhost/test" />
      <property name= "username" value= "" />
      <property name="password" value= "" />
     </bean>
?                                                                                           ?
        How is it if we take the connection deails (Driver class
        name, url, username, password etc. ) from a property file rather than
        defining in Spring Context XML file itself?
Yes, it is a good idea to take the database connection details from a property file.
So let’s create a property file. We will name the file as: jdbc.properties




      <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
          <property name="location" value="jdbc.properties" />
      </bean>

      <bean id="MydataSource"
                 class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="${database.driver}" />
       <property name="url" value=“${database.url}" />
       <property name= "username" value= "${database.username}" />
       <property name="password" value= "${database.password}" />
      </bean>
JNDI Data Source
Application server are often pooled for greater performance. The application servers such as
WebSphere, WebLogic, Jboss allow to configure connection pools. And these connection pools
can be retrieved through a JNDI. The benefit of configuring data sources in this way is that they
can be managed completely external to the application, leaving the application to simply ask for a
data source when it’s ready to access the database. You can google Connection Pool & JNDI to
know more about the features, creation and configuration in server.
In driver based data source, we saw any of the 2 classes DriverManagerDataSource and
SingleConnectionDataSource can be used to establish the connection. Similarly for JNDI data
source, we use JndiObjectFactoryBean.

I have created a connection pool my applicaiton server. The JNDI name is
“mysqldatasource”. There is a servlet deployed in the same Server which gets the DAO
object from the Spring Container. Spring provided the dataSource to the DAO after
getting connection from the connection-pool mysqldatasource.




    <bean id="MydataSource"
               class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
     <property name="jndiName" value="${database.jndiname}" />
    </bean>
JNDI data sources in Spring 2.0 : You can also use the “jee” schema in Driver Based Data Source

Spring 2.0, the XML required for retrieving a data source from JNDI is greatly simplified using the
jee namespace.             Optional, you can ignore if you don’t want to
                                       understand the jee namespace
    <bean id="MydataSource"
               class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
     <property name="jndiName" value="${database.jndiname}" />
    </bean>

  can be written using jee name space as:
    <?xml version= "1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:jee="http://www.springframework.org/schema/jee"
                 xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
                 :
                 :
    <jee:jndi-lookup id="MyDataSource" jndi-name= "${database.jndiname}" />
                 :
                 :
    </beans>
Pooled Data Source
If you’re unable to retrieve a data source from JNDI, the next best thing is to configure a pooled
data source directly in Spring.
Spring doesn’t provide a pooled data source, there’s a suitable one available in the Jakarta
Commons Database Connection Pools (DBCP) project (http://jakarta.apache.org/commons/dbcp).
To add DBCP to your application, you need to download the JAR file and place it into your build
path along with spring library files.


The class you do use for Pooled Data Source is : org.apache.commons.dbcp.BasicDataSource
<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="jdbc.properties" />
</bean>

<bean id="MydataSource" class="org.apache.commons.dbcp.BasicDataSource">
 <property name="driverClassName" value="${database.driver}" />
 <property name="url" value=“${database.url}" />
 <property name= "username" value= "${database.username}" />
 <property name= "password" value= "${database.password}" />
 <property name= "initialSize" value="5" />
 <property name= "maxActive" value="10" />
</bean>
DID you really understand the 3 types of Data Sources?

              <bean id="MydataSource"
JNDI DS                  class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
               <property name="jndiName" value="${database.jndiname}" />
              </bean>




                                                                                         Driver
                                                                                        Based DS




     Pooled
       DS
Step 2: Configure JDBC Template
After configuring the DataSource, the next step is configuring the JDBCTemplate.

The JdbcTemplate class is the central class in the JDBC core package. It simplifies
the use of JDBC since it handles the creation and release of resources. This helps to
avoid common errors such as forgetting to always close the connection. It executes
the core JDBC workflow like statement creation and execution, leaving application
code to provide SQL and extract results. This class executes SQL queries, update
statements or stored procedure calls, imitating iteration over ResultSets and
extraction of returned parameter values.

It also catches JDBC exceptions and translates them to the generic, more
informative, exception hierarchy defined in the org.springframework.dao package.

Option 1: The JdbcTemplate can be used within a DAO implementation via direct
instantiation with a DataSource reference
OR
Option 2: be configured in a Spring IOC container and given to DAOs as a bean
reference.
Option - 1
 The JdbcTemplate within a DAO implementation via direct instantiation with a DataSource
 reference.

  <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" >
    <property name="dataSource" ref="MyDataSource" />
  </bean>

  <bean id= "MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name=“jndiName" value="${database.jndiname}" />
  </bean>



Option - 2
 Configured in Spring IOC container and given JdbcTemplate to DAOs as a
 bean reference.

  <bean id="employeeDao"    class="org.santosh.dao.EmployeeDao" >
    <property name=“jdbcTemplate" ref="MyJdbcTemplate" />
  </bean>

  <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="${database.jndiname}" />
  </bean>

  <bean id= “MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="MyDataSource" />
  </bean>
                                                                                     Bean for JdbcTemplate
                                                                                     added and use in DAO
Step 3: Writing DAO Layer
We already discussed that the JdbcTemplate can be used within a DAO implementation via direct
instantiation with a DataSource reference OR be configured in a Spring IOC container and given to DAOs as a
bean reference. Now we will see how they can be implemented in the DAO class.
Option - 1
 The JdbcTemplate within a DAO implementation via direct instantiation with a DataSource
 reference.
  <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" >
   <property name="dataSource" ref="MyDataSource" />
  </bean>

  <bean id= "MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name=“jndiName" value="${database.jndiname}" />
  </bean>


 In DAO Class
                                                                                                Created JdbcTemplate
        private JdbcTemplate jdbcTemplate;
                                                                                                instance and assigned
        public void setDataSource(DataSource dataSource) {                                      to local object.
             this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
                                                                                                 Using jdbcTemplate


        jdbcTemplate.update(SQL_ADD_EMPLOYEE,
             new Object[] { emp.getEmpId(), emp.getName(),emp.getDeptid(),emp.getSalary() });
Option - 2 In all our examples, we adopted this option only…
 Configured in Spring IOC container and given JdbcTemplate to DAOs as a bean
 reference.

  <bean id="employeeDao"  class="org.santosh.dao.EmployeeDao" >
   <property name=“jdbcTemplate" ref="MyJdbcTemplate" />
  </bean>

  <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="${database.jndiname}" />
  </bean>

  <bean id= “MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="MyDataSource" />
  </bean>
                                                                                               Bean for JdbcTemplate
                                                                                               added and use in DAO
 In DAO Class
                                                                                                   Setter method
         private JdbcTemplate jdbcTemplate;                                                        for JdbcTemplate

         public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
              this.jdbcTemplate = jdbcTemplate
         }
                                                                                              Using jdbcTemplate


         jdbcTemplate.update(“INSERT into emp(empid, name, dept, sal) values (?, ?, ?, ?)",
              new Object[] { 1001, "John Mayor", 23 ,780000 });
In previous examples we saw DAO class gets the JDBC Template either directly from Spring
Container or it takes DataSource from the container and creates the JDBCTemplate instance.
Whatever the option you may choose but you are using the template and you can work with the
SQL queries through the Templates only. We used the template class -
org.springframework.jdbc.core.JdbcTemplate in the last example.

In this section we will see the different Template classes we can use in Spring
          Template class (org.springframework.*)        Templates used
   jdbc.core.JdbcTemplate                          JDBC connections
                                                   JDBC connections with
   jdbc.core.namedparam.NamedParameterJdbcTemplate support for named
                                                   parameters
                                                   JDBC connections,
   jdbc.core.simple.SimpleJdbcTemplate             simplified with Java 5
                                                   constructs
   orm.hibernate.HibernateTemplate                 Hibernate 2.x sessions
   orm.hibernate3.HibernateTemplate                Hibernate 3.x sessions
   orm.ibatis.SqlMapClientTemplate                                iBATIS SqlMap clients
                                                                  Java Data Object
   orm.jdo.JdoTemplate
                                                                  implementations
Different Template classes and their uses

For JDBC we can use:
     • org.springframework.jdbc.core.JdbcTemplate
     • org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
     • org.springframework.jdbc.core.simple.SimpleJdbcTemplate


For hibernate we can use:
     • org.springframework.orm.hibernate.HibernateTemplate
     • org.springframework.orm.hibernate3.HibernateTemplate


For JPA (Java Persistence API) we can use:
     • org.springframeworkorm.jpa.JpaTemplate


For IBatics we can use:
     • org.springframework.orm.jpa.JpaTemplate

In this part, we will cover only the JDBC templates. These JDBC templates can be used with
all the 3 data sources (Driver Based/JNDI/Pooled Data sources) as we discussed in Step-1.
Let’s use JdbcTemplate first…
We already have seen how DAO class gets the JDBC Template directly from Spring Container
or it takes DataSource from the container and creates the JDBCTemplate Instance. But in our
examples, we will use only injecting JDBCTemplate.
1
So the First step would be configuring Data Source* using either Driver Based data source or
JNDI data source or Pooled Data sources data source.
    <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
         <property name="jndiName" value="${database.jndiname}" />
    </bean>

2 After setting up the Data source, the Second step would be configuring the Template using
    either JdbcTemplate or NamedParameterJdbcTemplate or SimpleJdbcTemplate

    <bean id= "MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <property name="dataSource" ref="MyDataSource" />
    </bean>


3
    Third step is injecting the template to your DAO class.
    <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" >
     <property name=“jdbcTemplate" ref="MyJdbcTemplate" />
    </bean>

         *We   already have discussed under section Step 1: configure data source
4 Configuration of Spring Context is now over. This is time and our Forth step - writing our
 DAO class.

 In our example we create a DAO class org.santosh.dao.EmployeeDao
 In the DAO class you                                                 3
 • Declare a field jdbcTemplate of type org.springframework.jdbc.core.JdbcTemplate. The name
     could be different but must be same as the bean name defined in XML.
    private JdbcTemplate jdbcTemplate;

 • Define setter method for the field- jdbcTemplate
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
             this.jdbcTemplate = jdbcTemplate
    }

 • Implement the DAO logic for any SQL operation such as insertion, deletion, updation etc.
   using jdbcTemplate.
    jdbcTemplate.update("INSERT into emp(empid, name, dept, sal) values (?, ?, ?, ?)",
        new Object[] {1001, "John Mayor", 23 ,780000 });

So we understand the configuration of Datasource, template, defining DAO class, injecting
template object into DAO class etc. But there is some tricky code in using SQL statements
using jdbcTemplate :
jdbcTemplate.update(…); jdbcTemplate.query (…); jdbcTemplate.queryForObject (…) ; etc.

Let’s see using such methods in the different templates.
Before going through the different JDBC template, we will create some tables, insert data into
those tables.

Lets create 2 tables, emp and dept and VO class.
 The structure of the emp table will look like:
 Field        type            Null       Key
 empid        int(10)         No         primary key
 name         varchar(15)     Yes
 dept         int(10)         Yes
 sal          float(12,2)     yes


 The structure of the dept table will look like:
 Field        type            Null       Key
 deptid       int(10)         No         primary key
 deptname     varchar(20)     Yes
 dept         varchar(20)     Yes


   emp                                             dept
   empid     name    dept      sal                     deptid          deptname        address
     1002 Tom            21     40000                           21 IT             IT Park
     1003 Jerry          22     39655                           22 Sales          MG Road
                                                                23 BPO            MG Road


  Now we will work on SQL queries using different templates.
org.springframework.jdbc.core.JdbcTemplate
The most basic of Spring’s JDBC templates, this class provides simple access to a database
through JDBC and simple indexed-parameter queries.
 In Bean declaration
 <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" >
   <property name=“jdbcTemplate" ref="MyJdbcTemplate" />
 </bean>

 <bean id= "MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
      <property name="dataSource" ref="MyDataSource" />
 </bean>

 <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="${database.jndiname}" />
 </bean>

 In DAO class
 public class EmployeeDao {
       …
       private JdbcTemplate jdbcTemplate;

      public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate
      }
      …
      …
      …
 }
To insert a record(EmployeeDao.java)
public void addEmployee(Employee emp) {
          String SQL_ADD_EMPLOYEE = "INSERT into emp(empid, name, dept, sal)"
                    + " values (?, ?, ?, ?)";

           int no_of_records = getJdbcTemplate().update(SQL_ADD_EMPLOYEE,
                         new Object[] {
                           emp.getEmpId(), emp.getName(), emp.getDeptid(), emp.getSalary()
                         });
           System.out.println("Total "+ no_of_records+" records are updated...");
}



To access a record(EmployeeDao.java)
public Employee getEmployeeById(int id) throws SQLException {

String SQL_GET_EMPLOYEE_BY_ID = "SELECT empid, name, dept, sal FROM emp WHERE empid=?";

Employee emp = getJdbcTemplate().queryForObject(
           SQL_GET_EMPLOYEE_BY_ID,
           new Object[] { Integer.valueOf(id) },
           new RowMapper<Employee>() {
                      public Employee mapRow(ResultSet rs, int rowNum)
                           throws SQLException, DataAccessException {
                                 Employee employee = new Employee();
                                 employee.setEmpId(rs.getInt(1));
                                 employee.setName(rs.getString(2));
                                 employee.setDeptid(rs.getInt(3));
                                 employee.setSalary(rs.getFloat(4));
                           return employee;
                      }
           });

return emp;
}
org.springframework.jdbc.core.NamedParameterJdbcTemplate
Named parameters let us give each parameter in the SQL an explicit name and to refer to the
parameter by that name when binding values to the statement.
                                                                 See, this is something new.
 In Bean declaration
                                                                 Do you remember we had discussed about dependency
 <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" >    injection (DI) – through setter method and constructor?
   <property name=“jdbcTemplate" ref="MyJdbcTemplate" />         We used constructor DI, where we pass the datasource as
 </bean>                                                         constructor argument because I didn’t find a
                                                                 no-parameter constructor for this class in Spring 3.0.
 <bean id= "MyJdbcTemplate"
             class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
      <constructor-arg ref="MyDataSource" />
 </bean>

 <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="${database.jndiname}" />
 </bean>
 In DAO class
 public class EmployeeDao {
       …
       private NamedParameterJdbcTemplate jdbcTemplate;

      public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate
      }
      …
      …
      …
 }
To insert a record(EmployeeDao.java)
public void addEmployee(Employee emp) {
     String SQL_ADD_EMPLOYEE = "INSERT into emp(empid, name, dept, sal)"
                           + " values (:empid, :ename, :deptid, :sal)";
     Map<String, Object> map = new HashMap<String, Object>();
     map.put("empid", emp.getEmpId());
     map.put("ename", emp.getName());
     map.put("deptid", emp.getDeptid());
     map.put("sal", emp.getSalary());
     int no_of_records = getJdbcTemplate().update(SQL_ADD_EMPLOYEE, map);
     System.out.println("Total ”+ no_of_records+" records are updated...);
}
To access a record(EmployeeDao.java)
public Employee getEmployeeById(int id) throws SQLException {

String SQL_GET_EMPLOYEE_BY_ID =
           "SELECT empid, name, dept, sal FROM emp WHERE empid = :empId";

SqlParameterSource namedParameters = new MapSqlParameterSource("empId", Integer.valueOf(id));

Employee emp = getJdbcTemplate().queryForObject(
           SQL_GET_EMPLOYEE_BY_ID,
           namedParameters,
           new RowMapper<Employee>() {
                      public Employee mapRow(ResultSet rs, int rowNum)
                           throws SQLException, DataAccessException {
                                 Employee employee = new Employee();
                                 employee.setEmpId(rs.getInt(1));
                                 employee.setName(rs.getString(2));
                                 employee.setDeptid(rs.getInt(3));
                                 employee.setSalary(rs.getFloat(4));
                           return employee;
                      }
           });

return emp;
}
org.springframework.jdbc.core.SimpleJdbcTemplate Simplifying in Java 5
With Java 5’s new language, constructs (known as varargs), it is possible to pass parameter lists
without having to construct an array of Object. Let’s see the examples.



                From Spring 3.0 onwards, SimpleJdbcTemplate class is
                deprecated. So I am not putting any details of how to use
                SimpleJdbcTemplate with Spring. You can use JdbcTemplate
                instead of using SimpleJdbcTemplate.
DAO Support class for different Templates
Before going through the details on the DAO Support, we will brush-up using JDBCTemplate which we
already have discussed under JdbcTemplate section covered under Different Template classes and their
uses. So do you remember how we were configuring jdbcTemplate in the XML for this? Recall,




Now you see the definition of MyJdbcTemplate used as ref with property jdbcTemplate




So from both the bean entries we understand that EmployeeDao needs a property - jdbcTemplate and this
is of type org.springframework.jdbc.core.JdbcTemplate. Hence we need to declare the property
jdbcTemplate in the DAO class with setter and getter methods.
Here in our example the DAO is org.santosh.dao.EmployeeDao. The class would look like:
Now this is ok when you have only one DAO class, here it is only EmployeeDao.java.
But this could be a burden to the programmer because
• What if we have many DAO classes?
• In every and each DAO, do we need to declare the field for jdbcTemplate and define the setter/getter
    methods for this field?

Yes, of course it is burden to the programmer to define jdbcTemplate field in every DAO class with the
setter and getter methods.

So there is a good solutions provided by Spring framework,

So you simply
•   Extend JdbcDaoSupport class when you use the template of type
    org.springframework.jdbc.core.JdbcTemplate

•   Extend NamedParameterJdbcDaoSupport when you use the template of type
    org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate

•   Extend SimpleJdbcDaoSupport when you use the template of type
    org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport

•   Extend HibernateDaoSupport when you use the template of type
    org.springframework.orm.hibernate3.HibernateTemplate (we will discussed in part-3 using Spring and
    hibernate)
When you need to use the JdbcTemplate ,
1) import org.springframework.jdbc.core.support.JdbcDaoSupport class
2) In DAO class, extend JdbcDaoSupport
3) Use getJdbcTemplate().<methods> to run the SQL Queries.
4) In XML, there should be the property with bean name “jdbcTemplate” but never declare the field for
   jdbcTemplate in DAO because it is already done in JdbcDaoSupport class.

 So the XML and the DAO class will look like:



                                                                            Ignore and don’t use this in
                                                                            any of your DAO class
                                                                            because you extends
                                                                            JdbcDaoSupport and so this
                                                                            class had already done this
                                                                            for you.



                                                                       Method getJdbcTemplate() is derived
                                                                       from JdbcDaoSupport class
When you need to use the NamedParameterJdbcDaoSupport,
1) import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport class.
2) In DAO class, extend NamedParameterJdbcDaoSupport
3) Use getNamedParameterJdbcTemplate().<methods> to run the SQL Queries.
4) In XML, there should be the property with bean name “jdbcTemplate” but never declare the field for
   jdbcTemplate in DAO because it is already done in NamedParameterJdbcDaoSupport class.
So the XML and the DAO class will look like:




                                                                      Ignore and don’t use this in any of
                                                                      your DAO class because you
                                                                      extends
                                                                      NamedParameterJdbcDaoSupport
                                                                      and so this class had already done
                                                                      this for you.

                                                                      Method
                                                                      getNamedParameterJdbcTemplate()
                                                                      is derived from
                                                                      NamedParameterJdbcDaoSupport
                                                                      class
End of Part-2
In part – 1 we learned the basics of Spring. And in part-2 we saw how we can work with
Databases in Spring.

In further parts we will see,

      Part – 3 : Spring and Hibernate
        at http://javacompanionbysantosh.blogspot.com/2011/10/spring-and-hibernate.html
      Part – 4 : Spring - Managing Database Transactions
        at http://javacompanionbysantosh.blogspot.com/2011/10/managing-transactions-in-spring.html
      Part – 5 : Spring - Security
        at http://javacompanionbysantosh.blogspot.com/2011/10/spring-security.html
      Part – 6 : Spring AOP
        at http://javacompanionbysantosh.blogspot.com/2011/10/spring-aop.html
      Part – 7 : Spring MVC
        at http://javacompanionbysantosh.blogspot.com/2011/10/spring-mvc.html
Downloadable Links

•   Driver Based DataSource

•   JNDI Datasource

•   PooledDatasource

•   JdbcTemplate Example

•   NamedParameterJdbcTemplate

•   JDBCDaoSupport

•   NamedParameterJdbcDaoSupport
Do you have Questions ?
Please write to:
santosh.bsil@yahoo.co.in

More Related Content

What's hot

What's hot (20)

Spring MVC 5 & Hibernate 5 Integration
Spring MVC 5 & Hibernate 5 IntegrationSpring MVC 5 & Hibernate 5 Integration
Spring MVC 5 & Hibernate 5 Integration
 
JDBC ppt
JDBC pptJDBC ppt
JDBC ppt
 
Java database connectivity with MYSQL
Java database connectivity with MYSQLJava database connectivity with MYSQL
Java database connectivity with MYSQL
 
Writing simple web services in java using eclipse editor
Writing simple web services in java using eclipse editorWriting simple web services in java using eclipse editor
Writing simple web services in java using eclipse editor
 
Jdbc ppt
Jdbc pptJdbc ppt
Jdbc ppt
 
Jdbc in servlets
Jdbc in servletsJdbc in servlets
Jdbc in servlets
 
Overview Of JDBC
Overview Of JDBCOverview Of JDBC
Overview Of JDBC
 
JSP
JSPJSP
JSP
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
JDBC Tutorial
JDBC TutorialJDBC Tutorial
JDBC Tutorial
 
Java Database Connectivity (JDBC)
Java Database Connectivity (JDBC)Java Database Connectivity (JDBC)
Java Database Connectivity (JDBC)
 
Jdbc
JdbcJdbc
Jdbc
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivity
 
Java database connectivity with MySql
Java database connectivity with MySqlJava database connectivity with MySql
Java database connectivity with MySql
 
Advance Java Practical file
Advance Java Practical fileAdvance Java Practical file
Advance Java Practical file
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc Complete Notes by Java Training Center (Som Sir)
Jdbc Complete Notes by Java Training Center (Som Sir)Jdbc Complete Notes by Java Training Center (Som Sir)
Jdbc Complete Notes by Java Training Center (Som Sir)
 
java jdbc connection
java jdbc connectionjava jdbc connection
java jdbc connection
 
1. java database connectivity (jdbc)
1. java database connectivity (jdbc)1. java database connectivity (jdbc)
1. java database connectivity (jdbc)
 
Jdbc
JdbcJdbc
Jdbc
 

Viewers also liked

Deploy and Publish Web Service
Deploy and Publish Web ServiceDeploy and Publish Web Service
Deploy and Publish Web Servicepradeepfdo
 
Java Web Services [4/5]: Java API for XML Web Services
Java Web Services [4/5]: Java API for XML Web ServicesJava Web Services [4/5]: Java API for XML Web Services
Java Web Services [4/5]: Java API for XML Web ServicesIMC Institute
 
Best Practices with WSO2 Developer Studio
Best Practices with WSO2 Developer Studio Best Practices with WSO2 Developer Studio
Best Practices with WSO2 Developer Studio WSO2
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentationguest11106b
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
Web Service Presentation
Web Service PresentationWeb Service Presentation
Web Service Presentationguest0df6b0
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsBEEVA_es
 

Viewers also liked (14)

Springs
SpringsSprings
Springs
 
Spring transaction part4
Spring transaction   part4Spring transaction   part4
Spring transaction part4
 
Silverlight
SilverlightSilverlight
Silverlight
 
Deploy and Publish Web Service
Deploy and Publish Web ServiceDeploy and Publish Web Service
Deploy and Publish Web Service
 
Maven (EN ESPANOL)
Maven (EN ESPANOL)Maven (EN ESPANOL)
Maven (EN ESPANOL)
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 
Java Web Services [4/5]: Java API for XML Web Services
Java Web Services [4/5]: Java API for XML Web ServicesJava Web Services [4/5]: Java API for XML Web Services
Java Web Services [4/5]: Java API for XML Web Services
 
Best Practices with WSO2 Developer Studio
Best Practices with WSO2 Developer Studio Best Practices with WSO2 Developer Studio
Best Practices with WSO2 Developer Studio
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Web Service Presentation
Web Service PresentationWeb Service Presentation
Web Service Presentation
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
 

Similar to Spring database - part2

Introduction to JDBC and JDBC Drivers
Introduction to JDBC and JDBC DriversIntroduction to JDBC and JDBC Drivers
Introduction to JDBC and JDBC DriversKumar
 
Enterprise Spring
Enterprise SpringEnterprise Spring
Enterprise SpringEmprovise
 
JDBC: java DataBase connectivity
JDBC: java DataBase connectivityJDBC: java DataBase connectivity
JDBC: java DataBase connectivityTanmoy Barman
 
SHOW104: Practical Java
SHOW104: Practical JavaSHOW104: Practical Java
SHOW104: Practical JavaMark Myers
 
Java Data Base Connectivity concepts.pptx
Java Data Base Connectivity concepts.pptxJava Data Base Connectivity concepts.pptx
Java Data Base Connectivity concepts.pptxmukeshprasanth909
 
jdbc_presentation.ppt
jdbc_presentation.pptjdbc_presentation.ppt
jdbc_presentation.pptDrMeenakshiS
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivityVaishali Modi
 
Java Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet AdvancedJava Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet AdvancedIMC Institute
 
Java Web Programming Using Cloud Platform: Module 3
Java Web Programming Using Cloud Platform: Module 3Java Web Programming Using Cloud Platform: Module 3
Java Web Programming Using Cloud Platform: Module 3IMC Institute
 
Spring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applicationsSpring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applicationsmichaelaaron25322
 
JDBC java for learning java for learn.ppt
JDBC java for learning java for learn.pptJDBC java for learning java for learn.ppt
JDBC java for learning java for learn.pptkingkolju
 
chapter 5 java.pptx
chapter 5  java.pptxchapter 5  java.pptx
chapter 5 java.pptxBekiTube
 

Similar to Spring database - part2 (20)

Spring framework DAO
Spring framework  DAOSpring framework  DAO
Spring framework DAO
 
Introduction to JDBC and JDBC Drivers
Introduction to JDBC and JDBC DriversIntroduction to JDBC and JDBC Drivers
Introduction to JDBC and JDBC Drivers
 
Enterprise Spring
Enterprise SpringEnterprise Spring
Enterprise Spring
 
JDBC: java DataBase connectivity
JDBC: java DataBase connectivityJDBC: java DataBase connectivity
JDBC: java DataBase connectivity
 
JDBC
JDBCJDBC
JDBC
 
Jdbc
JdbcJdbc
Jdbc
 
SHOW104: Practical Java
SHOW104: Practical JavaSHOW104: Practical Java
SHOW104: Practical Java
 
Jdbc
Jdbc   Jdbc
Jdbc
 
Java Data Base Connectivity concepts.pptx
Java Data Base Connectivity concepts.pptxJava Data Base Connectivity concepts.pptx
Java Data Base Connectivity concepts.pptx
 
jdbc_presentation.ppt
jdbc_presentation.pptjdbc_presentation.ppt
jdbc_presentation.ppt
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivity
 
Java Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet AdvancedJava Web Programming [3/9] : Servlet Advanced
Java Web Programming [3/9] : Servlet Advanced
 
Java Web Programming Using Cloud Platform: Module 3
Java Web Programming Using Cloud Platform: Module 3Java Web Programming Using Cloud Platform: Module 3
Java Web Programming Using Cloud Platform: Module 3
 
Spring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applicationsSpring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applications
 
Sel study notes
Sel study notesSel study notes
Sel study notes
 
JDBC.ppt
JDBC.pptJDBC.ppt
JDBC.ppt
 
JDBC java for learning java for learn.ppt
JDBC java for learning java for learn.pptJDBC java for learning java for learn.ppt
JDBC java for learning java for learn.ppt
 
Core jdbc basics
Core jdbc basicsCore jdbc basics
Core jdbc basics
 
Jdbc
JdbcJdbc
Jdbc
 
chapter 5 java.pptx
chapter 5  java.pptxchapter 5  java.pptx
chapter 5 java.pptx
 

More from Santosh Kumar Kar

Operating electrical devices with PIR sensor. No coding, No controller
Operating electrical devices with PIR sensor. No coding, No controllerOperating electrical devices with PIR sensor. No coding, No controller
Operating electrical devices with PIR sensor. No coding, No controllerSantosh Kumar Kar
 
Temperature sensor with raspberry pi
Temperature sensor with raspberry piTemperature sensor with raspberry pi
Temperature sensor with raspberry piSantosh Kumar Kar
 
Pir motion sensor with raspberry pi
Pir motion sensor with raspberry piPir motion sensor with raspberry pi
Pir motion sensor with raspberry piSantosh Kumar Kar
 

More from Santosh Kumar Kar (7)

Smart home arduino
Smart home   arduinoSmart home   arduino
Smart home arduino
 
Operating electrical devices with PIR sensor. No coding, No controller
Operating electrical devices with PIR sensor. No coding, No controllerOperating electrical devices with PIR sensor. No coding, No controller
Operating electrical devices with PIR sensor. No coding, No controller
 
Temperature sensor with raspberry pi
Temperature sensor with raspberry piTemperature sensor with raspberry pi
Temperature sensor with raspberry pi
 
Pir motion sensor with raspberry pi
Pir motion sensor with raspberry piPir motion sensor with raspberry pi
Pir motion sensor with raspberry pi
 
Angular js for Beginnners
Angular js for BeginnnersAngular js for Beginnners
Angular js for Beginnners
 
Raspberry pi complete setup
Raspberry pi complete setupRaspberry pi complete setup
Raspberry pi complete setup
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 

Recently uploaded

Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptxVS Mahajan Coaching Centre
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTiammrhaywood
 
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfEnzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfSumit Tiwari
 
Class 11 Legal Studies Ch-1 Concept of State .pdf
Class 11 Legal Studies Ch-1 Concept of State .pdfClass 11 Legal Studies Ch-1 Concept of State .pdf
Class 11 Legal Studies Ch-1 Concept of State .pdfakmcokerachita
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxNirmalaLoungPoorunde1
 
Introduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher EducationIntroduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher Educationpboyjonauth
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Celine George
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdfSoniaTolstoy
 
EPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptxEPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptxRaymartEstabillo3
 
Biting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdfBiting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdfadityarao40181
 
Pharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdfPharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdfMahmoud M. Sallam
 
Solving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxSolving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxOH TEIK BIN
 
Painted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of IndiaPainted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of IndiaVirag Sontakke
 
भारत-रोम व्यापार.pptx, Indo-Roman Trade,
भारत-रोम व्यापार.pptx, Indo-Roman Trade,भारत-रोम व्यापार.pptx, Indo-Roman Trade,
भारत-रोम व्यापार.pptx, Indo-Roman Trade,Virag Sontakke
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon AUnboundStockton
 
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting DataJhengPantaleon
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentInMediaRes1
 

Recently uploaded (20)

Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
 
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfEnzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
 
Class 11 Legal Studies Ch-1 Concept of State .pdf
Class 11 Legal Studies Ch-1 Concept of State .pdfClass 11 Legal Studies Ch-1 Concept of State .pdf
Class 11 Legal Studies Ch-1 Concept of State .pdf
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptx
 
Introduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher EducationIntroduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher Education
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
 
EPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptxEPANDING THE CONTENT OF AN OUTLINE using notes.pptx
EPANDING THE CONTENT OF AN OUTLINE using notes.pptx
 
Biting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdfBiting mechanism of poisonous snakes.pdf
Biting mechanism of poisonous snakes.pdf
 
Staff of Color (SOC) Retention Efforts DDSD
Staff of Color (SOC) Retention Efforts DDSDStaff of Color (SOC) Retention Efforts DDSD
Staff of Color (SOC) Retention Efforts DDSD
 
Pharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdfPharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdf
 
Solving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptxSolving Puzzles Benefits Everyone (English).pptx
Solving Puzzles Benefits Everyone (English).pptx
 
Painted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of IndiaPainted Grey Ware.pptx, PGW Culture of India
Painted Grey Ware.pptx, PGW Culture of India
 
भारत-रोम व्यापार.pptx, Indo-Roman Trade,
भारत-रोम व्यापार.pptx, Indo-Roman Trade,भारत-रोम व्यापार.pptx, Indo-Roman Trade,
भारत-रोम व्यापार.pptx, Indo-Roman Trade,
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon A
 
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media Component
 

Spring database - part2

  • 2. Course Contents • Who This Tutor Is For • Introduction • DAO: Spring and You • Steps for DAO • Configure Data Source • Driver Based Data Source • JNDI Data source • Pooled Data source • Configure JDBC Template • Writing DAO Layer • Different Template classes and their uses • JdbcTemplate • NamedParameterJdbcTemplate • SimpleJdbcTemplate • DAO Support class for different Templates
  • 3. Who This Tutor Is For? After going through this session, you will have fair understanding on how to work with Databases using Spring Framework. You must have basic understanding on Spring Core parts, Spring IOC (dependency injection). If you are new to Spring, I would suggest you to refer my Spring pat -1 (Beginning of Spring) before going through this session. I expect you (as a reader) must have fair knowledge on JDBC including establishing a Connection, how to use Statement/PreparedStatement, ResultSet etc in JDBC. Also you must know how to use a connection pool created in an application server such as WebLogic or WebSphere to understand pooled data source in Spring. Also it would be better you must understand the basic database queries such as create table, insert records in table, update a record etc. You can download the source codes of the examples given in this tutor from Download Links available at http://springs-download.blogspot.com/ Good Reading… Author, Santosh
  • 4. Introduction: In Spring part-1, we had the basic understanding on using Spring and the use of DI (Dependency Injection). If you have not already visited the spring part-1 section and want to start from beginning of Spring, I would suggest you to visit the url: http://javacompanionbysantosh.blogspot.com/2011/05/easy-steps-to-learn-springs- in.html In this tutor, Spring part-2, we will see how one can deal with Databases using Spring framework. Spring comes with a family of data access frameworks that integrate with a variety of data access technologies. You may use direct JDBC, iBATIS, or an object relational mapping (ORM) framework like Hibernate to persist your data. Spring supports all of these persistence mechanisms.
  • 5. DAO: Spring and You DAO (Data Access Object) is used to read and write data to the database. The table shows what actions Spring will take care of and which actions are the responsibility of you, the application developer. Action Spring You Define connection parameters.  Open the connection.  Specify the SQL statement.  Declare parameters and provide parameter values  Prepare and execute the statement.  Set up the loop to iterate through the results (if any).  Do the work for each iteration.  Process any exception.  Handle transactions.  Close the connection, statement and resultset.  The Spring Framework takes care of all the low-level details that can make JDBC such a tedious API to develop with
  • 6. Steps for DAO: You need to follow 3 basic steps while configuring the spring context in XML. Step 1: Configure Data Source 1. Driver Based Data Source 2. JNDI Data source 3. Pooled Data source Step 2: Configure JDBC Template 1. JdbcTemplate 2. NamedParameterJdbcTemplate 3. SimpleJdbcTemplate Step 3: Configure custom DAO Class Now we will discuss each step one by one. I request to concentrate each step one by one very carefully and understand the needs. Concentrate more on configuring the data source.
  • 7. Step 1: Configure Data Source The very first step you need to work on database is configuring the data source in Spring’s context file. If you remember the basic steps of JDBC Connection in Java, first we load the driver using Class.forName(<driver name>), then getting connection using DriverManager providing the URL such as Connection con = DriverManger.getConnection(<URL>, <username>,<password>) and then using Statement or PreparedStatement. While configuring the DataSource in Spring we may need to pass connection details (such as DriverName, URL, Username, Password) to Spring framework. The benefit of configuring data sources in this way is that they can be managed completely external to the application, leaving the application to simply ask for a data source when it’s ready to access the database. Spring offers several options for configuring data source beans in your Spring application,: • Driver Based Data Source • JNDI Data source • Pooled Data source Note: In production, I would recommend to use JNDI Data Source which draws its connection from a connection pool. Driver Based Data Source is good for unit testing.
  • 8. Driver Based Data Source Driver Based data source is the simplest data source that can be configured in Spring. This should not be used in Production but it is good to use in Development Environment for unit testing. Spring provides 2 data source classes to choose one of them. They are: • DriverManagerDataSource • SingleConnectionDataSource Remember, these both provides non-pooled connections but the only difference is, DriverManagerDataSource provides a new connection each time a new connection is requested by the application where as SingleConnectionDataSource provides the same connection. Let’s see an example, to connect MySQL database I am using com.mysql.jdbc.Driver class. And don’t need any user name or password. We use DriverManagerDataSource so the configuration would be: <bean id="MydataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost/test" /> <property name= "username" value= "" /> <property name="password" value= "" /> </bean>
  • 9. ? ? How is it if we take the connection deails (Driver class name, url, username, password etc. ) from a property file rather than defining in Spring Context XML file itself? Yes, it is a good idea to take the database connection details from a property file. So let’s create a property file. We will name the file as: jdbc.properties <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="jdbc.properties" /> </bean> <bean id="MydataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${database.driver}" /> <property name="url" value=“${database.url}" /> <property name= "username" value= "${database.username}" /> <property name="password" value= "${database.password}" /> </bean>
  • 10. JNDI Data Source Application server are often pooled for greater performance. The application servers such as WebSphere, WebLogic, Jboss allow to configure connection pools. And these connection pools can be retrieved through a JNDI. The benefit of configuring data sources in this way is that they can be managed completely external to the application, leaving the application to simply ask for a data source when it’s ready to access the database. You can google Connection Pool & JNDI to know more about the features, creation and configuration in server. In driver based data source, we saw any of the 2 classes DriverManagerDataSource and SingleConnectionDataSource can be used to establish the connection. Similarly for JNDI data source, we use JndiObjectFactoryBean. I have created a connection pool my applicaiton server. The JNDI name is “mysqldatasource”. There is a servlet deployed in the same Server which gets the DAO object from the Spring Container. Spring provided the dataSource to the DAO after getting connection from the connection-pool mysqldatasource. <bean id="MydataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton"> <property name="jndiName" value="${database.jndiname}" /> </bean>
  • 11. JNDI data sources in Spring 2.0 : You can also use the “jee” schema in Driver Based Data Source Spring 2.0, the XML required for retrieving a data source from JNDI is greatly simplified using the jee namespace. Optional, you can ignore if you don’t want to understand the jee namespace <bean id="MydataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton"> <property name="jndiName" value="${database.jndiname}" /> </bean> can be written using jee name space as: <?xml version= "1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"> : : <jee:jndi-lookup id="MyDataSource" jndi-name= "${database.jndiname}" /> : : </beans>
  • 12. Pooled Data Source If you’re unable to retrieve a data source from JNDI, the next best thing is to configure a pooled data source directly in Spring. Spring doesn’t provide a pooled data source, there’s a suitable one available in the Jakarta Commons Database Connection Pools (DBCP) project (http://jakarta.apache.org/commons/dbcp). To add DBCP to your application, you need to download the JAR file and place it into your build path along with spring library files. The class you do use for Pooled Data Source is : org.apache.commons.dbcp.BasicDataSource <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="jdbc.properties" /> </bean> <bean id="MydataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${database.driver}" /> <property name="url" value=“${database.url}" /> <property name= "username" value= "${database.username}" /> <property name= "password" value= "${database.password}" /> <property name= "initialSize" value="5" /> <property name= "maxActive" value="10" /> </bean>
  • 13. DID you really understand the 3 types of Data Sources? <bean id="MydataSource" JNDI DS class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton"> <property name="jndiName" value="${database.jndiname}" /> </bean> Driver Based DS Pooled DS
  • 14. Step 2: Configure JDBC Template After configuring the DataSource, the next step is configuring the JDBCTemplate. The JdbcTemplate class is the central class in the JDBC core package. It simplifies the use of JDBC since it handles the creation and release of resources. This helps to avoid common errors such as forgetting to always close the connection. It executes the core JDBC workflow like statement creation and execution, leaving application code to provide SQL and extract results. This class executes SQL queries, update statements or stored procedure calls, imitating iteration over ResultSets and extraction of returned parameter values. It also catches JDBC exceptions and translates them to the generic, more informative, exception hierarchy defined in the org.springframework.dao package. Option 1: The JdbcTemplate can be used within a DAO implementation via direct instantiation with a DataSource reference OR Option 2: be configured in a Spring IOC container and given to DAOs as a bean reference.
  • 15. Option - 1 The JdbcTemplate within a DAO implementation via direct instantiation with a DataSource reference. <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" > <property name="dataSource" ref="MyDataSource" /> </bean> <bean id= "MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name=“jndiName" value="${database.jndiname}" /> </bean> Option - 2 Configured in Spring IOC container and given JdbcTemplate to DAOs as a bean reference. <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" > <property name=“jdbcTemplate" ref="MyJdbcTemplate" /> </bean> <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${database.jndiname}" /> </bean> <bean id= “MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="MyDataSource" /> </bean> Bean for JdbcTemplate added and use in DAO
  • 16. Step 3: Writing DAO Layer We already discussed that the JdbcTemplate can be used within a DAO implementation via direct instantiation with a DataSource reference OR be configured in a Spring IOC container and given to DAOs as a bean reference. Now we will see how they can be implemented in the DAO class. Option - 1 The JdbcTemplate within a DAO implementation via direct instantiation with a DataSource reference. <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" > <property name="dataSource" ref="MyDataSource" /> </bean> <bean id= "MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name=“jndiName" value="${database.jndiname}" /> </bean> In DAO Class Created JdbcTemplate private JdbcTemplate jdbcTemplate; instance and assigned public void setDataSource(DataSource dataSource) { to local object. this.jdbcTemplate = new JdbcTemplate(dataSource); } Using jdbcTemplate jdbcTemplate.update(SQL_ADD_EMPLOYEE, new Object[] { emp.getEmpId(), emp.getName(),emp.getDeptid(),emp.getSalary() });
  • 17. Option - 2 In all our examples, we adopted this option only… Configured in Spring IOC container and given JdbcTemplate to DAOs as a bean reference. <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" > <property name=“jdbcTemplate" ref="MyJdbcTemplate" /> </bean> <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${database.jndiname}" /> </bean> <bean id= “MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="MyDataSource" /> </bean> Bean for JdbcTemplate added and use in DAO In DAO Class Setter method private JdbcTemplate jdbcTemplate; for JdbcTemplate public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate } Using jdbcTemplate jdbcTemplate.update(“INSERT into emp(empid, name, dept, sal) values (?, ?, ?, ?)", new Object[] { 1001, "John Mayor", 23 ,780000 });
  • 18. In previous examples we saw DAO class gets the JDBC Template either directly from Spring Container or it takes DataSource from the container and creates the JDBCTemplate instance. Whatever the option you may choose but you are using the template and you can work with the SQL queries through the Templates only. We used the template class - org.springframework.jdbc.core.JdbcTemplate in the last example. In this section we will see the different Template classes we can use in Spring Template class (org.springframework.*) Templates used jdbc.core.JdbcTemplate JDBC connections JDBC connections with jdbc.core.namedparam.NamedParameterJdbcTemplate support for named parameters JDBC connections, jdbc.core.simple.SimpleJdbcTemplate simplified with Java 5 constructs orm.hibernate.HibernateTemplate Hibernate 2.x sessions orm.hibernate3.HibernateTemplate Hibernate 3.x sessions orm.ibatis.SqlMapClientTemplate iBATIS SqlMap clients Java Data Object orm.jdo.JdoTemplate implementations
  • 19. Different Template classes and their uses For JDBC we can use: • org.springframework.jdbc.core.JdbcTemplate • org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate • org.springframework.jdbc.core.simple.SimpleJdbcTemplate For hibernate we can use: • org.springframework.orm.hibernate.HibernateTemplate • org.springframework.orm.hibernate3.HibernateTemplate For JPA (Java Persistence API) we can use: • org.springframeworkorm.jpa.JpaTemplate For IBatics we can use: • org.springframework.orm.jpa.JpaTemplate In this part, we will cover only the JDBC templates. These JDBC templates can be used with all the 3 data sources (Driver Based/JNDI/Pooled Data sources) as we discussed in Step-1.
  • 20. Let’s use JdbcTemplate first… We already have seen how DAO class gets the JDBC Template directly from Spring Container or it takes DataSource from the container and creates the JDBCTemplate Instance. But in our examples, we will use only injecting JDBCTemplate. 1 So the First step would be configuring Data Source* using either Driver Based data source or JNDI data source or Pooled Data sources data source. <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${database.jndiname}" /> </bean> 2 After setting up the Data source, the Second step would be configuring the Template using either JdbcTemplate or NamedParameterJdbcTemplate or SimpleJdbcTemplate <bean id= "MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="MyDataSource" /> </bean> 3 Third step is injecting the template to your DAO class. <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" > <property name=“jdbcTemplate" ref="MyJdbcTemplate" /> </bean> *We already have discussed under section Step 1: configure data source
  • 21. 4 Configuration of Spring Context is now over. This is time and our Forth step - writing our DAO class. In our example we create a DAO class org.santosh.dao.EmployeeDao In the DAO class you 3 • Declare a field jdbcTemplate of type org.springframework.jdbc.core.JdbcTemplate. The name could be different but must be same as the bean name defined in XML. private JdbcTemplate jdbcTemplate; • Define setter method for the field- jdbcTemplate public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate } • Implement the DAO logic for any SQL operation such as insertion, deletion, updation etc. using jdbcTemplate. jdbcTemplate.update("INSERT into emp(empid, name, dept, sal) values (?, ?, ?, ?)", new Object[] {1001, "John Mayor", 23 ,780000 }); So we understand the configuration of Datasource, template, defining DAO class, injecting template object into DAO class etc. But there is some tricky code in using SQL statements using jdbcTemplate : jdbcTemplate.update(…); jdbcTemplate.query (…); jdbcTemplate.queryForObject (…) ; etc. Let’s see using such methods in the different templates.
  • 22. Before going through the different JDBC template, we will create some tables, insert data into those tables. Lets create 2 tables, emp and dept and VO class. The structure of the emp table will look like: Field type Null Key empid int(10) No primary key name varchar(15) Yes dept int(10) Yes sal float(12,2) yes The structure of the dept table will look like: Field type Null Key deptid int(10) No primary key deptname varchar(20) Yes dept varchar(20) Yes emp dept empid name dept sal deptid deptname address 1002 Tom 21 40000 21 IT IT Park 1003 Jerry 22 39655 22 Sales MG Road 23 BPO MG Road Now we will work on SQL queries using different templates.
  • 23. org.springframework.jdbc.core.JdbcTemplate The most basic of Spring’s JDBC templates, this class provides simple access to a database through JDBC and simple indexed-parameter queries. In Bean declaration <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" > <property name=“jdbcTemplate" ref="MyJdbcTemplate" /> </bean> <bean id= "MyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="MyDataSource" /> </bean> <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${database.jndiname}" /> </bean> In DAO class public class EmployeeDao { … private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate } … … … }
  • 24. To insert a record(EmployeeDao.java) public void addEmployee(Employee emp) { String SQL_ADD_EMPLOYEE = "INSERT into emp(empid, name, dept, sal)" + " values (?, ?, ?, ?)"; int no_of_records = getJdbcTemplate().update(SQL_ADD_EMPLOYEE, new Object[] { emp.getEmpId(), emp.getName(), emp.getDeptid(), emp.getSalary() }); System.out.println("Total "+ no_of_records+" records are updated..."); } To access a record(EmployeeDao.java) public Employee getEmployeeById(int id) throws SQLException { String SQL_GET_EMPLOYEE_BY_ID = "SELECT empid, name, dept, sal FROM emp WHERE empid=?"; Employee emp = getJdbcTemplate().queryForObject( SQL_GET_EMPLOYEE_BY_ID, new Object[] { Integer.valueOf(id) }, new RowMapper<Employee>() { public Employee mapRow(ResultSet rs, int rowNum) throws SQLException, DataAccessException { Employee employee = new Employee(); employee.setEmpId(rs.getInt(1)); employee.setName(rs.getString(2)); employee.setDeptid(rs.getInt(3)); employee.setSalary(rs.getFloat(4)); return employee; } }); return emp; }
  • 25. org.springframework.jdbc.core.NamedParameterJdbcTemplate Named parameters let us give each parameter in the SQL an explicit name and to refer to the parameter by that name when binding values to the statement. See, this is something new. In Bean declaration Do you remember we had discussed about dependency <bean id="employeeDao" class="org.santosh.dao.EmployeeDao" > injection (DI) – through setter method and constructor? <property name=“jdbcTemplate" ref="MyJdbcTemplate" /> We used constructor DI, where we pass the datasource as </bean> constructor argument because I didn’t find a no-parameter constructor for this class in Spring 3.0. <bean id= "MyJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="MyDataSource" /> </bean> <bean id= “MyDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${database.jndiname}" /> </bean> In DAO class public class EmployeeDao { … private NamedParameterJdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate } … … … }
  • 26. To insert a record(EmployeeDao.java) public void addEmployee(Employee emp) { String SQL_ADD_EMPLOYEE = "INSERT into emp(empid, name, dept, sal)" + " values (:empid, :ename, :deptid, :sal)"; Map<String, Object> map = new HashMap<String, Object>(); map.put("empid", emp.getEmpId()); map.put("ename", emp.getName()); map.put("deptid", emp.getDeptid()); map.put("sal", emp.getSalary()); int no_of_records = getJdbcTemplate().update(SQL_ADD_EMPLOYEE, map); System.out.println("Total ”+ no_of_records+" records are updated...); } To access a record(EmployeeDao.java) public Employee getEmployeeById(int id) throws SQLException { String SQL_GET_EMPLOYEE_BY_ID = "SELECT empid, name, dept, sal FROM emp WHERE empid = :empId"; SqlParameterSource namedParameters = new MapSqlParameterSource("empId", Integer.valueOf(id)); Employee emp = getJdbcTemplate().queryForObject( SQL_GET_EMPLOYEE_BY_ID, namedParameters, new RowMapper<Employee>() { public Employee mapRow(ResultSet rs, int rowNum) throws SQLException, DataAccessException { Employee employee = new Employee(); employee.setEmpId(rs.getInt(1)); employee.setName(rs.getString(2)); employee.setDeptid(rs.getInt(3)); employee.setSalary(rs.getFloat(4)); return employee; } }); return emp; }
  • 27. org.springframework.jdbc.core.SimpleJdbcTemplate Simplifying in Java 5 With Java 5’s new language, constructs (known as varargs), it is possible to pass parameter lists without having to construct an array of Object. Let’s see the examples. From Spring 3.0 onwards, SimpleJdbcTemplate class is deprecated. So I am not putting any details of how to use SimpleJdbcTemplate with Spring. You can use JdbcTemplate instead of using SimpleJdbcTemplate.
  • 28. DAO Support class for different Templates Before going through the details on the DAO Support, we will brush-up using JDBCTemplate which we already have discussed under JdbcTemplate section covered under Different Template classes and their uses. So do you remember how we were configuring jdbcTemplate in the XML for this? Recall, Now you see the definition of MyJdbcTemplate used as ref with property jdbcTemplate So from both the bean entries we understand that EmployeeDao needs a property - jdbcTemplate and this is of type org.springframework.jdbc.core.JdbcTemplate. Hence we need to declare the property jdbcTemplate in the DAO class with setter and getter methods. Here in our example the DAO is org.santosh.dao.EmployeeDao. The class would look like:
  • 29. Now this is ok when you have only one DAO class, here it is only EmployeeDao.java. But this could be a burden to the programmer because • What if we have many DAO classes? • In every and each DAO, do we need to declare the field for jdbcTemplate and define the setter/getter methods for this field? Yes, of course it is burden to the programmer to define jdbcTemplate field in every DAO class with the setter and getter methods. So there is a good solutions provided by Spring framework, So you simply • Extend JdbcDaoSupport class when you use the template of type org.springframework.jdbc.core.JdbcTemplate • Extend NamedParameterJdbcDaoSupport when you use the template of type org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate • Extend SimpleJdbcDaoSupport when you use the template of type org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport • Extend HibernateDaoSupport when you use the template of type org.springframework.orm.hibernate3.HibernateTemplate (we will discussed in part-3 using Spring and hibernate)
  • 30. When you need to use the JdbcTemplate , 1) import org.springframework.jdbc.core.support.JdbcDaoSupport class 2) In DAO class, extend JdbcDaoSupport 3) Use getJdbcTemplate().<methods> to run the SQL Queries. 4) In XML, there should be the property with bean name “jdbcTemplate” but never declare the field for jdbcTemplate in DAO because it is already done in JdbcDaoSupport class. So the XML and the DAO class will look like: Ignore and don’t use this in any of your DAO class because you extends JdbcDaoSupport and so this class had already done this for you. Method getJdbcTemplate() is derived from JdbcDaoSupport class
  • 31. When you need to use the NamedParameterJdbcDaoSupport, 1) import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport class. 2) In DAO class, extend NamedParameterJdbcDaoSupport 3) Use getNamedParameterJdbcTemplate().<methods> to run the SQL Queries. 4) In XML, there should be the property with bean name “jdbcTemplate” but never declare the field for jdbcTemplate in DAO because it is already done in NamedParameterJdbcDaoSupport class. So the XML and the DAO class will look like: Ignore and don’t use this in any of your DAO class because you extends NamedParameterJdbcDaoSupport and so this class had already done this for you. Method getNamedParameterJdbcTemplate() is derived from NamedParameterJdbcDaoSupport class
  • 32. End of Part-2 In part – 1 we learned the basics of Spring. And in part-2 we saw how we can work with Databases in Spring. In further parts we will see,  Part – 3 : Spring and Hibernate at http://javacompanionbysantosh.blogspot.com/2011/10/spring-and-hibernate.html  Part – 4 : Spring - Managing Database Transactions at http://javacompanionbysantosh.blogspot.com/2011/10/managing-transactions-in-spring.html  Part – 5 : Spring - Security at http://javacompanionbysantosh.blogspot.com/2011/10/spring-security.html  Part – 6 : Spring AOP at http://javacompanionbysantosh.blogspot.com/2011/10/spring-aop.html  Part – 7 : Spring MVC at http://javacompanionbysantosh.blogspot.com/2011/10/spring-mvc.html
  • 33. Downloadable Links • Driver Based DataSource • JNDI Datasource • PooledDatasource • JdbcTemplate Example • NamedParameterJdbcTemplate • JDBCDaoSupport • NamedParameterJdbcDaoSupport
  • 34. Do you have Questions ? Please write to: santosh.bsil@yahoo.co.in