将Hibernate与Struts2结合起来使用非常简单,首先新建一个web工程,然后将Hibernate与Struts2需要的所有jar包一齐拷贝到工程的lib目录下,加上mysql的驱动包,接着在web.xml中配置Struts2的核心控制器,还有编写hibernate.cfg.xml文件,struts.xml文件。
register.jsp :
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="register">
<s:textfield name="user.name" label="姓名"></s:textfield>
<s:textfield name="user.age" label="年龄"></s:textfield>
<s:checkbox name="user.married" label="婚否"></s:checkbox>
<s:submit value="注册"></s:submit>
</s:form>
</body>
</html>
success.jsp :
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
register success...
</body>
</html>
struts.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="demo" extends="struts-default">
<interceptors>
<interceptor name="transaction"
class="com.interceptor.TransactionInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="transaction"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="register" class="com.action.RegisterAction">
<interceptor-ref name="myStack"></interceptor-ref>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
HibernateSessionUtil.java :
public class HibernateSessionUtil {
private static final ThreadLocal<Session> sessionLocal=new ThreadLocal<Session>();
public static Session getSession(){
Session session=sessionLocal.get();
if(session==null|| !session.isOpen()){
Configuration conf=new Configuration();
conf.configure();
SessionFactory sf=conf.buildSessionFactory();
session=sf.openSession();
sessionLocal.set(session);
}
return session;
}
public static void closeSession(){
Session session=sessionLocal.get();
sessionLocal.set(null);
if(session!=null){
session.close();
}
}
}
BaseDAO.java :
public class BaseDAO {
public Session getSession(){
return HibernateSessionUtil.getSession();
}
public void closeSession(){
HibernateSessionUtil.closeSession();
}
}
UserDAO.java :
public class UserDAO extends BaseDAO{
public void add(User user){
Session session=this.getSession();
session.save(user);
}
public void delete(int id){
Session session=this.getSession();
User user=findById(id);
session.delete(user);
}
public void update(User user){
Session session=this.getSession();
session.update(user);
}
public User findById(int id){
Session session=this.getSession();
User user=(User)session.get(User.class,id);
return user;
}
}
TransactionInterceptor.java :
public class TransactionInterceptor extends MethodFilterInterceptor{
@Override
public String doIntercept(ActionInvocation invocation) throws Exception{
String result=null;
Transaction txt=HibernateSessionUtil.getSession().beginTransaction();
try{
result=invocation.invoke();
txt.commit();
}catch(SQLException e){
e.printStackTrace();
txt.rollback();
}finally{
HibernateSessionUtil.closeSession();
}
return result;
}
}
RegisterAction.java :
public class RegisterAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
UserDAO dao=new UserDAO();
dao.add(user);
return "success";
}
}