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相关文章
- Python 实现的”冒泡排序”详解编程语言
- 在Java8里创建Stream的几种方法详解编程语言
- Java多线程下载文件详解编程语言
- [email protected]@resource的使用详解编程语言
- Python开发系列课程(15) – Python参考书籍详解编程语言
- JSTL详解编程语言
- 2017年 JavaScript 框架回顾 — 后端框架详解编程语言
- 全文检索Lucene(二)—索引库维护详解编程语言
- 关于Vue中:key=”index”的console警告详解编程语言
- Go基础之–反射详解编程语言
- [linux] C语言Linux系统编程进程基本概念详解编程语言
- Akka(9): 分布式运算:Remoting-远程构建式详解编程语言
- Scalaz(36)- Free :实践-Free In Action – 实用体验详解编程语言
- Python参数传递(传值&传引用)详解编程语言
- Spring 官网jar下载详解编程语言
- 百度地图–南京行政区域划分详解编程语言
- Java IO详解(二)——流的分类编程语言
- Java获取Web项目目录路径详解编程语言
- Facebook开源跨平台前端布局引擎Yoga详解编程语言
- [email protected]_on条件编译详解编程语言
- springboot添加邮件发送及压缩功能详解编程语言
- 移动前端头部标签(HTML5 head meta)详解编程语言
- MyBatis框架基于Annotation注解的数据库增删改查操作详解编程语言
- ABAP–如何在ALV_Grid的函数中定义下拉列表详解编程语言
- php webman和tp并发能力对比详解编程语言
- ECC TO HANA FAGLB03 search-help on Account Number field doesn’t working or not returning the selected value to the Account Number field.详解编程语言
- Zookeeper——分布式协调服务Zookeeper介绍详解编程语言
- Binary Search – 二分查找详解编程语言
- ajax异步加载查询数据库详解编程语言
- go语言之用户输入&类型别名&类型转换详解编程语言