`
haofeng82
  • 浏览: 141405 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

hibernate和spring的整合

阅读更多
一,整合带来的好处
整合spring和hibernate后较纯hibernate会给我们带来哪些方便呢?
我认为主要有下面几点:
1 利用IOC进行业务对象与持久化对象的生成及组合,如果整合了struts,则还可以一并组织管理Action。这样我们就无需手工创建及组织。
2 利用aop功能为数据库操作增加事务管理,这是我们的持久层代码大大简化,在将不会出现任何关于事务的代码。事务统一由spring进行管理。
3 无须对session进行管理,不用编写session的获得与关闭代码。
这样,我们的持久层代码就会大大的简化。去掉了大部分冗余繁琐的代码。
二,如何整合?
Spring提供了多种整合方法,我认为最有效的一种是继承HibernateDaoSupport来实现DAO。
继承了HibernateDaoSupport的类可以通过this.getHibernateTemplate()获得到一个HibernateTemplate对象。这个对象可以理解成对Session的封装(只是理解成而已),使用它你可以做一些使用session做的事情,如查询单个对象,删除,简单查询。但是比较复杂操作的就有可能无法完成(如复杂查询),对于这种情况我们可以调用HibernateTemplate的execute(HibernateCallBack callBack)来编写原始hibernate代码来进行查询。
数据库操作重要的一点是事务,spring事务的说明请见下面的文章。
使用spring管理事务后,我们将不用手工编写事务代码。
下面我们看一下具体的实现
说一下大体的结构
HelloWorld Action(Struts Action 对象,由spring管理,具体方法见下文:)
调用业务对象personbean的saveToPersistentStore方法去进行持久化操作。saveToPersistentStore中通过调用UserDAO去进行持久化操作
我们看一下这三个类的源码:
Action:
package com.hf.struts.sayHello;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.hf.bean.sayHello.PersonBean;
public final class HelloAction extends Action {
PersonBean pb = null;
/**
* Process the specified HTTP request, and create the corresponding HTTP
* response (or forward to another web component that will create it).
* Return an <code>ActionForward</code> instance describing where and how
* control should be forwarded, or <code>null</code> if the response has
* already been completed.
*/
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String userName = (String)((HelloForm) form).getUserName();
pb.setUserName(userName);
int times=pb.saveToPersistentStore();
request.setAttribute( "personbean", pb);
request.setAttribute("times",String.valueOf(times));
//request.setAttribute("times",String.valueOf(1));
request.removeAttribute(mapping.getAttribute());
return (mapping.findForward("displayHello"));
}
public PersonBean getPb() {
return pb;
}
public void setPb(PersonBean pb) {
this.pb = pb;
}
}
Personbean:

package com.hf.bean.sayHello;
import com.hf.dao.sayHello.UserDAO;
import com.hf.hibernate.pojo.User;
public class PersonBean {
private UserDAO userDAO=null;
private String userName = "";
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
/**
* This is a stub method that would be used for the Model to save
* the information submitted to a persistent store. In this sample
* application it is not used.
* @return
*/
public int saveToPersistentStore() {
User user=userDAO.getUserByName(this.getUserName());
if(user==null){
return userDAO.saveUser(this.getUserName());
}else{
return userDAO.updateUser(user.getId());
}
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
UserDAO:

package com.hf.dao.sayHello;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.hf.hibernate.pojo.User;
import com.hf.util.sequence.IDGenerator;
publicclass UserDAO extends HibernateDaoSupport {
public User getUserByName(String name){
try{
if(name!=null){
List list =this.getHibernateTemplate().find("from User user where user.name=?",name);
if(list!=null&&list.size()==1){
User user=(User) list.get(0);
return user;
}
}
}catch(Exception e){
e.printStackTrace();
}
finally{
}
//���?вѯ���
分享到:
评论

相关推荐

    c++蓝桥杯刷题代码.zip

    蓝桥杯 c++刷题代码

    Windows11_InsiderPreview_EnterpriseVL_x64_zh-cn_26080.iso.009

    Windows11_InsiderPreview_EnterpriseVL_x64_zh-cn_26080.iso.009

    2024年6月彩虹易支付最新版源码

    2024/05/01: 1.更换全新的手机版支付页面风格 2.聚合收款码支持填写备注 3.后台支付统计新增利润、代付统计 4.删除结算记录支持直接退回商户金额 2024/03/31: 1.商户支付统计支持日期范围查询 2.修复进件商户聚合收款码支付问题 2024/03/21: 1.修复进件商户相关支付问题 2.代付支持查询转账凭证 2024/03/01: 1.支持微信转账到银行卡接口 2.优化手机扫码跳转逻辑 3.支付宝电脑网站支付兼容手机 2024/01/18: 1.优化用户中心收入统计显示 2.后台登录增加失败次数限制 2024/01/06: 1.更新微信商家小票页面样式 2.云闪付扫码支付支持直接跳转云闪付APP 3.增加杉德、付呗支付插件 2023/12/19: 1.更新PayPal、汇付、虎皮椒插件 2023/12/07: 1.新增使用邀请码注册功能 2.修复随机增减金额出现多位小数的问题 2023/11/08: 1.新增邀请返现功能,后台可设置返现比例 2.支持单独给用户组开启代付、邀请返现功能 3.可设置代付手续费与日最大代付笔数限制 4.手动提现可设置日

    FPGA课程实验-自动收货机.zip

    FPGA课程实验-自动收货机.zip

    esxi 7.0 home assistant 懒人安装包 二

    esxi 7.0 home assistant 懒人安装包无需等待网络下载 ,安装 就可以使用。只能esxi 7.0版本使用,由于文件比较大 ,就分了两个压缩包,这是第二个包。文件格式ova格式。要 6.7 懒人包 说一声。

    VBA关键字自动标记高亮关键字字体颜色.xlsm

    VBA关键字自动标记高亮关键字字体颜色.xlsm 将关键字设置高亮的颜色

    Multisim 14.0 的安装教程.md

    附件是Multisim 14.0 的安装教程.md,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    285_基于移动端的校园代跑腿系统的设计与实现-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    Photoshop软件的下载和安装教程.md

    附件是Photoshop软件的下载和安装教程.md,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    205_基于安卓的电子商城管理系统的设计与实现-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    基于Quick cocos2dx-lua 3.3实现的富文本,实现方式同c++的RichText

    【作品名称】:基于Quick cocos2dx-lua 3.3实现的富文本,实现方式同c++的RichText. 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于Quick cocos2dx-lua 3.3实现的富文本,实现方式同c++的RichText.

    按自定义分类率和图片大小进行批量压缩图片的python实现

    功能:批量压缩图片,可以指定分辨率和图片大小 流程: 需要先安装库 pip install Pillow 先确定好源文件夹和结果文件夹; 然后将源文件夹的所有图片进行压缩; 处理好的图片会保存到结果文件夹。

    电子科大-数字无线电仿真报告-基于带通采样结构的双边带调幅DSB 数字收发机的设计.zip

    电子科大-数字无线电仿真报告-基于带通采样结构的双边带调幅DSB 数字收发机的设计.zip

    乔治梅森大学(GMU)ECE636 高级数字信号处理课程matlab代码.zip

    乔治梅森大学(GMU)ECE636 高级数字信号处理课程matlab代码.zip

    207_基于安卓的会议室管理系统-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    tensorflow-gpu-2.9.0-cp310-cp310-win-amd64.whl

    数仓建模

    notebook-7.0.0a13-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    multisim14.0安装教程.txt

    multisim14.0安装教程

    suitesparse

    suitesparse中算法测试结果,包含cholmod、ccolamd、colamd、CSparse;结果中有命中率数据

    基于Python的彩图版飞机大战实现(源码+使用文档)

    系统概述 彩图版飞机大战游戏是一个飞行射击游戏,玩家控制飞机在太空环境中射击敌人,收集道具,并躲避敌人的攻击。 主要功能 玩家飞机控制:玩家可以使用键盘方向键控制飞机的移动和射击。 敌机生成与移动:游戏中会定期生成敌机,它们从屏幕顶部向下移动。 碰撞检测:游戏能够检测玩家飞机与敌机或子弹之间的碰撞。 得分与排行榜:玩家击中敌机可以获得分数,游戏结束后显示得分,并有机会进入排行榜。 游戏结束与重启:当玩家飞机被敌机击中时,游戏结束,并提供重新开始或退出游戏的选项。 技术架构 Python语言:使用Python语言进行游戏逻辑的编写。 Pygame库:利用Pygame库进行图形界面的创建和事件处理。 操作系统:支持Windows操作系统。 开发优势 易于学习:Python语言简洁,易于学习,适合初学者。 Pygame库:Pygame提供了丰富的游戏开发功能,简化了游戏开发的复杂性。 项目规划 需求分析:确定游戏的基本功能和操作流程。 系统设计:设计游戏界面、关卡布局和游戏逻辑。 编码实现:使用Python和Pygame库编写游戏代码。 测试验证:进行游戏测试,确保游戏的可玩性和稳定性。

Global site tag (gtag.js) - Google Analytics