spring db-access mod03

Post on 10-May-2015

1.259 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related