Hibernate操作数据库的回调机制--Callback
1:一般情况下,在使用Hibernate Session存取数据库的代码中,基本上大部分是相同的,如下两个方法所示,
- //查询Teacher操作
- ublic Teacher getTeacher(Long id) throws DataAccessException {
- Session session = getSession();
- Teacher teacher = null;
- try {
- teacher = (Teacher)session.get(Teacher.class, id);
- ...
- } catch(HibernateException ex) {
- throw convertHibernateAccessException(ex);
- } catch(SQLException ex) {
- throw convertJdbcAccessException(ex);
- } catch(RuntimeException ex) {
- throw ex;
- } finally {
- session.close();
- return teacher;
- }
//查询Teacher操作
public Teacher getTeacher(Long id) throws DataAccessException {
Session session = getSession();
Teacher teacher = null;
try {
teacher = (Teacher)session.get(Teacher.class, id);
... } catch(HibernateException ex) {
throw convertHibernateAccessException(ex);
} catch(SQLException ex) {
throw convertJdbcAccessException(ex);
} catch(RuntimeException ex) {
throw ex;
} finally {
session.close();
return teacher;
}
}
- //查询Class操作
- ublic classInfo getTeacher(Long id) throws DataAccessException {
- Session session = getSession();
- ClassInfo classInfo = null;
- try {
- classInfo = (ClassInfo)session.get(ClassInfo.class, id);
- ...
- } catch(HibernateException ex) {
- throw convertHibernateAccessException(ex);
- } catch(SQLException ex) {
- throw convertJdbcAccessException(ex);
- } catch(RuntimeException ex) {
- throw ex;
- } finally {
- session.close();
- return classInfo;
- }
//查询Class操作
public classInfo getTeacher(Long id) throws DataAccessException {
Session session = getSession();
ClassInfo classInfo = null;
try {
classInfo = (ClassInfo)session.get(ClassInfo.class, id);
... } catch(HibernateException ex) {
throw convertHibernateAccessException(ex);
} catch(SQLException ex) {
throw convertJdbcAccessException(ex);
} catch(RuntimeException ex) {
throw ex;
} finally {
session.close();
return classInfo;
}
}
上面这两种方法的做法是不对的,大量重复的代码会导致后期维护困难,这里可以考虑把具体的业务逻辑处理部分剥离出来,而只对公共的Session获取及释放
和异常处理部分进行封装,形成一个公共的方法,如下面代码所示,
- //封装后公用方法
- ublic Object process(HibernateCallback action) throws DataAccessException {
- Session session = getSession();
- Object obj = null;
- try {
- obj = action.doInHibernate(session);
- } catch(HibernateException ex) {
- throw convertHibernateAccessException(ex);
- } catch(SQLException ex) {
- throw convertJdbcAccessException(ex);
- } catch(RuntimeException ex) {
- throw ex;
- }
//封装后公用方法
public Object process(HibernateCallback action) throws DataAccessException {
Session session = getSession();
Object obj = null;
try {
obj = action.doInHibernate(session);
} catch(HibernateException ex) {
throw convertHibernateAccessException(ex);
} catch(SQLException ex) {
throw convertJdbcAccessException(ex);
} catch(RuntimeException ex) {
throw ex;
}
}
- //查询Teacher操作
- public Teacher getTeacher(final Long id) throws DataAccessException {
- return (Teacher)process(new HibernateCallback(){
- public Object doInHibernate(Session session) throws HibernateException, SQLException {
- Teacher teacher = (Teacher)session.get(Teacher.class, id);
- return teacher;
- }
- });
- }
//查询Teacher操作
public Teacher getTeacher(final Long id) throws DataAccessException {
return (Teacher)process(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Teacher teacher = (Teacher)session.get(Teacher.class, id);
return teacher;
}
});
}
回调,就是由被调用者调用由调用者提供的对象实现具体的业务操作。回调机制一般与模板方法结合起来作为一种模式使用,回调机制让应用程序人员只关心业务逻辑实现,
而不用处理一些底层通用操作,从而可以实现通用操作和业务逻辑相分离。比如在Java数据库操作中,使用回调机制,不用关心数据库连接的打开和关闭,只需要在Callback实现相关的数据存取即可,这样可以从一定程度上保证数据库连接总是被及时关闭。
Hibernate操作数据库的回调机制--Callback的更多相关文章
- JAVA回调机制(CallBack)详解
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
- hibernate操作数据库总结
这篇文章用于总结hibernate操作数据库的各种方法 一.query方式 1.hibernate使用原生态的sql语句执行数据库查询 有些时候有些开发人员总觉得用hql语句不踏实,程序出现了错误,就 ...
- Java_Web三大框架之Hibernate操作数据库(三)
使用Hibernate操作数据库需要七个步骤: (1)读取并解析配置文件 Configuration conf = newConfiguration().configure(); (2)读取并解析映射 ...
- [转]JAVA回调机制(CallBack)详解
看见一篇博客比较通俗的解释了回调机制,转载一下,感谢原文作者Bro__超,原文地址:http://www.cnblogs.com/heshuchao/p/5376298.html 序言 最近学习jav ...
- MTK Android 回调机制[CallBack]
具体步骤: 一.建模 回调函数的关键是:将一段代码作为参数传递,而这段代码将会在某个时刻被执行 我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去 ...
- hibernate操作数据库例子
1.工程目录结构如下 2.引入需要的jar包,如上图. 3.创建持久化类User对应数据库中的user表 package com.hibernate.配置文件.pojo; import java.sq ...
- hibernate操作数据库总结(转)
一.query方式 1.hibernate使用原生态的sql语句执行数据库查询 有些时候有些开发人员总觉得用hql语句不踏实,程序出现了错误,就猜测因为不是原生态的sql语句,数据库不支持,因此情愿选 ...
- Hibernate 操作数据库
com.tao.pojo实体类 package com.tao.pojo; public class User { private int id; private String name; priva ...
- 转 使用Hibernate操作数据库时报:No CurrentSessionContext configured! 异常
没有currentSession配置错误,即在我们使用currentSession的时候要在hibernate.cfg.xml中进行相关的事务配置:1.本地事务<property name=&q ...
随机推荐
- window.onerror 应用实例
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp75 window.onerror = function(sMessa ...
- Microsoft Visual Studio 打开代码出现乱码解决方案
在用VS编写代码时,文本的字符集可能和编译器的字符集不同,在这种情况下代码会显示出乱码. 解决办法: 在VS的工具->选项里面找到"文本编辑器",勾选“自动检测不带签名的UT ...
- 发布一个Python小程序:ManHourCalendar
程序诞生的那些事儿 先聊聊背景资料档案.. 大约两年前,我只身前往岛国赚点外快.在那边的派遣制度工作中,存在一个大约叫每月的标准工作时间的概念,按照自家公司跟派遣目标公司(业界称为现场)的合同,规定了 ...
- 前端js优化方案(连续更新)
最近在读<高性能javascript>,在这里记录一下读后的一些感受,顺便加上自己的一些理解,如果有兴趣的话可以关注的我的博客http://www.bloggeng.com/,我会不定期发 ...
- MITNIK ATTACK
Https 443 http 80 TCP/IP 协议栈:将数据封装包头 传输层报头 Ack回复确认位 FIN结束位 SIN 开始位 RST 重置位 Seq 序号位 网络层报头 目的地址 原地址 报文 ...
- HTML canvas绘制椭圆
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 团队作业9——展示博客(Beta版本)
展示博客 1.团队成员的简介和个人博客地址,团队的源码仓库地址. 何琴琴(http://www.cnblogs.com/vviane/): 领导项目进行,协调各队员之间的矛盾合作,负责测试与需求分析. ...
- 201521123050 《Java程序设计》第7周学习总结
1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 代码: public boolean contains(Object o) ...
- 201521123092,《java程序设计》第1周学习总结
1.本周学习总结 这一周是我学习java的第一周,刚接触一门全新的编程语言,觉得还是有点困难的,很多基础性的java知识需要一点点学习,我会请教同学以及查询网上的学习资料,认真学好这一门学科. 本周学 ...
- Java课程设计----仿Windows标准型计算器
JAVA课程设计 仿Windows标准型计算器(By Yanboooooooo) 一.团队介绍: 连燕波[组长]:网络1513学生. 张文博[组员]:网络1513学生. 二.项目git地址 码云项目地 ...