当前页面: 开发资料首页 → Eclipse 专题 → Eclipse快速上手Hibernate--5. 组件映射
摘要: Eclipse快速上手Hibernate--5. 组件映射
Person.java
/*
* Hibernate - 组件(Component)映射
* 创建日期 2005-4-10
* @author javamxj(分享java快乐)
* @link Blog: htpp://javamxj.mblogger.cn
* htpp://blog.csdn.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 = username;}
/**
* @hibernate.component
*/
public Address getAddress() {return address;}
public void setAddress(Address address) {this.address = address;}
}
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 ("居住在"+ country + city+"市"+ street+"区"
+"\n\t邮政编码: "+ zipCode);
}
}
Person.hbm.xml
<?xml version="1.0" encoding="GBK"?>
hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
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.
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.
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 )</td></tr>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.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
private static SessionFactory sessionFactory;
private static final ThreadLocal threadSession = new ThreadLocal();
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) threadSession.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) threadSession.get();
threadSession.set(null);
if (s != null) {
log.debug("###Closing Session of this thread. " + s);
s.close();
}
}
public static void beginTransaction() throws HibernateException {
Transaction tx = (Transaction) 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 {
Transaction tx = (Transaction) 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();
}
}
}
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.currentSession();
Person p = new Person();
p.setAddress(new Address("中国", "上海", "普陀", "200055"));
p.setUsername("JavaMXJ");
sess.save(p);
p = new Person();
p.setAddress(new Address("中国", "北京", "海淀", "100086"));
p.setUsername("张三");
sess.save(p);
List animals = sess.find("from " + Person.class.getName());
for (Iterator it = animals.iterator(); it.hasNext();) {
Person person = (Person) it.next();
System.out.println(person.getUsername() + ":" + person.getAddress());
}
HibernateUtil.closeSession();
}
}