Title: Database Access Using the Spring Framework
1Database Access Using the Spring Framework
- Ryan Breidenbach
- Countrywide Financial Corporation
2What this presentation will be
- Brief overview of wiring applications using
Spring - Using Springs JDBC framework
- Integrating Spring with Hibernate
- Springs transaction support
3What this presentation will not cover
- In-depth coverage of Spring
- Creating web applications using Spring
- How to use Hibernate
4Who am I
- Currently a Software Technical Specialist for
Countrywide - Developing Java applications for nearly seven
years, mostly at Michaels Stores - Co-author of Spring in Action with Craig Walls
5Overview of wiring with Spring
6Concerns when accessing database
- Managing transactions
- Managing resources
- Connection pooling
- Cleaning up resources
7Some typical JDBC code
8The problem with traditional JDBC code
- Its redundant
- It repeats itself quite a bit
- The exact same code appears in lots of places
- You find yourself doing the same things over and
over again - Its redundant
9The problem with redundant code
- Violates the DRY principle
- Maintenance nightmare since JDBC code is
inherently messy - JDBC code is critical, so it is important to get
it right, once
10Springs solution The Template Pattern
- Template Pattern Define the skeleton of an
algorithm in an operation, deferring some steps
to subclasses. Template Method lets subclasses
redefine certain steps of an algorithm without
changing the algorithm's structure. - Uses callbacks for implementation specific
tasks
11So what do this mean in a JDBC context?
Your code
DAO Template
- Prepare Resources
- Start Transaction
- Commit/Rollback
- Clean up resource
- Handle exceptions
12But before we get too far aheadlets see how we
- Obtain/create a DataSource
- Wire a DataSource to our XxxDao classes
13Working with DataSources
- Getting a DataSource from JNDI
- ltbean iddataSource
- classorg.springframework.jndi.JndiObjectFa
ctoryBeangt - ltproperty namejndiName
- valuejavacomp/env/jdbc/MyDataSource
Name/gt - lt/beangt
14Working with DataSources
- Creating a connection pool
- ltbean iddataSource classorg.apache.commons.db
cp.BasicDataSourcegt - ltproperty name"url valuejdbcmysql//localho
st/demo/gtgt - ltproperty name"driverClassName
valuecom.mysql.jdbc.Driver/gt - ltproperty name"username valuetest/gt
- ltproperty namepassword valuepassword/gt
- lt/beangt
15Working with DataSources
16Overview of Spring JDBC features
- As mentioned, provides framework so that Spring
manages - Resources
- Transactions
- Exceptions
- Consistent exception hierarchy
- Subclass RuntimeException
- Specific and meaningful (no vendor error codes!)
- Extensable
17Some Spring JDBC callback interfaces
- PreparedStatementCreator
- Has one method createPreparedStatement(Connectio
n) - Responsible for creating a PreparedStatement
- Does not need to handle SQLExceptions
18Some Spring JDBC callback interfaces
- SQLProvider
- Has one method getSql()
- Typically implemented by PreparedStatementCreator
implementers - Useful for debugging
19Some Spring JDBC callback interfaces
- RowCallbackHandler
- Has one method processRow(ResultSet)
- Called for each row in ResultSet
- Typically stateful
20Some Spring JDBC callback interfaces
- RowMapper
- Has one method mapRow(ResultSet rs, int rowNum)
- Maps a single row to an Object
21Using JdbcTemplate
- Central class for Spring JDBC framework
- Uses callbacks under the covers
- All you will need for most JDBC operations
22Using JdbcTemplate
23Spring Incrementers
- Used to increment primary key value for newly
persisted object - Implements DataFieldMaxValueIncrementer
- Supports
- Oracle sequences
- DB2 sequences
- PostgreSQL sequences
- MySQL for non-auto-increment columns
24Using JdbcTemplate
25Hibernate intro
- Open source ORM tool
- Very mature (version 3.2 on horizon)
- Feature-complete
- Caching
- Eager-fetching
- Lazy-loading
- Proxying
26Using Hibernate
- Configure classes to be mapped through
- Manually created configuration files
- XDoclet generated configuration files
- Annotations (JPA and Hibernate)
- Configure global properties through
hibernate.properties file - Hibernate class analogies
- DataSource SessionFactory
- Connection Session
27Using Spring with Hibernate
- Use Spring to configure Hibernate
- Configure Hibernate mappings
- Configure Hibernate properties
- Wire dependant object to SessionFactory
- Use HibernateTemplate as abstraction to Hibernate
API - Manages obtaining Session from SessionFactory
- Handles/converts exceptions
- Manages transactions
28Using JdbcTemplate
29Spring Transaction Management
- Supports programmatic (yuck!) and declarative
(yeah!) transactions - Declarative transaction management achieved via
Springs AOP - Declarative transactions can be defined in Spring
configuration file or in annotations - Supports many transaction properties
- Propagation
- Isolation level
- Rollback conditions
30Spring Proxy Overview
depends on
is wired
delegates
31Using JdbcTemplate
32Coming in Spring 2.0
- Support for AspectJ pointcut language
- JPA support?
- SimpleJdbcTemplate
- Support generics
- Support variable argument methods
33Questions Answers
- ryan_breidenbach_at_yahoo.com