Topquan's Blog

分享价值----成就你我----我的博客----你的家

利用Hibernate开发Blog实例分析

开发工具采用 MYECLIPS3.6 ,首先是建立项目,导入 STRUTS+HIBERNATE 包,然后配置 SRC 跟目录下的 Hibernate.cfg.xml. 我采用的是 MYSQL数据库 ,所以配置如下:
  
   <hibernate-configuration>
   <session-factory>
   <!-- properties -->
   <property name="connection.username">
   root
   </property>
   <property name="connection.url">
   jdbc:mysql://localhost:3306/tonnyblog
   </property>
   <property name="dialect">
   net.sf.hibernate.dialect.MySQLDialect
   </property>
   <property name="connection.password"></property>
   <property name="connection.driver_class">
   org.gjt.mm.mysql.Driver
   </property>
   <!-- mapping files -->
   <mapping resource="com/tonny/blog/bean/User.hbm.xml"/>
   <mapping resource="com/tonny/blog/bean/Item.hbm.xml"/>
   <mapping resource="com/tonny/blog/bean/Review.hbm.xml"/>
   </session-factory></hibernate-configuration>
  
   mapping JAVABEAN 所对应的映射
  
  下面我们继续 HIBERNATE 程序的下步编写:
  
   import net.sf.hibernate.HibernateException;
   import net.sf.hibernate.Session;
   import net.sf.hibernate.SessionFactory;
   import net.sf.hibernate.cfg.Configuration;
   /**   Description of the Class
        *
@author  topquan
   
* @created
2006 5 6
   */public class HibernateUtil
   {
   private final static SessionFactory sessionFactory;
   static
   {
   try
   {
   sessionFactory =
   new Configuration().configure().buildSessionFactory();
   }
   catch (HibernateException ex)
   {
   throw new RuntimeException(
   "Exception building SessionFactory:
   " + ex.getMessage(),ex);
   }
   }
   private HibernateUtil(){    }
   /**    *   Description of the Field
   */
   private final static ThreadLocal
   session = new ThreadLocal();
   /** Description of the Method
   * @return
  * Description of the Return Value   
  * @exception   HibernateException
  * Description of the Exception   
        */

   public static Session currentSession()
   throws HibernateException
   {
   Session s = (Session) session.get();
   if (s == null)
   {
   s = sessionFactory.openSession();
   session.set(s);
   }      return s;
   }
   /**   
          *
  Description of the Method
    * @exception   HibernateException
   * Description of the Exception
   */
   public static void closeSession()
   throws HibernateException {
   Session s = (Session) session.get();
   session.set(null);
   if (s != null)
   {
   s.close();
   }
   }
   public static void init()
   {
   }
   }
  
  创建 sessionFactory
  
   import net.sf.hibernate.HibernateException;
   import net.sf.hibernate.SessionFactory;

       import net.sf.hibernate.cfg.Configuration;
   import org.apache.struts.action.ActionServlet;
   import org.apache.struts.action.PlugIn;
   import org.apache.struts.config.ModuleConfig;
   import com.tonny.blog.dao.hibernate.HibernateUtil;
   public class HibernatePlugin
   implements org.apache.struts.action.PlugIn
   {
   public void init(ActionServlet servlet,
   ModuleConfig config)
   {
   HibernateUtil.init();
   }
   public void destroy()
   {
   try
   {
   HibernateUtil.closeSession();
   }
   catch(HibernateException hex)
   {
   hex.printStackTrace();
   }
   }
   }
  
  以上为 HIBERNATE 基本配置,对 数据库 操作采用 DAO 模式,增加配置如下:
  
   import com.tonny.blog.dao.hibernate.*;
   public class DAOFactory
   {
   private static DAOFactory instance;
   public synchronized static DAOFactory getInstance()
   {
   if
   (instance == null)
   {
   instance = new DAOFactory();
   }
   return instance;
   }
   private DAOFactory()
   {
   }
   public ItemDAO getItemDAO()
   {
   return new ItemDAOHibernate();
   }
   public ReviewDAO getReviewDAO()
   {
   return new ReviewDAOHibernate();
   }
   public UserDAO getUserDAO()
   {
   return new UserDAOHibernate();
   }
   }
  
   struts.xml 增加配置:
  
   <controller contentType="text/html"
   debug="3" locale="true"
   nocache="true"
   processorClass=
   "com.tonny.blog.struts.controller.IndexRequestProcessor"/>
   <message-resources parameter="com.tonny.resource"/>
   <plug-in className=
   "com.tonny.blog.struts.plugin.HibernatePlugin"/>
   <plug-in className="org.apache.struts.tiles.TilesPlugin">
   <set-property property="moduleAware" value="true"/>
   <set-property property="definitions-debug" value="0"/>
   <set-property property="definitions-parser-details"
   value="0"/>
   <set-property property="definitions-parser-validate"
   value="false"/>
   <set-property property="definitions-config"
   value="/WEB-INF/title-def.xml"/>
   </plug-in>
  
  下面我们定义服务层:
  
   public class ServiceFactory
   {
   private static ServiceFactory instance;
   public synchronized static ServiceFactory getInstance()
   {
   if (instance == null)
   {
   instance = new ServiceFactory();
   }
   return instance;
   }
   private ServiceFactory()
   {
   }
   public
   IService getService()
   {
   return new ServiceImp();
   }
   }
  
   import com.tonny.blog.struts.form.*;
   import com.tonny.blog.view.*;
   import com.tonny.blog.bean.*;
   import java.util.*;

       import javax.servlet.http.*;
   public interface IService
   {
   public UserContainer login(UserForm userForm);
   public boolean logout(UserContainer userContainer);
   public boolean addBlog(BlogForm blogForm,String filePath);
   public boolean removeBlog(Long id);
   public boolean addReview(Long topicId,ReviewForm reviewForm);
   public boolean updateBlog(Long id,String conten,String topic);
   public boolean removeReview(Long id);
   public List getItems();
   public ItemView getItem(Long id);
   public ItemView getEditItem(Long id);
   public List search(SearchForm searchForm);
   /**    * @param id    * @param userForm    */
   public boolean addUser(UserForm userForm);
   }
  
   import com.tonny.blog.struts.form.*;
   import com.tonny.blog.view.*;
   import com.tonny.blog.dao.*;
   import com.tonny.blog.bean.*;
   import java.util.*;import javax.servlet.http.*;
   import com.tonny.blog.struts.util.FileUpload;
   public class ServiceImp implements IService
   {
   public UserContainer login(UserForm userForm)
   {
   UserDAO userDAO=DAOFactory.getInstance().getUserDAO();
   User user=userDAO.loadUser(userForm.getName());
   if(user==null)return new UserContainer("",false);
   if(!user.getPassword().equals(userForm.getPassword()))
   return new UserContainer("",false);
   return new UserContainer(userForm.getName(),true);
   }
   public boolean logout(UserContainer userContainer)
   {
   userContainer.setLogin(false);
   userContainer.setName("");
   return true;
   }
   public boolean addBlog(BlogForm blogForm,String path)
   {
   ItemDAO itemDAO=DAOFactory.getInstance().getItemDAO();
   Item item=new Item(blogForm.getTopic(),
   blogForm.getContent(),
   FileUpload.upload(blogForm.getFile(),path),new Date());
   itemDAO.addItem(item);
   return true;
   }
   public boolean removeBlog(Long id)
   {
   ReviewDAO reviewDAO=DAOFactory.getInstance()
        //...
       }

posted on 2006-05-08 15:39 topquan 阅读(282) 评论(0)  编辑  收藏 所属分类: Hibernate


只有注册用户登录后才能发表评论。


网站导航: