我自己写了一个测试用例,我也是初学的,见笑了,不知道对你有没有帮助。
首先在tomcat启动时初始化hibernate,这都是网上介绍的通用方法:
初始化Hibernate的类
package com.struts.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.HibernateException;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
public class HibernateInit implements PlugIn{
   private Context ctx;
   private SessionFactory sessionFactory;
   private String hbnConfigFile;
   public void init(ActionServlet servlet, ModuleConfig config) throws ServletException{
       try{
          Configuration cfg = new Configuration();
          cfg.configure(this.getHbnConfigFile());
          sessionFactory = cfg.buildSessionFactory();
       }catch(HibernateException ex){
          throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
       }
       
       try{
          ctx = new InitialContext();
          ctx.bind("HibernateSessionFactory", sessionFactory);
       }catch(NamingException ex){
          throw new RuntimeException("Exception building SessionFactory22: " + ex.getMessage(), ex);
       }
   }
   public void destroy(){
       if(ctx!=null){
          try{
             ctx.unbind("HibernateSessionFactory");
          }catch(NamingException e){
             e.printStackTrace();
          }
       }
       if(sessionFactory!=null){
          try{
             sessionFactory.close();
          }catch(HibernateException e){
              e.printStackTrace();
          }
          sessionFactory = null;
       }
   }
   public void setHbnConfigFile(String hbnConfigFile){
      this.hbnConfigFile = hbnConfigFile;
   }
   public String getHbnConfigFile(){
      return hbnConfigFile;
   }
}这样的话,就直接从JNDI数上获得
package com.hibernate.util;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.HibernateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class DButil{
   private static SessionFactory sessionFactory = null;
   public static final ThreadLocal session = new ThreadLocal();
   public static Session currentSession() throws HibernateException{
      if(sessionFactory == null){
          if(getSystemSessionFactory() == false){
              throw new HibernateException("Exception geting SessionFactory from JNDI");
          }
      }
      Session s = (Session)session.get();
      if(s == null){
         s = sessionFactory.openSession();
         session.set(s);
      }
      return s;
   }
   public static void closeSession() throws HibernateException{
       Session s = (Session)session.get();
       session.set(null);
       if(s!=null){
           s.close();
       }
   }
   public static boolean getSystemSessionFactory(){
       try{
          Context ctx = new InitialContext();
          sessionFactory = (SessionFactory)ctx.lookup("HibernateSessionFactory");
       }catch(NamingException e){
          return false;
       }
       return true;
   }
}
然后是struts-config.xml文件
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
    <form-beans>
        <form-bean name="inputForm" type="com.struts.form.UserForm"/>
    </form-beans>
    <action-mappings>       
        <action path="/view" type="com.struts.action.ViewAction"           name="inputForm"  scope="request" input="/pages/Input.jsp">
          <forward name="SUCCESS" path="/view_result.jsp">
        </action>        
    </action-mappings>
    <plug-in className="com.struts.util.HibernateInit">
       <set-property property="hbnConfigFile" value="hibernate.hbn.xml" />
    </plug-in>
</struts-config>

解决方案 »

  1.   

    接着我在一个类里面实现了具体的业务逻辑,包括增,删,改,查。
    package com.struts.business;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.Criteria;
    import org.hibernate.criterion.Expression;
    import org.hibernate.Query;
    import java.util.List;
    import com.hibernate.entity.User;
    import com.hibernate.util.DButil;
    public class TestBO{
       //根据用户名查询
       public List viewInfo(String userName){
          Session session = DButil.currentSession();
          Transaction tx = session.beginTransaction();
          Criteria criteria  = session.createCriteria(User.class);
          criteria.add(Expression.like("name", userName));
          List result = criteria.list();
          tx.commit();
          DButil.closeSession();
          return result;
       }
       //查询所有用户
       public List viewAll(){
          Session session = DButil.currentSession();
          Transaction tx = session.beginTransaction();
          Criteria criteria = session.createCriteria(User.class);
          List result = criteria.list();
          tx.commit();
          DButil.closeSession();
          return result;
       }
       //添加用户
       public void add(String name, String addr){
          Session session = DButil.currentSession();
          Transaction tx = session.beginTransaction();
          User user = new User(name, addr);
          session.save(user);
          tx.commit();
          DButil.closeSession();
       }
       //修改用户信息
       public void update(int id, String name, String addr){
          Session session = DButil.currentSession();
          Transaction tx = session.beginTransaction();
        
          User user = (User)session.get(User.class, new Integer(id));
          user.setName(name);
          user.setAddress(addr);
          tx.commit();
          DButil.closeSession();
       }
       //删除用户
       public void del(int id){
          Session session = DButil.currentSession();
          Transaction tx = session.beginTransaction();
        
          User user = (User)session.get(User.class, new Integer(id));
          session.delete(user);
          tx.commit();
          DButil.closeSession();
       }
    }
    最后是一些Action了。
    package com.struts.action;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionForm;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.List;
    import com.struts.form.UserForm;
    import com.struts.business.TestBO;
    public class ViewAction extends Action{
       public ActionForward execute(ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response) throws Exception{
            
             UserForm uf = (UserForm)form;
             String userName = uf.getName();
             TestBO tb = new TestBO();
             List list = tb.viewInfo(userName);
             request.setAttribute("resultList", list);
             return mapping.findForward("SUCCESS");           
       }
    }
    这个Action完成了查询,其它都差不多了。逻辑比较简单,没有用到什么接口,继承之类的东西,关键是不会,没用过,有点惭愧。对了,我的数据库是MySQL.
    CREATE TABLE user (
      ID int(11) NOT NULL auto_increment,
      USERNAME varchar(50) NOT NULL default ,
      PASSWORD varchar(50) NOT NULL default ,
      PRIMARY KEY  (ID)
    ) ;
    配置文件是这样的:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
       <session-factory>
          <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
          <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
          <property name="connection.username">root</property>
          <property name="connection.password">My_db_password</property>
          <property name="connnection.pool_size">1</property>
          <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
          <property name="show_sql">true</property>
          <mapping resource="com/hibernate/entity/User.hbm.xml" />
       </session-factory>
    </hibernate-configuration>
    放在/WEB-INF/classes目录下
      

  2.   

    最后再贴上User.hbm.xml文件吧
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="com.hibernate.entity.User" table="users">
           <id name="id" column="id" type="java.lang.Integer">
              <generator class="native" />
           </id>
           <property name="name" type="java.lang.String" column="username" />
           <property name="address" type="java.lang.String" colunm="password" />
        </class>
    </hibernate-mapping>
      

  3.   

    天乙论坛 STRUTS+HIBERNATE+SPRING