About this Tutorial
This tutorial will show you how to create a new table in the database, and how the create Java code to access this table.
You will create an object and then some more classes to persist (save/retrieve/delete) that object from the database. In Java speak, this object is called a Plain Old Java Object (POJO). This object basically represents a database table. With AppFuse 1.x, you typically created a DAO and JUnit Test to persist this POJO. However, with AppFuse 2.x, there is a Generics-based DAO and Manager that will CRUD all objects for you. The only time you'll need to create DAOs is when you want custom behavior or if you need finders.
AppFuse uses Hibernate for its default persistence layer. Hibernate is an Object/Relational (O/R) Framework that allows you to relate your Java Objects to database tables. It allows you to very easily perform CRUD (Create, Retrieve, Update, Delete) on your objects.
|iBATIS and JPA|
To get started creating a new Object and table in AppFuse's project structure, please complete the instructions below.
Table of Contents
Create a new POJO and add JPA Annotations
The first thing you need to do is create an object to persist. Create a simple "Person" object (in the
src/main/java/**/model directory) that has an id, a firstName and a lastName (as properties). For recommend package-naming conventions, see the FAQ. These tutorials use
org.appfuse.tutorial as the root package name.
Extending BaseObject is optional, but recommended as a good practice to force creation of
hashCode() methods, you can use Commonclipse. More information on using this tool can be found on Lee Grey's site. Another Eclipse Plugin you can use is Commons4E. When generating or writing
hashCode() methods, you don't want to include your object's primary key. See Hibernate's Equals and Hascode for more information.
Now that you have this POJO created, you need to add JPA annotations. These annotations are used by Hibernate to map objects → tables and properties (variables) → columns.
First of all, add an
@Entity annotation that signifies what table this object relates to. The "name" is optional; the class name is used if it's not specified. Make sure you import annotations from
javax.persistence.* rather than from Hibernate.
You also have to add an
@Id annotation to signify the primary key. The
@GeneratedValue annotation should also be specified to indicate the primary key generation strategy.
For the rest of the fields, you aren't required to annotate them unless you want to 1) exclude them from being persisted (with
@Transient) or 2) want to change their column name or other attributes. To change the column names, use the
@Column annotation. For example:
|Annotations on fields|
You can also put JPA annotations on fields instead of getters. However, you should be aware that if you add field-level annotations, method-level annotations will be ignored.
Create a new database table from the object using Maven
src/main/resources/hibernate.cfg.xml and register your Person object with the following XML:
Save the file and run mvn compile hibernate3:hbm2ddl from the command line. This will generate your database schema with the "person" table included.
|Changing the database name|
By default, the database is named "appfuse". To change it, modify the <jdbc.url> property in your project's pom.xml.
After you've created a POJO and generated a schema from it, how do you persist that object? AppFuse ships with GenericDao implementations that makes it possible CRUD any object. In addition to this Generics-based class, there is a UniversalDao that does the same thing. The major difference between the two is you'll need to cast to your specified type for the UniversalDao. However, it also doesn't require you to define any new Spring beans, so there's a benefits and drawbacks. For these tutorials, you will learn how to program using the GenericDao.
Please choose the persistence framework you'd like to use to continue:
If you don't know which is better for your project, please read Hibernate vs. iBATIS.