博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开发积累—泛型工具类
阅读量:5323 次
发布时间:2019-06-14

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

前言:使用SSH2中使用的泛型工具类,曾经写泛型比較麻烦。

今天收集到一个工具类,好东呀!。分享给大家,绝对实用。JAVA版的web应用程序使用。

 

 

演示样例代码:

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

/**

 *Hibernate工具类。用于获取Session

 *@author Li Yongqiang

 */

public class HibernateUtils {

         //声明SessionFactory对象

         privatestatic SessionFactory factory = null;

         //实例化ThreadLocal对象

         privatestatic final ThreadLocal<Session> threadLocal = newThreadLocal<Session>();

         //实例化Configuration对象

         privatestatic Configuration cfg = new Configuration();

         //静态块

         static{

                   try{

                            //载入Hibernate配置文件

                            cfg.configure();

                            //实例化SessionFactory

                            factory= cfg.buildSessionFactory();

                   }catch (HibernateException e) {

                            e.printStackTrace();// 打印异常信息

                   }

         }

         /**

          * 获取Session对象

          * @return Session对象

          */

         publicstatic Session getSession() {

                   //从threadLocal中获取Session

                   Sessionsession = (Session) threadLocal.get();

                   //推断session是否为空或未处于开启状态

                   if(session == null || !session.isOpen()) {

                            if(factory == null) {

                                     rebuildSessionFactory();

                            }

                            //从factory开启一个Session

                            session= (factory != null) ? factory.openSession() : null;

                            threadLocal.set(session);// 将session放入threadLocal中

                   }

                   returnsession;

         }

         /**

          * 获取SessionFactory对象

          * @return SessionFactory对象

          */

         publicstatic SessionFactory getSessionFactory() {

                   returnfactory;

         }

         /**

          * 关闭Session

          * @param session对象

          */

         publicstatic void closeSession() {

                   //从threadLocal中获取Session

                   Sessionsession = (Session) threadLocal.get();

                   //移除threadLocal中的对象

                   threadLocal.remove();

                   if(session != null) {

                            if(session.isOpen()) {

                                     session.close();// 关闭Session

                            }

                   }

         }

         /**

          * 创建SessionFactory对象

          */

         publicstatic void rebuildSessionFactory() {

                   try{

                            //载入Hibernate配置文件

                            cfg.configure();

                            //实例化SessionFactory

                            factory= cfg.buildSessionFactory();

                   }catch (Exception e) {

                            e.printStackTrace();// 打印异常信息

                   }

         }

}

 

使用场景代码;

public class DaoSupport<T> implementsBaseDao<T>{

         //泛型的类型

         protectedClass<T> entityClass = GenericsUtils.getGenericType(this.getClass());

         //Hibernate模板

         @Autowired

         protectedHibernateTemplate template;

        

         publicHibernateTemplate getTemplate() {

                   returntemplate;

         }

         @Override

         publicvoid delete(Serializable ... ids) {

                   for(Serializable id : ids) {

                            Tt = (T) getTemplate().load(this.entityClass, id);

                            getTemplate().delete(t);

                   }

         }

         /**

          * 利用get()方法载入对象。获取对象的具体信息

          */

         @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

         publicT get(Serializable entityId) {

                   return(T) getTemplate().get(this.entityClass, entityId);

         }

         /**

          * 利用load()方法载入对象,获取对象的具体信息

          */

         @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

         publicT load(Serializable entityId) {

                   return(T) getTemplate().load(this.entityClass, entityId);

         }

}

 

如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com

 

转载于:https://www.cnblogs.com/blfbuaa/p/6991261.html

你可能感兴趣的文章
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>