Pages

Tuesday, February 19, 2008

Integrating JasperReports with Hibernate

Please see http://jasperreports.sourceforge.net/ for JasperReports

Please see http://www.hibernate.org for Hibernate

We will make an sample jasperReport that uses the hibernate in populating its data.
we are going to build an sample JRXML template, will name it HibernateQueryDemoReport

-------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC ���"�//JasperReports//DTD Report Design//EN"
�"�http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="HibernateQueryDemoReport">
<parameter name="countryCode" class="java.lang.String"/>
<queryString language="hql">
<![CDATA[from Aircraft aircraft where country = $P{countryCode}
order by aircraft.id]]>
</queryString>
<field name="id" class="java.lang.String"/>
<field name="aircraftSerial" class="java.lang.String"/>
<field name="yearBuilt" class="java.lang.String"/>
<title>
<band height="30">
<textField>
<reportElement width="555" height="30" x="0" y="0"/>
<textFieldExpression>
<![CDATA[������� "�Aircraft Registered in Country Code: ""+
$P{countryCode}]]>
</textFieldExpression>
</textField>
</band>
</title>
<pageHeader>
<band height="30">
<staticText>
<reportElement width="100" height="30" x="0" y="0"/>
<text>
<![CDATA[Tail Number]]>
</text>
</staticText>
<staticText>
<reportElement width="100" height="30" x="100" y="0" />
<text>
<![CDATA[Serial Number]]>
</text>
</staticText>
<staticText>
<reportElement width="100" height="30" x="200" y="0"/>
<text>
<![CDATA[Year Built]]>
</text>
</staticText>
</band>
</pageHeader>
<detail>
<band height="30">
<textField>
<reportElement width="100" height="30" x="0" y="0"/>
Integrating hibernate with struts sample
<textFieldExpression>
<![CDATA[$F{id}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement width="100" height="30" x="100" y="0"/>
<textFieldExpression>
<![CDATA[$F{aircraftSerial}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement width="100" height="30" x="200" y="0"/>
<textFieldExpression>
<![CDATA[$F{yearBuilt}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>

-------------------------------------------------------
Take a look in the bold portion of the code snippet, the embedded report query was written in Hibernate Query Language(HQL).

The code for this Value Object is as follows:
-------------------------------------------------------
package net.ensode.jasperbook.dbaccess;
import net.ensode.jasperbook.dbaccess.base.BaseAircraft;

/**
*Aircraft.java
* @author amontejo
*/

public class Aircraft extends BaseAircraft
{
private static final long serialVersionUID = 1L;

public Aircraft()
{
super();
}
/**
* Constructor for primary key
*/
public Aircraft(java.lang.String id)
{
super(id);
}
/**
* Constructor for required fields
*/
public Aircraft(java.lang.String id, java.lang.String
aircraftSerial, java.lang.String aircraftModelCode,
java.lang.String aircraftEngineCode, java.lang.String
yearBuilt, java.lang.String aircraftTypeId, java.lang.String
aircraftEngineTypeId, java.lang.String registrantTypeId,
java.lang.String name, java.lang.String address1,
java.lang.String address2, java.lang.String city, java.lang
String state, java.lang.String zip, java.lang.String region,
java.lang.String county, java.lang.String country, java.lang
String certification, java.lang.String statusCode, java.lang
String modeSCode, java.lang.String fractOwner, java.util.Date
lastActionDate, java.util.Date certIssueDate, java.util.Date
airWorthDate)
{
super(id, aircraftSerial, aircraftModelCode, aircraftEngineCode,
yearBuilt, aircraftTypeId, aircraftEngineTypeId, registrantTypeId,
name, address1, address2, city, state, zip, region, county,
country, certification, statusCode, modeSCode, fractOwner,
lastActionDate, certIssueDate, airWorthDate);
}

}

-------------------------------------------------------
The class Aircraft extends a class called BaseAircraft, and its source code is as follows:
-------------------------------------------------------

package net.ensode.jasperbook.dbaccess.base;
import java.lang.Comparable;

/**
*BaseAircraft.java
* @author amontejo
*/

public abstract class BaseAircraft implements Comparable, Serializable
{
public static String REF = �"�Aircraft";
public static String PROP_AIRCRAFT_SERIAL = �"�AircraftSerial";
public static String PROP_AIRCRAFT_TYPE_ID = �"�AircraftTypeId";
public static String PROP_STATE = �"�State";
public static String PROP_REGISTRANT_TYPE_ID = �"�RegistrantTypeId";
public static String PROP_ADDRESS1 = �"�Address1";
//remaining property constants removed for brevity
//constructors
public BaseAircraft()
{
initialize();
}
/**
* Constructor for primary key
*/
public BaseAircraft(java.lang.String id)
{
this.setId(id);
initialize();
}
/**
* Constructor for required fields
*/
public BaseAircraft(java.lang.String id, java.lang.String
aircraftSerial, java.lang.String aircraftModelCode,
java.lang.String aircraftEngineCode, java.lang.String
yearBuilt, java.lang.String aircraftTypeId, java.lang.String
aircraftEngineTypeId, java.lang.String registrantTypeId,
java.lang.String name, java.lang.String address1, java.lang.
String address2, java.lang.String city, java.lang.String
state, java.lang.String zip, java.lang.String region, java.
lang.String county, java.lang.String country, java.lang.
String certification, java.lang.String statusCode, java.lang.
String modeSCode, java.lang.String fractOwner, java.util.Date
lastActionDate, java.util.Date certIssueDate, java.util.Date
airWorthDate)
{
this.setId(id);
this.setAircraftSerial(aircraftSerial);
this.setAircraftModelCode(aircraftModelCode);
this.setAircraftEngineCode(aircraftEngineCode);
this.setYearBuilt(yearBuilt);
this.setAircraftTypeId(aircraftTypeId);
this.setAircraftEngineTypeId(aircraftEngineTypeId);
this.setRegistrantTypeId(registrantTypeId);
this.setName(name);
this.setAddress1(address1);
this.setAddress2(address2);
this.setCity(city);
this.setState(state);
this.setZip(zip);
this.setRegion(region);
this.setCounty(county);
this.setCountry(country);
this.setCertification(certification);
this.setStatusCode(statusCode);
this.setModeSCode(modeSCode);
this.setFractOwner(fractOwner);
this.setLastActionDate(lastActionDate);
this.setCertIssueDate(certIssueDate);
this.setAirWorthDate(airWorthDate);
initialize();
}
protected void initialize()
{
}

private int hashCode = Integer.MIN_VALUE;
// primary key
private java.lang.String id;
// fields
private java.lang.String aircraftSerial;
private java.lang.String aircraftModelCode;
private java.lang.String aircraftEngineCode;
private java.lang.String yearBuilt;
private java.lang.String aircraftTypeId;
private java.lang.String aircraftEngineTypeId;
private java.lang.String registrantTypeId;
private java.lang.String name;
private java.lang.String address1;
private java.lang.String address2;
private java.lang.String city;
private java.lang.String state;
private java.lang.String zip;
private java.lang.String region;
private java.lang.String county;
private java.lang.String country;
private java.lang.String certification;
private java.lang.String statusCode;
private java.lang.String modeSCode;
private java.lang.String fractOwner;
private java.util.Date lastActionDate;
private java.util.Date certIssueDate;
private java.util.Date airWorthDate;
//Setters and getters omitted for brevity
public boolean equals(Object obj)
{
if (null == obj)
return false;
if (!(obj instanceof net.ensode.jasperbook.dbaccess.Aircraft))
return false;
else
{
net.ensode.jasperbook.dbaccess.Aircraft aircraft =
(net.ensode.jasperbook.dbaccess.Aircraft) obj;
if (null == this.getId() || null == aircraft.getId())
return false;
else
return (this.getId().equals(aircraft.getId()));
}
}
public int hashCode()
{
if (Integer.MIN_VALUE == this.hashCode)
{
if (null == this.getId())
return super.hashCode();
{
String hashStr = this.getClass().getName() + �"�:"
+ this.getId().hashCode();
this.hashCode = hashStr.hashCode();
}
}
return this.hashCode;
}
public int compareTo(Object obj)
{
if (obj.hashCode() > hashCode())
return 1;
else if (obj.hashCode()

< package="net.ensode.jasperbook.dbaccess">

-------------------------------------------------------
This XML file lets Hibernate know that the Aircraft class maps to the aircraft table, and also defines the mapping between the table's columns and the class fields.
Hibernate needs another XML configuration file, which allows it to know the database connection information and what XML files to use to map database tables to Java classes. This XML configuration file is called hibernate.cfg.xml.
-------------------------------------------------------

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"����-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"�http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>

<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/flightstats
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">password


<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">false

<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>
<mapping resource="Aircraft.hbm.xml" />
<mapping resource="AircraftEngines.hbm.xml"/>
<mapping resource="AircraftEngineTypes.hbm.xml"/>
<mapping resource="AircraftModels.hbm.xml"/>
<mapping resource="AircraftTypes.hbm.xml"/>
</session-factory>
</hibernate-configuration>

-------------------------------------------------------
Below the code fragment to illustrates how to fill a report using HQL as its
query language:
-------------------------------------------------------

package net.ensode.jasperbook;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.query.JRHibernateQueryExecuterFactory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
*HibernateQueryDemo.java
* @author amontejo
*/

public class HibernateQueryDemo
{
Session session;
SessionFactory sessionFactory;
public static void main(String[] args)
{

-------------------------------------------------------
Done, Pretty Straight forward right! ... enjoy.

No comments:

Post a Comment