This article is primarily to be a component mapped in Hibernate, and you can refer to Chapter 7 of Hibernate official documentation. As for environmental settings, you can refer to the previous article.
Create a project
· New Java project: ComponentMapping, pay attention to "Create a separate source folder and output folder" while adding "user library": hibernate.
2. Write a class file
· Create a category, package name: javamxj.hibernate.component, class name: Person.
Person.java
/ *
* Hibernate - Component mapping
* Create a date 2005-4-10
* @author javamxj (sharing java happiness)
* @Link Blog: htpp: //javamxj.mblogger.cn
* htpp: //blog.9cbs.net/javamxj/
* /
Package javamxj.hibernate.component;
/ **
* @ hibernate.class
* /
Public class person {
Private long id;
PRIVATE STRING UserName;
Private address address;
/ **
* @ hibernate.id
* generator-class = "hilo"
* Unsaved-value = "null"
* /
Public long getId () {return id;}
Public void setid (long id) {this.id = id;}
/ **
* @ hibernate.property
* Length = "15"
* unique = "true"
* not-null = "true"
* /
Public string getUsername () {return username;}
Public void setusername (string username) {this.username = usrname;}
/ **
* @ hibernate.component
* /
Public Address getaddress () {return address;}
Public void setaddress (address address) {this.address = address;}
}
• The Person class calls the Address class, pay attention to the "@ hibernate.component" tag on the "GetDress ()" method.
• The Address class only contains some "@ hibernate.property" tags, and does not map its independent map into a table.
Address.java
Package javamxj.hibernate.component;
Public class address {
PRIVATE STRING Country;
PRIVATE STRING CITY;
PRIVATE STRING STREET;
PRIVATE STRING ZIPCODE;
Public address () {}
Public Address (String Country, String City, String Street, String Zipcode) {
Super ();
THIS.COUNTRY = Country; this.city = city;
THIS.STREET = STREET;
THIS.ZIPCODE = ZIPCODE;
}
/ **
* @ hibernate.property
* Length = "12"
* /
PUBLIC STRING GETCITY () {Return City;}
Public void setcity (string city) {this.city = city;}
/ **
* @ hibernate.property
* Length = "12"
* /
Public string getCountry () {return country;}
Public void setcountry (string country) {this.country = country;}
/ **
* @ hibernate.property
* Length = "6"
* /
Public String getzipcode () {return zipcode;}
Public void setzipcode (string number) {this.zipcode = Number;}
/ **
* @ hibernate.property
* Length = "12"
* /
Public string getStreet () {return street;}
Public void setstreet (string street) {this.street = street;
Public string toString () {
Return ("live in" country city "city" street "district"
"/ N / t Postal Code:" Zipcode);
}
}
3. Run the task
· Copy "
Eclipse quickly rapidly hibernate - 4. Inherited the build.xml in the article (1) "in the project directory.
· Double-click the "Generate-HBM" task, will find more animal.hbm.xml files in the package, there will be more hibernate.cfg.xml files in the src directory. If not, press the F5 button to refresh.
Person.hbm.xml
XML Version = "1.0" encoding = "GBK"?>
"- // Hibernate / Hibernate mapping DTD 2.0 // en"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
> Name = "javamxj.hibernate.component.Person" Dynamic-update = "false" Dynamic-insert = "false" SELECT-Before-update = "false" Optimistic-Lock = "Version" > Name = "id" COLUMN = "ID" TYPE = "java.lang.long" Unsaved-value = "null" >
To Add Non xdoclet generator parameters, Create a file named Hibernate-generator-params-person.xml Containing the additional parameters and place it in your merge dir. -> generator> id> Name = "username" TYPE = "java.lang.string" Update = "true" INSERT = "True" Access = "Property" Column = "username" Length = "15" NOT-NULL = "True" Unique = "True" /> Name = "Address" Class = "javamxj.hibernate.component.address" > Name = "city" TYPE = "java.lang.string" Update = "true" INSERT = "True" Access = "Property" COLUMN = "city" LENGTH = "12" /> Name = "country" TYPE = "java.lang.string" Update = "true" INSERT = "True" Access = "Property" Column = "country" LENGTH = "12" /> Name = "zipcode" TYPE = "java.lang.string" Update = "true" INSERT = "True" Access = "Property" Column = "zipcode" Length = "6" /> Name = "street" TYPE = "java.lang.string" Update = "true" INSERT = "True" Access = "Property" COLUMN = "street" LENGTH = "12" /> component>
To Add Non XDoclet Property Mappings, Create A File Named Hibernate-Properties-Person.xml Containing The Additional Properties and Place It in Your Merge Dir .--> clas> hibernate-maping> · Run the MySQL server, then double-click the "SchemaExport" task, which will generate a "schema-export.sql" file in the project root directory. Schema-export.sql Drop Table if EXISTS PERSON DROP TABLE IF EXISTS HIBERNATE_UNIQUE_KEY CREATE TABLE PERSON ID Bigint NOT NULL, Username varchar (15) Not null unique, City varchar (12), Country varchar (12), Zipcode Varchar (6), Street varchar (12), Primary Key (ID) ) Create Table Hibernate_unique_Key Next_hi integer ) INSERT INTO Hibernate_unique_Key Values (0) · Switch to the database, it will find that the data table is automatically generated. 5. Test procedure ● This time is different from the previous example. This time you enable a hibernateutil assisted class to manage Hibernate's session. This test class is relatively simple, you can refer to Chapter 1 of Hibernate official documentation. · Create a new class, package name: javamxj.hibernate.util, class name: hibernateutil, code as follows: Hibernateutil.java Package javamxj.hibernate.util; Import org.apache.commons.logging.log; Import org.apache.commons.logging.logfactory; Import net.sf.hibernate.hibernateException; Import net.sf.hibernate.Session; Import Net.sf.hibActory; Import net.sf.hibernate.transaction; Import Net.sf.hibiBernate.cfg.configuration; Public class hibernateutil { Private static log log = logfactory.getlog (HibernateUtil.class); PRIVATE STATIC sessionFactory sessionFactory; Private static final threadlocal threadsession = new threeReadlocal (); Private static final threadlocal threadtransaction = new threadlocal (); Public static sessionFactory getsessionFactory () { IF (sessionFactory == NULL) { Try { // Create the sessionFactory SessionFactory = new configuration (). configure () .BUILDSessionFactory (); } catch (hibernateException ex) {ex.printstacktrace (); Throw New RuntimeException ("Configuration Problem:" ex.getMessage (), EX); } } Return sessionFactory; } Public static session currentsession () throws hibernateException { SESSION S = (session) threadsssion.get (); // Open a new session, if this thread HAS NONE YET IF (s == NULL) { S = getsessionFactory (). OpenSession (); Log.debug ("### Opening new session for this thread:" s); Threadsession.Set (s); } else { Log.debug ("### session was existed:" s); } Return S; } Public static void closesession () THROWS HibernateException { SESSION S = (session) threadsssion.get (); Threadsession.Set (null); IF (s! = null) { Log.debug ("### closing session of this thread." s); s.close (); } } Public static void based begentransaction () throws hibernateException { THREADTRANSACTION.GET (); Try { IF (tx == null) { TX = currentsession (). Begintransaction (); Log.debug ("### Starting New Database Transaction In this thread:" TX); ThreadTransaction.Set (TX); } else { Log.debug ("### TX WAS EXISTED:" TX); } } catch (hibernateException ex) { Throw EX; } } Public static void committransaction () throws hibernateException { THREADTRANSACTION.GET (); Try { IF (tx! = null &&! tx.wascommitted () &&! tx.wasrolledback ()) { Log.debug ("### committing database transaction of this thread."); TX.comMit (); } ThreadTransaction.Set (NULL); } catch (hibernateException ex) { RollbackTransaction (); Throw EX; } } Public static void rollbacktransaction () throws hibernateException {Transaction tx = (transaction) threadtransaction.get (); Try { ThreadTransaction.Set (NULL); IF (tx! = null &&! tx.wascommitted () &&! tx.wasrolledback ()) { Log.debug ("### Tyring to Rollback Database Transaction Of this Thread."); TX.rollback (); } } catch (hibernateException ex) { Throw EX; } finally { CloseSession (); } } } · Ok, then create a new ComponentDemo.java class under the package javamxj.hibernate.component. ComponentDemo.java Package javamxj.hibernate.component; Import java.util.iterator; Import java.util.list; Import javamxj.hibernate.util.hibernateUtil; Import net.sf.hibernate.hibernateException; Import net.sf.hibernate.Session; Public class componentdemo { Public static void main (String [] args) { Try { New componentDemo (); } catch (hibernateException he) { HE.PrintStackTrace (); } } Public ComponentDemo () throws hibernateException { Session sess = hibernateutil.currents; Person P = New Person (); P.Setaddress (New Address ("China", "Shanghai", "Putuo", "200055"); P.SetuserName ("javamxj"); sess.save (p); P = new person (); P.Setaddress (New Address ("China", "Beijing", "Haidian", "100086")); P.Setusername ("Zhang San"); sess.save (p); List animals = sess.find ("from" person.class.getname ()); ITERATOR IT = Animals.Item (); it.hasnext ();) { Person Person = (Person) IT.Next (); System.out.println (Person.getuserName () ":" person.getaddress ()); } Hibernateutil.closesis (); } } · Run this class, the console output is as follows: · At the same time, the following data is generated in the data sheet: · The final project structure is as follows: