1Spring Hibernate Template Save Or Update
强烈推荐新手多去
/
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>
<!-- Database connection settings -->
<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>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<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);
}
}
2 设置applicationContext.xml的名字或路径
当spring容器被启动的时候,似乎如果在web.xml中设置了ContextLoaderListener,就会去读applicationContext.xml。
如果要设置这个配置文件的名字或路径要在web.xml中加入
<
context-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
/WEB-INF/applicationContext1.xml
/WEB-INF/applicationContext2.xml
</
param-value
>
</
context-param
>
3在spring frame中获取application context
http://www.theserverside.com/discussions/thread.tss?thread_id=27869
To my understanding, in order to get a bean, you should get the
application context and call getBean. In the servlet layer it is easy,
all you need to do is
// test the spring framework
ServletContext servletContext =this.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.
getRequiredWebApplicationContext(servletContext);
User user = (User)wac.getBean("user");
在链接中讨论了如何在业务层business layer获取application context。
http://blog.csdn.net/amigoxie/archive/2007/02/27/1516346.aspx
spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext,
FileSystemXmlApplicationContext和XmlWebApplicationContext,其中
XmlWebApplicationContext是专为Web工程定制的。使用举例如下:
1. FileSystemXmlApplicationContext
eg1. ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml"); //加载单个配置文件
eg2.
String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
ApplicationContext ctx = new FileSystemXmlApplicationContext(locations ); //加载单个配置文件
eg3.
ApplicationContext ctx =new FileSystemXmlApplicationContext("D:/project/bean.xml");//根据具体路径加载文件
2. ClassPathXmlApplicationContext
eg1.
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
eg2.
String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
ApplicationContext ctx = new ClassPathXmlApplication(locations);
注:其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext与BeanFactory的xml文件定位方式一样是基于路径的。
3. XmlWebApplicationContext
eg1. ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
4 如何在spring的multiactioncontroller中使用command
典型的方式,可如下定义一个方法
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse response,Account account) {}
注意通常的方式是:
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse response) {}
可以看到区别:就是第三个参数,如果第三个参数不是HttpSession对象,那么就会做为一个command对象来对待。
另外,还有一个方法bind()来利用。
详见http://www.javaeye.com/topic/19640