系统的总览:
创建hibernate+struts的工程,首先创立domain,util,service包,然后通过DBbrower进行hibernate的你想建立映射的表文件,其次是找到web-inf下的struts-config文件来进行配置,新增jsp,form,action等文件,然后就是通过图对jsp页面的补充,和Action、Form的填写,注意在Hibernate的一些查询等操作都是对表单操作而不是对数据库进行的(并且字母的大小写是敏感的),有个关于Session和getCurrentSession的工具类(blog),service包是进行对数据的检查等操作。
工具类Util:(获得Session和同线程getCurrentSession)
package com.dqd.util;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import com.dqd.domain.*;
final public class HibernateUtil {
private static SessionFactory sf = null;
private static ThreadLocal<Session> tl = new ThreadLocal<Session>();
private static ServiceRegistry sr= null;
private static Configuration con =null;
private HibernateUtil(){}
static{
con = new Configuration().configure();
sr = new ServiceRegistryBuilder().applySettings(con.getProperties()).buildServiceRegistry();
sf = con.buildSessionFactory(sr);
}
//获得全新的Session
public static Session openSession(){
return sf.openSession();
}
//获得和线程相关的Session
public static Session getCurrentSession(){
Session session = tl.get();
if(session==null){
session = sf.openSession();
tl.set(session);
}
return session;
}
public static List excuteQuery(String hql){
Session session = null;
//因为动作会频繁的发生所以使用事物
Transaction ts = null;
List list = null;
try{
session = HibernateUtil.getCurrentSession();
ts = session.beginTransaction();
list = session.createQuery(hql).list();
ts.commit();
}catch(Exception e){
if(ts!=null){
ts.rollback();
}
e.printStackTrace();
}finally{
if(session != null && session.isOpen()){
session.close();
}
}
return list;
}
}
service验证类:
package com.dqd.service;
import java.util.List;
import com.dqd.domain.Users;
import com.dqd.util.HibernateUtil;
public class userService {
public Users check(Users users){
String hql = "from Users where uname= '"+users.getUname()
+"' and upasswd = '" + users.getUpasswd()+"'";
List<Users> list = HibernateUtil.excuteQuery(hql);
if(list!=null&&list.size()==1){
return list.get(0);
}else{
return null;
}
}
}
logionAction类:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.dqd.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.dqd.domain.Users;
import com.dqd.service.userService;
import com.dqd.struts.form.UserForm;
/**
* MyEclipse Struts
* Creation date: 10-04-2016
*
* XDoclet definition:
* @struts.action path="/login" name="userForm" parameter="flag" scope="request"
*/
public class LoginAction extends DispatchAction {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
Users users = new Users();
users.setUname(userForm.getUname());
users.setUpasswd(userForm.getUpasswd());
userService us = new userService();
users = us.check(users);
if(users!=null){
request.getSession().setAttribute("userInfo", users);
return mapping.findForward("loginok");
}else{
return mapping.findForward("loginerr");
}
}
}
以上是在分派LoginAction进行的检验(loginAction调用service,service进行组合hql语句,HibernateUtil工具类对hql语句进行处理)