博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate08--OpenSessionInView
阅读量:7011 次
发布时间:2019-06-28

本文共 6012 字,大约阅读时间需要 20 分钟。

创建一个web项目,然后生成HibernateSessionFactory文件!

package cn.bdqn.util;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.cfg.Configuration;/** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution.  Follows the Thread Local Session * pattern, see {
@link 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
threadLocal = new ThreadLocal
(); 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
SessionFactory 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;    }    }

创建对应的servlet

public class DistrcitServlet extends HttpServlet {    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
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文件中新增

openSession
cn.bdqn.filter.OpenSessionInViewFilter
openSession
/*

之后创建页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>              My JSP 'index.jsp' starting page    
${s.id } ${s.name }

 

转载于:https://www.cnblogs.com/xtdxs/p/7093566.html

你可能感兴趣的文章
Java ProcessBuilder类
查看>>
文件上传---动作条
查看>>
自制CA签发证书
查看>>
解决mysql “too many connections”
查看>>
梳理下MySQL崩溃恢复过程
查看>>
红包金额均分实现
查看>>
Google校园招聘题 -- 程序员买房
查看>>
线程的属性(优先级、守护线程、未捕获异常处理器)
查看>>
oracle批量插入测试数据
查看>>
goahead-3.6.2-src 移植到linux
查看>>
Mysql数据库调优和性能优化的21条最佳实践
查看>>
iOS视频播放-MPMoviePlayerController
查看>>
mysql导入导出数据中文乱码解决方法小结
查看>>
使用Mob短信sdk遇到的问题,解决
查看>>
android-------- 强引用、软引用、弱引用、虚引用使用
查看>>
HTML标签marquee实现滚动效果
查看>>
html字符操作
查看>>
oracle函数
查看>>
百度贴吧爬虫1.0
查看>>
ant+jmeter接口批量执行测试用例
查看>>