|
Make the Correct Data Classes in Your DAO Applications
by Keld H. Hansen
My two most recent articles, "Managing
DAO Transactions in Java" and "Using
DAOs in Apache Struts," described how to use transactions with the DAO
design pattern in simple Java applications. These articles identified several layers,
which are shown in this figure:
- Clients: These can be any Java module using business logicfor example, Struts Action classes.
-
- Transaction Handlers: These are the interface modules to the clients and the DAOs. They contain business logic and handle transactions (when needed).
- DAOs: This is the thin layer to the backend. A DAO's API must not reveal anything about how the backend actually works.
- Data: This shows the data being communicated between the layers. The format
and characteristics of this data is the subject of this article.
The roles of the transaction handlers and DAOs, which are very important for
the following discussion, are described in detail in the previously articles mentioned
above.
The DAO Layer
If your backend is a database system, a very simple DAO solution is to make a DAO for each table in the database. Each DAO will therefore need a bean with member variables that correspond 1-to-1 to the columns in a table. The names and types of the member variables do not have to be the same as the columnshowever, you should choose names and types that are useful for the Java application being built.
This article uses the name DAO bean for the data object used by the DAOs.
With this simple setup, it's actually possible to generate the part of the DAOs and all of their beans directly from the database table definitions. It's not too hard to code this yourself; most of the database information can be taken from the "metadata" available through the java.sql package.
Referring to the article "Using
DAOs in Apache Struts," assume you're working with a database table "DVD" with two varchar columns called id and title. Here's a bean that matches this table:
package dk.hansen;
public class DVD {
private String id;
private String title;
public DVD(String id, String title) {
setId(id);
setTitle(title);
}
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getTitle() {return title;}
public void setTitle(String title) {this.title = title;}
}
The DAO itself will typically have methods like those shown in Table 1:
| Name |
Purpose |
| void create(DVD dvd) |
Create a DVD in the database |
| DVD find(String id) |
Locate a DVD by its key |
| void update(DVD dvd) |
Update an existing DVD |
| void update(String id, String title) |
Update a specific DVD with a new title |
As you can see, the DVD bean is used as the transport class to and from the DAO layer. Note also that a method like update may have several forms, depending on the actual needs from the clients. Often, it's most convenient to give the complete DAO bean as an input to a method. But if you only need to change a few data values, then it's useful a method like the last one shown for update.
It's perfectly valid to use other beans for data transport. If a table contains many columns, you might want to have a "slimmer" bean carrying the most important information.
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|