Title: Hibernate
1Hibernate
2Hibernate
- Hibernate is a powerful, high performance
object/relational persistence and query service.
Hibernate lets you develop persistent classes
following object-oriented idiom - including
association, inheritance, polymorphism,
composition, and collections. Hibernate allows
you to express queries in its own portable SQL
extension (HQL), as well as in native SQL, or
with an object-oriented Criteria and Example API. - Unlike many other persistence solutions,
Hibernate does not hide the power of SQL from you
and guarantees that your investment in relational
technology and knowledge is as valid as always.
The LGPL open source license allows the use of
Hibernate and NHibernate in open source and
commercial projects.
3Java Persistence with Hibernate
- The Java Persistence API is the standard
object/relational mapping and persistence
management interface of the Java EE 5.0 platform.
As part of the EJB 3.0 specification effort, it
is supported by all major vendors of the Java
industry. - Hibernate implements the Java Persistence
object/relational mapping and persistence
management interfaces with the Hibernate
Annotations and Hibernate EntityManager modules,
on top of the mature and powerful Hibernate Core. - The Hibernate modules can be stacked and combined
as desired. You can use the Hibernate Java
Persistence provider in any environment, Java SE
5.0 or Java EE 5.0. The Hibernate Java
Persistence provider is fully certified and
passes the Sun TCK.
4Hibernate Annotations
- Project Lead Emmanuel BernardLatest release
3.4.0 GA (Changelog) (Road Map)Release date
20.08.2008Requirements Hibernate Core 3.3.x, JDK
5.0Hibernate, like all other object/relational
mapping tools, requires metadata that governs the
transformation of data from one representation to
the other (and vice versa). As an option, you can
now use JDK 5.0 annotations for object/relational
mapping with Hibernate 3.2. You can use
annotations in addition to or as a replacement of
XML mapping metadata. - The Hibernate Annotations package includes
- Standardized Java Persistence and EJB 3.0 (JSR
220) object/relational mapping annotations - Hibernate-specific extension annotations for
performance optimization and special mappings - You can use Hibernate extension annotations on
top of standardized Java Persistence annotations
to utilize all native Hibernate features.
5More jar file downloads
- You will need persistence and ejb jar files ejb,
persistence, jndi, geronimo-ejb, ejb3-persistence
and javaee. - Many Hibernate tutorials out there
- http//www.hibernate.org/hib_docs/reference/en/htm
l/tutorial.html - http//www.roseindia.net/hibernate/index.shtml
- http//www.hibernate.org/hib_docs/reference/en/htm
l/tutorial-webapp.html - http//www.inf.ed.ac.uk/teaching/courses/ec/handou
ts/quickstart.pdf
6Hibernate tutorials
- Various modified/new tutorials appear here. I
used mysql, but that is not a requirement. - Hibernate standardizes the db interface. A config
file specifies the actual db service and the
dialect to use, and other config files, called
hbm, map the individual tables. Instead of
provider-specific connection and query details,
the program uses the hibernate interface to
interact with the database.
7A hibernate app (not a web app!)
- Will consist of
- one or more classes (POJOs) to be populated
from/copied to database tables. - A mapping file for each named classname.hbm.xml
mapping each to the database table it corresponds
to - Configuration files as needed for log4j and
hibernate especially hibernate.cfg.xml - A controller class
- And so on
8First hibernate tutorial
- Using hibernate with a mysql database and a few
simple java classes. - Link for tutorial http//www.hibernate.org/hib_do
cs/reference/en/html/tutorial-firstapp.html - This tutorial has many omissions, most notably
library jar files needed. I also had to modify
some classes (HibernateUtil). - It does come with an ant build
9Directory structure
- Appdir
- bin
- src
- log4j.properties
- hibernate.cfg.xml
- Event.hbm.xml
- hibernate.properties --- not included in this
example - events(dir)
- Event.java
- util(dir)
- EventManager.java
- HibernateUtil.java
- lib
10Notes about lib
- Youll need
- Hibernate
- Cp30
- Antlr
- Jta
- Dom4j
- Commons logging
- Just 2 files from slf4jnote screen shot
11My lib directory
12build.xml
- ltproject name"hibernate-tutorial"
default"compile"gt - ltproperty name"sourcedir" value"basedir/s
rc"/gt - ltproperty name"targetdir" value"basedir/b
in"/gt - ltproperty name"librarydir"
value"basedir/lib"/gt - ltpath id"libraries"gt
- ltfileset dir"librarydir"gt
- ltinclude name".jar"/gt
- lt/filesetgt
- lt/pathgt
- lttarget name"clean"gt
- ltdelete dir"targetdir"/gt
- ltmkdir dir"targetdir"/gt
- lt/targetgt
- lttarget name"compile" depends"clean,
copy-resources"gt - ltjavac srcdir"sourcedir"
- destdir"targetdir"
- classpathref"libraries"/gt
- lt/targetgt
- lttarget name"copy-resources"gt
13HibernateUtil.java
- This class gets the hibernate session factory or
throws an exception - With minor variations it appears in many
hibernate applications
14HibernateUtil.java
- package util
- import org.hibernate.
- import org.hibernate.cfg.
- public class HibernateUtil
- private static final SessionFactory
sessionFactory - static
- try
- System.out.println("in try for build session
factory") - // Create the SessionFactory from
hibernate.cfg.xml - sessionFactory new
Configuration().configure().buildSessionFactory()
- System.out.println("back from build
session factory") - catch (Throwable ex)
- // Make sure you log the exception,
as it might be swallowed - System.err.println("Initial
SessionFactory creation failed." ex) - System.out.println("Initial
SessionFactory creation failed." ex) - throw new ExceptionInInitializerError(
ex) -
-
- public static SessionFactory
getSessionFactory()
15EventManager.java (also in slide notes) a
controller class for handling events
- package events
- import org.hibernate.
- import org.hibernate.cfg.
- import java.util.Date
- import java.util.
- import util.HibernateUtil
- public class EventManager
- public static void main(String args)
//main - EventManager mgr new EventManager()
- System.out.println("Event Manager before if")
/////I stuck in all these
println - if (args0.equals("store")) //if?------A
store command - System.out.println("create and store")
- mgr.createAndStoreEvent("My Event", new
Date()) - //if
- else if (args0.equals("list")) //?------A
list command - System.out.println("list events")
- List events mgr.listEvents()
- for (int i 0 i lt events.size() i)
- Event theEvent (Event)
events.get(i)
16EventManager.java continued
- private List listEvents()
- System.out.println("Event Manager... in list
events method") - SessionFactory sessionFactory
HibernateUtil.getSessionFactory() - Session session sessionFactory.openSession()
- session.beginTransaction()
- List result session.createQuery("from
Event").list() - session.getTransaction().commit()
- return result
-
- private void createAndStoreEvent(String
title, Date theDate) - System.out.println("Event Manager... create and
store method") - SessionFactory sessionFactory
HibernateUtil.getSessionFactory() - Session session sessionFactory.openSession(
) - System.out.println(".. before begin
transaction") - session.beginTransaction()
- System.out.println(".. transaction started")
- Event theEvent new Event()
- theEvent.setTitle(title)
- theEvent.setDate(theDate)
17Event.java
- package events
- import java.util.Date
- public class Event
- private Long id
- private String title
- private Date date
- //Eclipse or Netbeans will build the rest
default constructor and getter/setters - public Event()
- public Long getId()
- return id
-
- private void setId(Long id)
- this.id id
-
- public Date getDate()
- return date
-
- public void setDate(Date date)
- this.date date
18Event.hbm.xml --such a file (and the
corresponding java class) is needed for each
table mappednote how primary key autoincrement
primary key appears
- lt?xml version"1.0"?gt
- lt!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD
3.0//EN" - "http//hibernate.sourceforge.net/hibernat
e-mapping-3.0.dtd"gt - lthibernate-mappinggt
- ltclass name"events.Event" table"EVENTS"gt
- ltid name"id" column"EVENT_ID"gt
- ltgenerator class"native"/gt
- lt/idgt
- ltproperty name"date" type"timestamp"
column"EVENT_DATE"/gt - ltproperty name"title"/gt
- lt/classgt
- lt/hibernate-mappinggt
19hibernate.cfg.xml contains connection info, db
name, user name pw and other information
- lt?xml version'1.0' encoding'utf-8'?gt
- lt!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD
3.0//EN" - "http//hibernate.sourceforge.net/hibernate-config
uration-3.0.dtd"gt - lthibernate-configurationgt
- ltsession-factorygt
- lt!-- Database connection settings --gt
- ltproperty name"connection.driver_class"gtcom.mysql
.jdbc.Driverlt/propertygt - ltproperty name"connection.url"gtjdbcmysql//local
host/mydblt/propertygt - ltproperty name"connection.username"gtrootlt/propert
ygt - ltproperty name"connection.password"gtlt/propertygt
- lt!-- JDBC connection pool (use the built-in) --gt
- ltproperty name"hibernate.connection.pool_size"
gt10lt/propertygt - lt!-- MySQL dialect//different for different
Database --gt - ltproperty name"dialect"gtorg.hibernate.dialect.MyS
QLDialectlt/propertygt - lt!-- Echo all executed SQL to stdout --gt
- ltproperty name"show_sql"gttruelt/propertygt
- ltproperty name"hbm2ddl.auto"gtupdatelt/propertygt
- ltmapping resource"Event.hbm.xml"/gt
20Log4j.properties
- log4j.appender.stdoutorg.apache.log4j.ConsoleAppe
nder - log4j.appender.stdout.TargetSystem.out
- log4j.appender.stdout.layoutorg.apache.log4j.Patt
ernLayout - log4j.appender.stdout.layout.ConversionPatternd
ABSOLUTE 5p c1L - mn - log4j.rootLoggerinfo, stdout
- log4j.logger.org.hibernate.testinfo
- log4j.logger.org.hibernate.tool.hbm2ddldebug
21remark
- Youll need to create a mysql database and table
for this example and you need to start the
database server before running the example. - Run the example in the root directory on the
commandline either with - ant run Dactionstore
- Or
- ant run Dactionlist
22First tutorialoutput for store
- C\hibernateexamplegtant run -Dactionstore
- Buildfile build.xml
- clean
- delete Deleting directory C\hibernateexample
\bin - mkdir Created dir C\hibernateexample\bin
- copy-resources
- copy Copying 6 files to C\hibernateexample
\bin - copy Copied 2 empty directories to 1 empty
directory under C\hibernateex - ample\bin
- compile
- javac Compiling 3 source files to
C\hibernateexample\bin - run
- java Event Manager before if
- java create and store
- java Event Manager... create and store
method
23Run list entirety in notes
- C\hibernateexamplegtant run -Dactionlist
- Buildfile build.xml
- clean
-
- copy-resources
-
- compile
- javac Compiling 3 source files to
C\hibernateexample\bin - run
- ltltleft out a lot of output heregtgtgtgt
- java 531 main INFO
org.hibernate.impl.SessionFactoryImpl - building
ses - sion factory
- java 719 main INFO org.hibernate.impl.Ses
sionFactoryObjectFactory - Not - binding factory to JNDI, no JNDI name configured
-
- title, event_date, event_id
- java 734 main INFO org.hibernate.tool.hbm
2ddl.TableMetadata - foreign k - eys
- java 734 main INFO org.hibernate.tool.hbm
2ddl.TableMetadata - indexes
24Redo with a GUIneeds some improvement
25notes
- First, of course, get the tutorial working.
- Modify the EventManager so it opens a JFrame with
two button, list and store. - Should have another button to delete from
db/table) - Display stored events in a textarea.
- Enter data for the event in a textfield.
- The tutorial code uses a timestamp, but maybe
something else like a string with MM/DD/YY format
would be nicer.
26So whats the point of hibernate?
- A uniform connection (the session thingy) and sql
dialect in your object. This doesnt change as
you port your application. - The hibernate.cfg.xml (NOT your java code) gets
modified if you port or change database servers.
27The hibernate webapp
- Recall a webapp consists of a servlet (class)
sitting in a fixed directory structure, with a
web.xml configuration file. - A webapp requires a container (Tomcat, Jetty,
JBoss,) to run it. - A server would typically include a (servlet)
container.
28Tomcat Web App Directory Structure
lib
29WEB-INF\web.xml
- lt?xml version"1.0" encoding"UTF-8"?gt
- ltweb-app version"2.4"
- xmlns"http//java.sun.com/xml/ns/j2ee"
- xmlnsxsi"http//www.w3.org/2001/XMLSchema-in
stance" - xsischemaLocation"http//java.sun.com/xml/ns
/j2ee http//java.sun.com/xml/ns/j2ee/web-app_2_4.
xsd"gt - ltservletgt
- ltservlet-namegtEvent Managerlt/servlet-namegt
- ltservlet-classgtevents.EventManagerServletlt
/servlet-classgt - lt/servletgt
- ltservlet-mappinggt
- ltservlet-namegtEvent Managerlt/servlet-namegt
- lturl-patterngt/eventmanagerlt/url-patterngt
- lt/servlet-mappinggt
- lt/web-appgt
30Where do files go? Shown in another slide but
note
- Hibernate.cfg goes in classes dir
- Event.hbm.xml goes into Events dir (I think) if
not, then into classes dir
31The 1-table hibernate web app
- Â Â Â http//www.hibernate.org/hib_docs/reference/en
/html/tutorial-webapp.html - This tutorial came from hibernate.org. I think it
is basically correct, although I made changes to
the servlet trying to fix unrelated problems. I
also used my own HibernateUtil class (shown in
previous tutorial). - Not very many details about the directory
structure were given in the tutorial, but I give
them here.
32Servlet running in tomcat
33Servlet entirety in slide notes
- package events
- import java.io.
- import java.net.
- import java.text.SimpleDateFormat
- import java.util.Date
- import java.util.Iterator
- import java.util.List
- import javax.servlet.
- import javax.servlet.http.
- import util.HibernateUtil
- import org.hibernate.
- public class EventManagerServlet extends
HttpServlet - SessionFactory sessionFactory
- Session session
34Servlet continued
- protected void processRequest(HttpServletRequest
request, HttpServletResponse response) - throws ServletException, IOException
- response.setContentType("text/htmlcharset
UTF-8") - SimpleDateFormat dateFormatter new
SimpleDateFormat("dd.MM.yyyy") - PrintWriter out response.getWriter()
- out.println("lthtmlgtltheadgtlttitlegtEvent
Managerlt/titlegtlt/headgtltbodygt") - try
- sessionFactory HibernateUtil.getSessionFactory()
- session sessionFactory.openSession()
- session.beginTransaction()
- if ("store".equals(request.getParameter("
action"))) - String eventTitle
request.getParameter("eventTitle") - String eventDate
request.getParameter("eventDate") - if ("".equals(eventTitle)
"".equals(eventDate)) - out.println("ltbgtltigtPlease
enter event title and date.lt/igtlt/bgt") - else
- System.out.println("before call to create and
store") - createAndStoreEvent(eventTitle
, dateFormatter.parse(eventDate)) - out.println("ltbgtltigtAdded
event.lt/igtlt/bgt")
35Servlet continued
- private void printEventForm(PrintWriter out)
- out.println("lth2gtAdd new eventlt/h2gt")
- out.println("ltformgt")
- out.println("Title ltinput
name'eventTitle' length'50'/gtltbr/gt") - out.println("Date (e.g. 24.12.2009)
ltinput name'eventDate' length'10'/gtltbr/gt") - out.println("ltinput type'submit'
name'action' value'store'/gt") - out.println("lt/formgt")
-
- private void listEvents(PrintWriter out,
SimpleDateFormat dateFormatter) - List result HibernateUtil.getSessionFact
ory().getCurrentSession().createCriteria(Event.cla
ss).list() - if (result.size() gt 0)
- out.println("lth2gtEvents in
databaselt/h2gt") - out.println("lttable border'1'gt")
- out.println("lttrgt")
- out.println("ltthgtEvent titlelt/thgt")
- out.println("ltthgtEvent datelt/thgt")
36Servlet continued
- protected void createAndStoreEvent(String title,
Date theDate) - Event theEvent new Event()
- theEvent.setTitle(title)
- theEvent.setDate(theDate)
- HibernateUtil.getSessionFactory().getCurre
ntSession().save(theEvent) -
- protected void doGet(HttpServletRequest
request, HttpServletResponse response) - throws ServletException, IOException
- processRequest(request, response)
-
- protected void doPost(HttpServletRequest
request, HttpServletResponse response) - throws ServletException, IOException
- processRequest(request, response)
-
-
37Boldfaced line added to cfg
- lt?xml version'1.0' encoding'utf-8'?gt
- lt!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD
3.0//EN" - "http//hibernate.sourceforge.net/hibernate-config
uration-3.0.dtd"gt - lthibernate-configurationgt
- ltsession-factorygt
- lt!-- Database connection settings --gt
- ltproperty name"connection.driver_class"gtcom.mysql
.jdbc.Driverlt/propertygt - ltproperty name"connection.url"gtjdbcmysql//local
host/mydblt/propertygt - ltproperty name"connection.username"gtrootlt/propert
ygt - ltproperty name"connection.password"gtlt/propertygt
- lt!-- JDBC connection pool (use the built-in) --gt
- ltproperty name"hibernate.connection.pool_size"
gt10lt/propertygt - lt!-- MySQL dialect//different for different
Database --gt - ltproperty name"dialect"gtorg.hibernate.dialect.MyS
QLDialectlt/propertygt - lt!-- Echo all executed SQL to stdout --gt
- ltproperty name"show_sql"gttruelt/propertygt
- ltproperty name"hbm2ddl.auto"gtupdatelt/propertygt
- ltproperty name"current_session_context_class"gtthr
eadlt/propertygt
38build.xml (an app located at c\myapp would have
a war called C\myapp.war)
- ltproject name"hibernate-tutorial"
default"compile"gt - ltproperty name"sourcedir" value"basedir/s
rc"/gt - ltproperty name"targetdir" value"basedir/b
in"/gt - ltproperty name"librarydir"
value"basedir/lib"/gt - ltpath id"libraries"gt
- ltfileset dir"librarydir"gt
- ltinclude name".jar"/gt
- lt/filesetgt
- lt/pathgt
- lttarget name"clean"gt
- ltdelete dir"targetdir"/gt
- ltmkdir dir"targetdir"/gt
- lt/targetgt
- lttarget name"compile" depends"clean,
copy-resources"gt - ltjavac srcdir"sourcedir"
- destdir"targetdir"
- classpathref"libraries"/gt
- lt/targetgt
- lttarget name"copy-resources"gt
39Build.xml continued
- lttarget name"run" depends"compile"gt
- ltjava fork"true" classname"events.EventManag
er2" classpathref"libraries"gt - ltclasspath path"targetdir"/gt
- ltarg value"action"/gt
- lt/javagt
- lt/targetgt
- lttarget name"war" depends"compile"gt
- ltwar destfile"hibernate-tutorial.war"
webxml"web.xml"gt - ltlib dir"librarydir"gt
- ltexclude name"jsdk.jar"/gt
- lt/libgt
- ltclasses dir"targetdir"/gt
- lt/wargt
- lt/targetgt
- lt/projectgt
40Package things in WEB-INF as shown here
- WEB-INF
- classes (dir)
- events(dir)
- Event.class (no changes to this file)
- EventManagerServlet.class
- Event.hbm.xml (no changes to this file)
- util(dir)
- HibernateUtil.class (this file same as in
previous project) - Hibernate.cfg.xml
- lib(dir) (no changes to this)
- log4j.properties(no changes to this)
- web.xml (shown above)
41Jar
- I used jar instead of ant build
- jar cvf appname.war WEB-INF
- This creates a jar called appname.war with a dir
in it named WEB-INF and all WEB-INFs contents. - General syntax of jar is
- jar switch name-of.war list_of_files
list_of_dirs - Youll need to move files and directories as per
web app structure before creating a war file.
42Whats next?
- CRUD against a database using one or more
servlets, like your servlet database project,
except use a hibernate interface.
43Two examples multiple tables crud
- documentation http//www.hibernate.org/hib_docs/re
ference/en/html/
44(No Transcript)
45Adding to tables listing
- I modified a previous example, adding a people
table and displaying contents of two tables. - I did not do a select, I just printed the event
title in the same position. But since the
numbers are allocated sequentially, I could have
used select title from Event where idnumber
46My tables
- My People table and my Event table both have ids
as primary key, auto-incremented. - In the hbm, these are identified as
- ltid namesome_field" columntable_col"gt
- ltgenerator class"native"/gt
- lt/idgt
47Dir structure
- WEB-INF
- log4j.properties
- web.xml
- lib (contents shown later)
- classes
- hibernate.cfg.xml
- util
- Same HibernateUtil.java as previous
- events
- Same Event.java as previous
- People.java
- EventManagerServlet.java
- People.hbm.xml
- Event.hbm.xml (unchanged from prev example)
48some of these may be unnecessary but I whittled
it down some
49Entire Servlet in notes
- package events
- import java.io.
- import java.net.
- import java.text.SimpleDateFormat
- import java.util.Date
- import java.util.Iterator
- import java.util.List
- import javax.servlet.
- import javax.servlet.http.
- import util.HibernateUtil
- import org.hibernate.
- public class EventManagerServlet extends
HttpServlet - SessionFactory sessionFactory
- List result1,result2
- Session session
- protected void processRequest(HttpServletReque
st request, HttpServletResponse response) - throws ServletException, IOException
- response.setContentType("text/htmlcharset
UTF-8")
50Servletprint form, get session
- // Handle actions
- if ("store".equals(request.getParameter
("action"))) - String eventTitle
request.getParameter("eventTitle") - String eventDate
request.getParameter("eventDate") - String name request.getParameter("name")
- String phone request.getParameter("phone")
- if ("".equals(eventTitle)
"".equals(eventDate)name.equals("")phone.equal
s("")) - out.println("ltbgtltigtPlease
enter person, event title and date.lt/igtlt/bgt") - else
- System.out.println("before call to create
and store") - createAndStoreEvent(name,
phone,eventTitle, dateFormatter.parse(eventDate))
- out.println("ltbgtltigtAdded
event.lt/igtlt/bgt") -
-
- // Print page
51Servlet the form and table of events
- private void printEventForm(PrintWriter out)
- out.println("lth2gtAdd new eventlt/h2gt")
- out.println("ltformgt")
- out.println("Title ltinput
name'eventTitle' length'50'/gtltbr/gt") - out.println("Date (e.g. 24.12.2009)
ltinput name'eventDate' length'10'/gtltbr/gt") - out.println("Contact person ltinput
name'name' length'50'/gtltbr/gt") - out.println("Phone(e.g. (123) 432-1111
ltinput name'phone' length'50'/gtltbr/gt") - out.println("ltinput type'submit'
name'action' value'store'/gt") - out.println("lt/formgt")
-
- private void listEvents(PrintWriter out,
SimpleDateFormat dateFormatter) - result1 session.createCriteria(Event.class).l
ist() - if (result1.size() gt 0)
- out.println("lth2gtEvent Info in
databaselt/h2gt") - out.println("lttable border'1'gt")
- out.println("lttrgt")
52Servlet list table of people
- int num0
- result2 session.createCriteria(People.clas
s).list() - if (result2.size() gt 0)
- out.println("lth2gtPeople Info in
databaselt/h2gt") - out.println("lttable border'1'gt")
- out.println("lttrgt")
- out.println("ltthgtPersonlt/thgt")
- out.println("ltthgtPhonelt/thgt")
- out.println("ltthgtEvent
coordinatinglt/thgt") - out.println("lt/trgt")
- String unknown"unknown"
- for (Iterator it
result2.iterator() it.hasNext()) - People person(People)it.next()
- out.println("lttrgt")
- out.println("lttdgt"
person.getName() "lt/tdgt") - out.println("lttdgt"
person.getPhone() "lt/tdgt") - out.println("lttdgt" ((Event)result1.get(num)).get
Title() "lt/tdgt") - num
53Create and store
- protected void createAndStoreEvent(String
name,String phone,String title, Date theDate) - System.out.println("in create and store
method") - Event theEvent new Event()
- People personnew People()
- theEvent.setTitle(title)
- theEvent.setDate(theDate)
- person.setName(name)
- person.setPhone(phone)
- System.out.println("about to get current
session and save event") - session.save(theEvent)
- System.out.println("about to get current
session and save person") - session.save(person)
- System.out.println("done with saves")
-
- protected void doGet(HttpServletRequest
request, HttpServletResponse response) - throws ServletException, IOException
- System.out.println("in do get")
54events.People.java
- public class People
- private String name
- private String phone
- private long id
- public People()
- public long getId()return id
- public void setId(long id)this.idid
- public String getName()
- return name
-
- public void setName(String name)
- this.name name
-
- public String getPhone()
55The primary key may be generated, native or
assigned. The strategy must be specified in the
hbm.xml. This is People.hbm.xml
- lt?xml version"1.0"?gt
- lt!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD
3.0//EN" - "http//hibernate.sourceforge.net/hibernat
e-mapping-3.0.dtd"gt - lthibernate-mappinggt
- ltclass name"events.People" table"people"gt
- ltid name"id" column"id"gt
- ltgenerator class"native"/gt
- lt/idgt
- ltproperty name"name"/gt
- ltproperty name"phone"/gt
- lt/classgt
- lt/hibernate-mappinggt
56Same hibernate.cfg.xml except People table has
been added.
- lt?xml version'1.0' encoding'utf-8'?gt
- lt!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD
3.0//EN" - "http//hibernate.sourceforge.net/hibernate-config
uration-3.0.dtd"gt - lthibernate-configurationgt
- ltsession-factorygt
- lt!-- Database connection settings --gt
- ltproperty name"connection.driver_class"gtcom.mysql
.jdbc.Driverlt/propertygt - ltproperty name"connection.url"gtjdbcmysql//local
host/mydblt/propertygt - ltproperty name"connection.username"gtrootlt/propert
ygt - ltproperty name"connection.password"gtlt/propertygt
- lt!-- JDBC connection pool (use the built-in) --gt
- ltproperty name"hibernate.connection.pool_size"
gt10lt/propertygt - lt!-- MySQL dialect//different for different
Database --gt - ltproperty name"dialect"gtorg.hibernate.dialect.MyS
QLDialectlt/propertygt - ltproperty name"cache.provider_class"gtorg.hibernat
e.cache.NoCacheProviderlt/propertygt - lt!-- Echo all executed SQL to stdout --gt
- lt!-- Echo all executed SQL to stdout --gt
- ltproperty name"show_sql"gttruelt/propertygt
57ant build still needs to be modified to build
WEB-INF and classes dirs, and copy files to
there, then jar
- ltproject name"hibernate-tutorial"
default"compile"gt - ltproperty name"sourcedir" value"basedir/s
rc"/gt - ltproperty name"targetdir" value"basedir/b
in"/gt - ltproperty name"librarydir"
value"basedir/lib"/gt - ltpath id"libraries"gt
- ltfileset dir"librarydir"gt
- ltinclude name".jar"/gt
- lt/filesetgt
- lt/pathgt
- lttarget name"clean"gt
- ltdelete dir"targetdir"/gt
- ltmkdir dir"targetdir"/gt
- lt/targetgt
- lttarget name"compile" depends"clean,
copy-resources"gt - ltjavac srcdir"sourcedir"
- destdir"targetdir"
- classpathref"libraries"/gt
- lt/targetgt
- lttarget name"copy-resources"gt
58CRUD example
59Hibernate student info servlet
60remarks
- Just one table marked
- Link above gives good information on how to
conduct queries. - I used radiobuttons to indicate function desired.
- I used the same ant/build and jar commands as
before. - Same directory structure.
- Servlet in slide notes
61Student.hbm.xml
- lt?xml version"1.0"?gt
- lt!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD
3.0//EN" - "http//hibernate.sourceforge.net/hibernat
e-mapping-3.0.dtd"gt - lthibernate-mappinggt
- ltclass name"data.Student" table"Students"gt
- ltid name"id" column"id"gt
- ltgenerator class"native"/gt
- lt/idgt
- ltproperty name"name"/gt
- ltproperty name"age"/gt
- ltproperty name"gpa"/gt
- ltproperty name"sex"/gt
- ltproperty name"year"/gt
-
- lt/classgt
62Some bits of the servlet
- try
- // Begin unit of work
- // HibernateUtil.getSessionFactory().ge
tCurrentSession().beginTransaction() - sessionFactory HibernateUtil.getSess
ionFactory() - session sessionFactory.openSession()
- session.beginTransaction()
- if ("store".equals(request.getParameter
("action"))) - String name request.getParameter
("name") - String gpa request.getParameter(
"gpa") - String year request.getParameter("year")
- String age request.getParameter("age")
- String sex request.getParameter("sex")
- if ("".equals(name)
"".equals(sex)year.equals("")gpa.equals("")a
ge.equals("")) - out.println("ltbgtltigtPlease
enter name, age, sex, gpa, year and
sex.lt/igtlt/bgt") - else
- System.out.println("before call to create and
store") - createAndStoreEvent(name,
age,year,sex,gpa) - out.println("ltbgtltigtAdded
event.lt/igtlt/bgt") - else if ("list".equals(request.getParam
eter("action")))
63Delete action
- else if ("delete".equals(request.getParameter("ac
tion"))) - String name request.getParameter("name")
- List markedsession.createQuery("from Student as
student where student.name?").setString(0,name).l
ist() - if(marked.size()gt0)
- Student student(Student)marked.get(0)
- out.println("deleting...." student.getName())
- session.delete(student)
-
- else out.println("no match found")
64- else//update
- String name request.getParameter("name")
- String gpa request.getParameter("g
pa") - String year request.getParameter("year")
- String age request.getParameter("age")
- String sex request.getParameter("sex")
- List markedsession.createQuery("from Student as
student where student.name?").setString(0,name).l
ist() - if(marked.size()gt0!"".equals(sex)!year.equal
s("")!gpa.equals("")!age.equals("")) - Student student(Student)marked.get(0)
- student.setAge(Integer.parseInt(age))
- student.setYear(year)
- student.setGpa(Double.parseDouble(gpa))
- student.setSex(sex)
- session.update(student)
-
- else out.println("no match found")
-
- /else a getinfo choice could look about the
same
65I used radiobuttons
- private void printStudentForm(PrintWriter out)
- out.println("lth2gtStudent info
formlt/h2gt") - out.println("ltformgt")
- out.println("Name ltinput name'name'
length'40'/gtltbr/gt") - out.println("Age ltinput name'age'
length'10'/gtltbr/gt") - out.println("Sex(Male/Female) ltinput
name'sex' length'10'/gtltbr/gt") - out.println("Year ltinput name'year'
length'15'/gtltbr/gt") - out.println("GPA ltinput name'gpa'
length'10'/gtltbr/gt") - out.println("ltinput type'radio'
name'action' value'list'gt Listltbrgt") - out.println(" ltinput type'radio'
name'action' value'store' checkedgt Storeltbrgt") - out.println("ltinput type'radio'
name'action' value'update'gt Updateltbrgt") - out.println(" ltinput type'radio'
name'action' value'delete'gt Deleteltbrgt") - out.println("ltinput type'submit' /gt")
- out.println("lt/formgt")
-
66List students
- private void listStudents(PrintWriter out)
- result1 session.createCriteria(Student.class)
.list() - if (result1.size() gt 0)
- out.println("lth2gtStudent
Infolt/h2gt") - out.println("lttable border'1'gt")
- out.println("lttrgt")
- out.println("ltthgtStudent namelt/thgt")
- out.println("ltthgtStudent Agelt/thgt")
- out.println("ltthgtGPAlt/thgt")
- out.println("ltthgtSexlt/thgt")
- out.println("ltthgtYearlt/thgt")
- out.println("lt/trgt")
- for (Iterator it result1.iterator()
it.hasNext()) - Student student (Student)
it.next() - out.println("lttrgt")
67Hibernate configuration
- lt?xml version'1.0' encoding'utf-8'?gt
- lt!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD
3.0//EN" - "http//hibernate.sourceforge.net/hibernate-config
uration-3.0.dtd"gt - lthibernate-configurationgt
- ltsession-factorygt
- lt!-- Database connection settings --gt
- ltproperty name"connection.driver_class"gtcom.mysql
.jdbc.Driverlt/propertygt - ltproperty name"connection.url"gtjdbcmysql//local
host/mydblt/propertygt - ltproperty name"connection.username"gtrootlt/propert
ygt - ltproperty name"connection.password"gtlt/propertygt
- lt!-- JDBC connection pool (use the built-in) --gt
- ltproperty name"hibernate.connection.pool_size"
gt10lt/propertygt - lt!-- MySQL dialect//different for different
Database --gt - ltproperty name"dialect"gtorg.hibernate.dialect.MyS
QLDialectlt/propertygt - lt!-- Echo all executed SQL to stdout --gt
- ltproperty name"show_sql"gttruelt/propertygt
- ltproperty name"hbm2ddl.auto"gtupdatelt/propertygt
- ltmapping resource"Student.hbm.xml"/gt
68web-xml
- lt?xml version"1.0" encoding"UTF-8"?gt
- ltweb-app version"2.4"
- xmlns"http//java.sun.com/xml/ns/j2ee"
- xmlnsxsi"http//www.w3.org/2001/XMLSchema-in
stance" - xsischemaLocation"http//java.sun.com/xml/ns
/j2ee http//java.sun.com/xml/ns/j2ee/web-app_2_4.
xsd"gt - ltservletgt
- ltservlet-namegtStudentInfolt/servlet-namegt
- ltservlet-classgtdata.StudentInfoServletlt/se
rvlet-classgt - lt/servletgt
- ltservlet-mappinggt
- ltservlet-namegtStudentInfolt/servlet-namegt
- lturl-patterngt/studentinfolt/url-patterngt
- lt/servlet-mappinggt
- lt/web-appgt