Java/Hibernate/Spring Hibernate
Содержание
Hibernate Spring Environment Setup
Hibernate Spring Hibernate Callback Demo
<source lang="java">
///////////////////////////////////////////////////////////////////////// import java.util.*; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.HibernateCallback; import java.sql.*; import org.hibernate.*; import org.hibernate.criterion.*; public class Main {
public static void main(String[] args) { HibernateUtil.setup("create table EVENTS ( uid int, name VARCHAR, start_Date date, duration int);"); // hibernate code start HibernateFactory.buildSessionFactory(); SessionFactory sessionFactory= HibernateFactory.getSessionFactory(); HibernateTemplate template= new HibernateTemplate(sessionFactory);
Event event1 = new Event("Event 1"); Event event2 = new Event("Event 2"); Event event3 = new Event("Event 3"); template.save(event1); template.save(event2); template.save(event3); List results = template.executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("from Event"); query.setMaxResults(2); return query.list(); } }); System.out.println(results.size()); HibernateUtil.checkData("select uid, name from events"); HibernateFactory.closeFactory(); // hibernate code end }
}
///////////////////////////////////////////////////////////////////////// <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="Event" table="events"> <id name="id" column="uid" type="long"> <generator class="increment"/> </id> <property name="name" type="string"/> <property name="startDate" column="start_date" type="date"/> <property name="duration" type="integer"/> </class>
</hibernate-mapping>
/////////////////////////////////////////////////////////////////////////
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import java.util.LinkedHashSet;
public class Event implements Serializable {
private Long id; private int duration; private String name; private Date startDate; public Event() { } public Event(String name) { this.name = name; } /** * @hibernate.id generator-class="native" column="uid" * @return */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @hibernate.property column="name" * @return */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.property column="start_date" * @return */ public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } /** * @hibernate.property column="duration" * @return */ public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; }
}
///////////////////////////////////////////////////////////////////////// /**
* Represents Exceptions thrown by the Data Access Layer. */
public class DataAccessLayerException extends RuntimeException {
public DataAccessLayerException() { } public DataAccessLayerException(String message) { super(message); } public DataAccessLayerException(Throwable cause) { super(cause); } public DataAccessLayerException(String message, Throwable cause) { super(message, cause); }
}
</source>
Hibernate Spring Hibernate Template Find
<source lang="java">
///////////////////////////////////////////////////////////////////////// import java.util.*; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.HibernateCallback; import org.hibernate.*; import org.hibernate.criterion.*; public class Main {
public static void main(String[] args) { HibernateUtil.setup("create table EVENTS ( uid int, name VARCHAR, start_Date date, duration int);"); // hibernate code start HibernateFactory.buildSessionFactory(); SessionFactory sessionFactory= HibernateFactory.getSessionFactory(); HibernateTemplate template= new HibernateTemplate(sessionFactory);
Event event1 = new Event(); event1.setName("Event 1"); Event event2 = new Event(); event2.setName("Event 2"); template.save(event1); template.save(event2); List events = (List) template.find("from Event"); System.out.println(events.size() >= 2); HibernateUtil.checkData("select uid, name from events"); HibernateFactory.closeFactory(); // hibernate code end }
}
///////////////////////////////////////////////////////////////////////// <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="Event" table="events"> <id name="id" column="uid" type="long"> <generator class="increment"/> </id> <property name="name" type="string"/> <property name="startDate" column="start_date" type="date"/> <property name="duration" type="integer"/> </class>
</hibernate-mapping>
/////////////////////////////////////////////////////////////////////////
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import java.util.LinkedHashSet;
public class Event implements Serializable {
private Long id; private int duration; private String name; private Date startDate; public Event() { } public Event(String name) { this.name = name; } /** * @hibernate.id generator-class="native" column="uid" * @return */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @hibernate.property column="name" * @return */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.property column="start_date" * @return */ public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } /** * @hibernate.property column="duration" * @return */ public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; }
}
///////////////////////////////////////////////////////////////////////// /**
* Represents Exceptions thrown by the Data Access Layer. */
public class DataAccessLayerException extends RuntimeException {
public DataAccessLayerException() { } public DataAccessLayerException(String message) { super(message); } public DataAccessLayerException(Throwable cause) { super(cause); } public DataAccessLayerException(String message, Throwable cause) { super(message, cause); }
}
///////////////////////////////////////////////////////////////////////// <?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="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:data/tutorial</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property> <mapping resource="Event.hbm.xml"/> </session-factory>
</hibernate-configuration>
/////////////////////////////////////////////////////////////////////////
</source>
Spring Dao Demo
<source lang="java">
///////////////////////////////////////////////////////////////////////// import java.util.*; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.hibernate.*; import org.hibernate.criterion.*; public class Main {
public static void main(String[] args) { HibernateUtil.setup("create table EVENTS ( uid int, name VARCHAR, start_Date date, duration int);"); // hibernate code start ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml"); EventSpringDao eventDao = (EventSpringDao) ctx.getBean("eventDao", EventSpringDao.class); Event event = new Event(); event.setName("Name"); eventDao.saveOrUpdate(event);
HibernateUtil.checkData("select uid, name from events"); eventDao.delete(event); // hibernate code end }
}
///////////////////////////////////////////////////////////////////////// import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import java.util.List; public abstract class AbstractSpringDao extends HibernateDaoSupport{
public AbstractSpringDao() { } protected void saveOrUpdate(Object obj) { getHibernateTemplate().saveOrUpdate(obj); } protected void delete(Object obj) { getHibernateTemplate().delete(obj); } protected Object find(Class clazz, Long id) { return getHibernateTemplate().load(clazz, id); } protected List findAll(Class clazz) { return getHibernateTemplate().find("from " + clazz.getName()); }
}
/////////////////////////////////////////////////////////////////////////
import java.util.List;
public class EventSpringDao extends AbstractSpringDao{
public EventSpringDao(){} public Event find(Long id){ return (Event) super.find(Event.class, id); } public void saveOrUpdate(Event event){ super.saveOrUpdate(event); } public void delete(Event event){ super.delete(event); } public List findAll(){ return super.findAll(Event.class); }
}
///////////////////////////////////////////////////////////////////////// <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="Event" table="events"> <id name="id" column="uid" type="long"> <generator class="increment"/> </id> <property name="name" type="string"/> <property name="startDate" column="start_date" type="date"/> <property name="duration" type="integer"/> </class>
</hibernate-mapping>
/////////////////////////////////////////////////////////////////////////
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import java.util.LinkedHashSet;
public class Event implements Serializable {
private Long id; private int duration; private String name; private Date startDate; public Event() { } public Event(String name) { this.name = name; } /** * @hibernate.id generator-class="native" column="uid" * @return */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @hibernate.property column="name" * @return */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.property column="start_date" * @return */ public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } /** * @hibernate.property column="duration" * @return */ public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; }
}
///////////////////////////////////////////////////////////////////////// /**
* Represents Exceptions thrown by the Data Access Layer. */
public class DataAccessLayerException extends RuntimeException {
public DataAccessLayerException() { } public DataAccessLayerException(String message) { super(message); } public DataAccessLayerException(Throwable cause) { super(cause); } public DataAccessLayerException(String message, Throwable cause) { super(message, cause); }
}
</source>
Spring Dao Injection
<source lang="java">
///////////////////////////////////////////////////////////////////////// import java.util.*; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.HibernateCallback; import java.sql.*; import org.hibernate.*; import org.hibernate.criterion.*; public class Main {
public static void main(String[] args) { HibernateUtil.setup("create table EVENTS ( uid int, name VARCHAR, start_Date date, duration int);"); // hibernate code start EventSpringDao eventDao = null; Event event = new Event(); event.setName("Name"); eventDao = DaoRegistry.getEventDao(); eventDao.saveOrUpdate(event); HibernateUtil.checkData("select uid, name from events"); // hibernate code end }
}
///////////////////////////////////////////////////////////////////////// import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.hibernate.SessionFactory; public class DaoRegistry {
private static ApplicationContext ctx; static { ctx = new ClassPathXmlApplicationContext("context.xml"); } /** * Private to make this a singleton. */ private DaoRegistry(){ } public static SessionFactory getSessionFactory(){ return (SessionFactory) ctx.getBean("factory", SessionFactory.class); } public static EventSpringDao getEventDao(){ return (EventSpringDao)ctx.getBean("eventDao", EventSpringDao.class); }
}
/////////////////////////////////////////////////////////////////////////
import java.util.List;
public class EventSpringDao extends AbstractSpringDao{
public EventSpringDao(){} public Event find(Long id){ return (Event) super.find(Event.class, id); } public void saveOrUpdate(Event event){ super.saveOrUpdate(event); } public void delete(Event event){ super.delete(event); } public List findAll(){ return super.findAll(Event.class); }
}
///////////////////////////////////////////////////////////////////////// import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import java.util.List; public abstract class AbstractSpringDao extends HibernateDaoSupport{
public AbstractSpringDao() { } protected void saveOrUpdate(Object obj) { getHibernateTemplate().saveOrUpdate(obj); } protected void delete(Object obj) { getHibernateTemplate().delete(obj); } protected Object find(Class clazz, Long id) { return getHibernateTemplate().load(clazz, id); } protected List findAll(Class clazz) { return getHibernateTemplate().find("from " + clazz.getName()); }
}
/////////////////////////////////////////////////////////////////////////
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>org.hsqldb.jdbcDriver</value> </property> <property name="url"> <value>jdbc:hsqldb:data/tutorial</value> </property> <property name="username"> <value>sa</value> </property> <property name="password"> <value></value> </property> </bean> <bean id="factory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>Event.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> <prop key="hibernate.show_sql">false</prop> </props> </property> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <bean id="eventDao" class="EventSpringDao"> <property name="sessionFactory"> <ref bean="factory" /> </property> </bean>
</beans> ///////////////////////////////////////////////////////////////////////// <?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="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:data/tutorial</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property> <mapping resource="Event.hbm.xml"/> </session-factory>
</hibernate-configuration> ///////////////////////////////////////////////////////////////////////// <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="Event" table="events"> <id name="id" column="uid" type="long"> <generator class="increment"/> </id> <property name="name" type="string"/> <property name="startDate" column="start_date" type="date"/> <property name="duration" type="integer"/> </class>
</hibernate-mapping>
/////////////////////////////////////////////////////////////////////////
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import java.util.LinkedHashSet;
public class Event implements Serializable {
private Long id; private int duration; private String name; private Date startDate; public Event() { } public Event(String name) { this.name = name; } /** * @hibernate.id generator-class="native" column="uid" * @return */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @hibernate.property column="name" * @return */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.property column="start_date" * @return */ public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } /** * @hibernate.property column="duration" * @return */ public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; }
}
///////////////////////////////////////////////////////////////////////// /**
* Represents Exceptions thrown by the Data Access Layer. */
public class DataAccessLayerException extends RuntimeException {
public DataAccessLayerException() { } public DataAccessLayerException(String message) { super(message); } public DataAccessLayerException(Throwable cause) { super(cause); } public DataAccessLayerException(String message, Throwable cause) { super(message, cause); }
}
</source>
Spring Hibernate Template Execute
<source lang="java">
///////////////////////////////////////////////////////////////////////// import java.util.*; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.HibernateCallback; import java.sql.*; import org.hibernate.*; import org.hibernate.criterion.*; public class Main {
public static void main(String[] args) { HibernateUtil.setup("create table EVENTS ( uid int, name VARCHAR, start_Date date, duration int);"); // hibernate code start HibernateFactory.buildSessionFactory(); SessionFactory sessionFactory= HibernateFactory.getSessionFactory(); HibernateTemplate template= new HibernateTemplate(sessionFactory);
Event event1 = new Event("Event 1"); Event event2 = new Event("Event 2"); Event event3 = new Event("Event 3"); template.save(event1); template.save(event2); template.save(event3); template.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("from Event"); query.setMaxResults(2); List events = query.list(); for (Iterator it = events.iterator(); it.hasNext();) { Event event = (Event) it.next(); System.out.println(event.getName()); event.setDuration(60); } return null; } }); HibernateUtil.checkData("select uid, name from events"); HibernateFactory.closeFactory(); // hibernate code end }
}
///////////////////////////////////////////////////////////////////////// <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="Event" table="events"> <id name="id" column="uid" type="long"> <generator class="increment"/> </id> <property name="name" type="string"/> <property name="startDate" column="start_date" type="date"/> <property name="duration" type="integer"/> </class>
</hibernate-mapping>
/////////////////////////////////////////////////////////////////////////
import java.io.Serializable; import java.util.Date; import java.util.Set; import java.util.LinkedHashSet; public class Event implements Serializable {
private Long id; private int duration; private String name; private Date startDate; public Event() { } public Event(String name) { this.name = name; } /** * @hibernate.id generator-class="native" column="uid" * @return */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @hibernate.property column="name" * @return */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.property column="start_date" * @return */ public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } /** * @hibernate.property column="duration" * @return */ public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; }
}
/////////////////////////////////////////////////////////////////////////
/**
* Represents Exceptions thrown by the Data Access Layer. */
public class DataAccessLayerException extends RuntimeException {
public DataAccessLayerException() { } public DataAccessLayerException(String message) { super(message); } public DataAccessLayerException(Throwable cause) { super(cause); } public DataAccessLayerException(String message, Throwable cause) { super(message, cause); }
}
///////////////////////////////////////////////////////////////////////// <?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="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:data/tutorial</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property> <mapping resource="Event.hbm.xml"/> </session-factory>
</hibernate-configuration>
/////////////////////////////////////////////////////////////////////////
</source>
Spring Hibernate Template Save Or Update
<source lang="java">
///////////////////////////////////////////////////////////////////////// import java.util.*; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.HibernateCallback; import org.hibernate.*; import org.hibernate.criterion.*; public class Main {
public static void main(String[] args) { HibernateUtil.setup("create table EVENTS ( uid int, name VARCHAR, start_Date date, duration int);"); // hibernate code start HibernateFactory.buildSessionFactory(); SessionFactory sessionFactory= HibernateFactory.getSessionFactory(); HibernateTemplate template= new HibernateTemplate(sessionFactory);
Event event = new Event(); event.setName("Spring Hibernate Template"); template.saveOrUpdate(event); Event obj = (Event) template.load(Event.class, event.getId()); HibernateUtil.checkData("select uid, name from events"); HibernateFactory.closeFactory(); // hibernate code end }
}
///////////////////////////////////////////////////////////////////////// <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="Event" table="events"> <id name="id" column="uid" type="long"> <generator class="increment"/> </id> <property name="name" type="string"/> <property name="startDate" column="start_date" type="date"/> <property name="duration" type="integer"/> </class>
</hibernate-mapping>
/////////////////////////////////////////////////////////////////////////
import java.io.Serializable; import java.util.Date; import java.util.Set; import java.util.LinkedHashSet; public class Event implements Serializable {
private Long id; private int duration; private String name; private Date startDate; public Event() { } public Event(String name) { this.name = name; } /** * @hibernate.id generator-class="native" column="uid" * @return */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @hibernate.property column="name" * @return */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.property column="start_date" * @return */ public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } /** * @hibernate.property column="duration" * @return */ public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; }
}
/////////////////////////////////////////////////////////////////////////
<?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="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:data/tutorial</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property> <mapping resource="Event.hbm.xml"/> </session-factory>
</hibernate-configuration> ///////////////////////////////////////////////////////////////////////// /**
* Represents Exceptions thrown by the Data Access Layer. */
public class DataAccessLayerException extends RuntimeException {
public DataAccessLayerException() { } public DataAccessLayerException(String message) { super(message); } public DataAccessLayerException(Throwable cause) { super(cause); } public DataAccessLayerException(String message, Throwable cause) { super(message, cause); }
}
/////////////////////////////////////////////////////////////////////////
</source>