zl程序教程

您现在的位置是:首页 >  其他

当前栏目

hibernate08–OpenSessionInView详解编程语言

编程语言 详解 &# 8211
2023-06-13 09:20:36 时间
* Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see [email protected] http://hibernate.org/42.html }. public class HibernateSessionFactory { /** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. * The default classpath location of the hibernate config file is * in the default package. Use #setConfigFile() to update * the location of the configuration file for the current session. private static final ThreadLocal Session threadLocal = new ThreadLocal Session private static org.hibernate.SessionFactory sessionFactory; private static Configuration configuration = new Configuration(); private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static String configFile = CONFIG_FILE_LOCATION; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); private HibernateSessionFactory() { /** * Returns the ThreadLocal Session instance. Lazy initialize * the code SessionFactory /code if needed. * @return Session * @throws HibernateException public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); return session; /** * Rebuild hibernate session factory public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); /** * Close the single hibernate session instance. * @throws HibernateException public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); /** * return session factory public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; /** * return session factory * session factory will be rebuilded in the next call public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; /** * return hibernate configuration public static Configuration getConfiguration() { return configuration; }

 

在之前的基础上创建dao

public interface DistrictDao { 

 //根据制定的id查询区县信息 根据区县可以查询到街道 

 District getDistrictById(Integer id); 

}

 

创建daoImpl

public class DistrictDaoImpl implements DistrictDao{ 

 @Override 

 public District getDistrictById(Integer id) { 

 Session session = HibernateSessionFactory.getSession(); 

 District district = (District) session.load(District.class, id); 

 System.out.println("daoImpl中的session===== "+session.hashCode()); 

 return district; 


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //实例化service层对象 DistrictDao dao=new DistrictDaoImpl(); //查询id是1001的区县下所有的街道 District district = dao.getDistrictById(1001); List Street streets = district.getStreets(); //把街道放入指定的作用域 request.setAttribute("streets", streets); request.getRequestDispatcher("index.jsp").forward(request, response); }

 

创建对应的Filter 并在web.xml文件中配置filter和filter-mapping

public class OpenSessionInViewFilter implements Filter { 

 @Override 

 public void destroy() { 

 //真正执行代码的地方 获取session 开启事务 

 @Override 

 public void doFilter(ServletRequest request, ServletResponse response, 

 FilterChain chain) throws IOException, ServletException { 

 Session session = HibernateSessionFactory.getSession(); 

 System.out.println("filter中的session===== "+session.hashCode()); 

 chain.doFilter(request, response); 

 HibernateSessionFactory.closeSession(); //关闭session 

 @Override 

 public void init(FilterConfig arg0) throws ServletException { 

}

 

web.xml文件中新增

 filter 

 filter-name openSession /filter-name 

 filter-class cn.bdqn.filter.OpenSessionInViewFilter /filter-class 

 /filter 


String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" % !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" html head base href=" %=basePath% " title My JSP index.jsp starting page /title meta http-equiv="pragma" content="no-cache" meta http-equiv="cache-control" content="no-cache" meta http-equiv="expires" content="0" meta http-equiv="keywords" content="keyword1,keyword2,keyword3" meta http-equiv="description" content="This is my page" !-- link rel="stylesheet" type="text/css" href="styles.css" /head body c:forEach items="${streets}" var="s" ${s.id } ${s.name } br/ /c:forEach /body /html

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12112.html

cjavaxml