Spring db-access mod03
-
Upload
guo-albert -
Category
Education
-
view
1.259 -
download
0
Transcript of Spring db-access mod03
Database Access Using the
Spring Framework
What this presentation will be
Brief overview of wiring applications using
Spring
Using Spring’s JDBC framework
Spring’s transaction support
What this presentation will not cover
In-depth coverage of Spring
Creating web applications using Spring
Overview of wiring with Spring
Discuss…
Concerns when accessing database
Managing transactions
Managing resources
Connection pooling
Cleaning up resources
Some typical JDBC code
Code Example
The problem with traditional JDBC code
It’s 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
It’s redundant
The 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
Spring’s 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
Your codeDAO Template
So what do this mean in a JDBC context?
1. Prepare Resources
2. Start Transaction
5. Commit/Rollback
6. Clean up resource
7. Handle exceptions
3. Execute Statement
4. Execute Statement
But before we get too far ahead…
…let’s see how we
Obtain/create a DataSource
Wire a DataSource to our XxxDao classes
Working with DataSources
Getting a DataSource from JNDI
<bean id=“dataSource”
class=“org.springframework.jndi.JndiObjectFactoryBean”>
<property name=“jndiName”
value=“java:comp/env/jdbc/MyDataSourceName”/>
</bean>
Working with DataSources
Creating a connection pool
<bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource”>
<property name="url“ value=“jdbc:mysql://localhost/demo”/>>
<property name="driverClassName“ value=“com.mysql.jdbc.Driver”/>
<property name="username” value=“test”/>
<property name=“password” value=“password”/>
</bean>
Working with DataSources
Code Example
Overview 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
Some Spring JDBC callback interfaces
PreparedStatementCreator
Has one method –createPreparedStatement(Connection)
Responsible for creating a PreparedStatement
Does not need to handle SQLExceptions
Some Spring JDBC callback interfaces
SQLProvider
Has one method – getSql()
Typically implemented by PreparedStatementCreator implementers
Useful for debugging
Some Spring JDBC callback interfaces
RowCallbackHandler
Has one method – processRow(ResultSet)
Called for each row in ResultSet
Typically stateful
Some Spring JDBC callback interfaces
RowMapper
Has one method – mapRow(ResultSet rs,
int rowNum)
Maps a single row to an Object
Using JdbcTemplate
Central class for Spring JDBC framework
Uses callbacks “under the covers”
All you will need for most JDBC operations
Using JdbcTemplate
Code Example
Spring 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
Using JdbcTemplate
Code Example
Hibernate intro
Open source ORM tool
Very mature (version 3.2 on horizon)
Feature-complete
Caching
Eager-fetching
Lazy-loading
Proxying
Using 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
Using 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
Using JdbcTemplate
Code Example
Spring Transaction Management
Supports programmatic (yuck!) and declarative
(yeah!) transactions
Declarative transaction management achieved via
Spring’s AOP
Declarative transactions can be defined in Spring
configuration file or in annotations
Supports many transaction properties
Propagation
Isolation level
Rollback conditions
Spring Proxy Overview
SomeClient DaoInterface
DaoImplProxyBeanis wired
depends on
delegates
Using JdbcTemplate
Code Example
Coming in Spring 2.0
Support for AspectJ pointcut language
JPA support?
SimpleJdbcTemplate
Support generics
Support variable argument methods