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 ...
随机推荐
- 交换基本数据类型的方法swap,并影响到主方法
不知道朋友在哪里看到的问题,qq来问我,题目是:在不修改主方法的前提下使用一个方法交换两个int的值,方法如下: public static void main(String[] args) { In ...
- VB与C#语言部分不用的地方Part1
1. 数据类型: ① 日期型(Date) 表示日期和时间用两个“#”符号把日期和时间的值括起来,如:#08/20/2001#.#2001-08-20#. ② 变体型(Variant) ...
- CCIE-MPLS VPN-实验手册(中卷)
5:MPLS VPN PE CE OSPF 实验1 5.1 实验拓扑 5.2 实验需求 a. R1 R2 R3 组成P-NETWORK,底层协议采用EIGRP b. R1 R2 R3 直连链路启用LD ...
- C# 引用类型之特例string
在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便: 1)字符串的直接赋值:本身字符串就是引用类型,应 ...
- 团队作业八——第二次团队冲刺(Beta版本)第4天
团队作业八--第二次团队冲刺(Beta版本)第4天 一.每个人的工作 (1) 昨天已完成的工作 做一下用户注册的功能和登录功能. (2) 今天计划完成的工作 完成界面跳转 (3) 工作中遇到的困难 界 ...
- 201521123093 java 第六周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 学习目标或者作业的制定(SMART原则)
以下文字摘自邹欣老师的博客 很高兴看到学生们都写了自己的目标: http://www.cnblogs.com/deng201421123059/p/6435346.html 不得不说,有些同学的目标太 ...
- 201521123096《Java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 (1)互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- JAVA课程设计个人博客 学生成绩管理 201521123014 黄绍桦
1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 本人主要负责DAO模式.添加和修改学生的信息功能 ...
- Eclipse rap 富客户端开发总结(9) : rap上传与下载
一 上传 上传即将文件上传到服务器上,在客户端需要写相应的脚本,服务器端需要注册相应的 handle 接受客户端的请求. 原理: Rap 的上传和下载是通过普通的 web 的方式进行上传和下载的 , ...