关于Spring4与Hibernate4整合

spring4+springmvc+hibernate4整合步骤详细解释 整合了ssh的基本开发步骤,把所有功能以及怎么实现需要的jai包作用全部包含在里面 配套一个案例包含增删改查 立即下载
在做Spring4和Hibernate4整合项目的时候,遇到了很多问题,今天总结一下,方便备忘。

其实这是第二次做这样的整合,因为第一次完全没去关心Spring4和Hibernate4到底和3有什么不一样,但是第二次做的时候,因为业务复杂、逻辑较多报出很多很多的BUG,让我只有老老实实的重新学习和认识一下这两个框架及其整合,今天终于在同事和自己研究的情况下得出了一套自己认为比较合适,而且很简单的整合方案,并记录下来让自己学习和改进,也让大家参考一下,希望能改进本整合方案。

整合原则:最少配置原则(尽量减少XML的配置,而是使用注解方式)
整体框架:Spring4 + Hibernate4 + SpringMVC + Maven3
数据库:mysql

首先第一点讲到的是:
   Spring4对Hibernate的支持,因为Spring对Hibernate的支持只到了Hibernate3X,所以Hibernate4中,就不能使用那个Spring提供的Template来进行数据库查询。那该怎么办呢?我自己想了想,第一我们使用了Spring,所以我们应该将所有的Bean交给Spring来管理,关键是如何才是交给Spring来管理的呢?
    1.Hibernate SessionFactory
       在原生Hibernate框架中,我们是通过SessionFactory.openSession()来获取Session的,所以从这一点我们可以猜测出我们首先的有一个交给Spring管理的SessionFactory,然后我们才能拿的到Session,然后我们才能操作数据库。所以我们首先的在Dao的实现层注入SessionFactory代码如下:
图片

图片


这样我们就得到一个Spring管理的SessionFactory。那么问题又来了,我们是如何获取Session的呢?试想一下,如果是openSession的话那么得到Session是由Spring管理的吗?答案是否定的,openSession是得到一个新的Session,而不是由Spring提供的,那么如何实现呢,到网上找找,发现了一些蛛丝马迹,SessionFactory提供了一个方法getCurrentSession(),获取的是当前Session,那么我们就可以从这里入手了,首先我是尝试了下,直接这样获取Session,结果报错了,(给我说没有这样的Session在当前线程中)。那好吧,我就想既然没有,那么我就将Session绑定到当前线程中就可以了三,我就在Spring配置文件中,配置数据源那里添加上了:
图片

就这样我们就绑定上了,但是这只是错误的开始,当我高高兴兴的再次测试时,MD又错了,这次
 createSQLQuery is not valid without active transaction
 
曾几度怀疑是否配置写出了,dao或service写错了,改来改去的依旧存在问题。当时相当郁闷啊,想啊,你spring不是帮我管理事务么?你不自动开启事务啊,还要我手动开启啊。立马查spring文档,从中文到英文,没发现什么有参考价值的线索,真是相当的打击,代码乱改一通。不死心的去查了hibernate的doc,MD就是咋们刚刚配置的属性绑定到当前线程这个,所以这样我们就陷入了一个死循环,我当时也纠结了很久,好吧这样不行那就只有换种方式了。

那么首先想到的就是咋们注入SessionFactory的方式不对,因为这样获取的Session是错误的,根本不能帮我们解决问题,那么自然就想到换一种方式获取SessionFactory,我们刚刚使用setSessionFactory的方式注入的,那么我们使用构造方法注入SessionFactory,但是为什么构造注入就可以了呢?原因是因为,两种注入方式的依赖不同:set方法注入,是先实例化DaoImpl,在判断sessionFactory是否存在,不存在则在实例化sessionFactory,再通过DaoImpl的set方法注入,这样的话我们可以理解为:就算没有注入sessionFactory,DaoImpl也是可以工作的,所以两者不存在依赖关系,而是组合关系,所以我们获取到的sessionFactory和我们DaoImpl无法正常的关联起来,所以获取的session也需要绑定当前线程,就算绑定了事务也无法自动开启等问题就出现了。
那么构造注入的方式就是:首先你得先调用sessionFactory的构造,实例化之后才能调用DaoImpl的构造,再将sessionFactory当作参数传入
DaoImpl的构造,所以构造注入提现了如果没有sessionFactory,就没有DaoImpl,所以两者是依赖关系,那么他们就相互绑定的,所以问题就迎刃而解了。(自己研究出来的还是有点小激动,如果有误请指点~)
图片


这样以上的问题就都解决了。
 

接下来从Spring事务入手 ,咋们事务采用的是注解的方式,即使用了:
图片
 
proxy-target-class这个是什么呢?其实是设置代理模式,让事务强制使用cglib的代理,而不是JDK代理,因为:

和CGLIB不同的是,JDK代理只能代理接口,不能代理类。 
使用JDK代理时,如何处理一个特定的方法调用的决定是在程序运行时做出的,也就是在每次方法被调用时。使用CGLIB代理可以边开这种处理方法,CGLIB会在运行中随时为代理创建新类的字节码,并尽可能的重用已经生成的类的字节码。

CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强。
 
既然是注解的形式,咋们注解注解到哪里呢?我们想想以前AOP设置切点的位置,一般都是在Service中设置,那咋们的事务注解也应该在
Service层吧。那好,其实注解形式的,和配置区别不大,配置文件主要是针对一个类或者是一个类中的某些方法,又或者是一个包;那么注解针对的是一个方法,使用@Transactional,同样也可以配置事务的传播行为和隔离模式,而且我觉得这种方式更精准吧,哈哈,不多说贴代码:
图片


 propagation是传播行为的配置
 isolation 是隔离模式的配置

这里有一点就是,当你事务设置了readOnly属性的时候,只读会影响你事务的提交,最好在有对数据库进行增删改的时候设置readOnly为false。

 再说一点就是@Transactional事务回滚,需要抛出RuntimeException才会回滚事务,如果要设置自定义异常回滚,需要设置
rollbackFor等属性具体的我就不详细解释了,自己看API比较好,这样容易记住,我这里说了也就说了。

那这样真的就整合完成了吗?那你就错了,按照常理来说这样已经整合完成了,但是这里因为在Service层使用了@Transactional,查了Doc发现@Transactional不能和@Service注解连着用,会出现Session不能flush的问题,这样事务就不能正常提交。(我当时就想说坑爹啊)那好吧这样咋们该怎么办呢?其实这有点像脑经急转弯,既然不能用@Service,那咋们就不用了,转成写配置吧:
图片
 
因为Dao使用了注解,所以这里无需引用

这样咋们的整合算是真的完成了,虽然只有那么一点点,但是也是值得研究的。

其他地方配置和注解方式基本没有改变如:web.xml,Springmvc的配置等。

补充一点:mysql也会引起事务不能提交的问题主要是对于数据库引擎的选择,MyISAM这个引擎是不能提交事务的,所以建议改为InnoDB
Spring+SpringMVC+Hibernate4+Ext4 完整的系统 Spring+SpringMVC+Hibernate4+Ext4 完整的系统,有助于理解开发,保护用户,角色,资源等等模块及framework基础。 立即下载

相关推荐

(eclipse)spring4.16 springmvc hibenate4.3.1整合

(eclipse)spring4.16 springmvc hibenate4.3.1整合

spring+hibernate4整合

1、三种整合方式 1.1 HibernateTemplate HibernateTemplate是Spring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作。 需要在xml中先配

refire 669

springMVC+hibernate+spring+shiro整合例子

springMVC+hibernate+spring+shiro整合例子 springMVC、hibernate、spring与shiro集成

Spring4整合Hibernate4详细示例

1. Spring整合Hibernate,主要是解决什么问题? a、让Spring提供的IOC容器来管理Hibernate的SessionFactory b、让Hibernate使用Spring提供的声明式事物 2. 整合步骤: 新建一个Java工程,并新建用来保存依赖jar包的lib目录 ①. 加入Hibernate...

weixin_30596023的博客 445

工业场景实战:基于YOLO与多格式标注的传送带异物检测数据集构建指南

本文详细介绍了基于YOLO与多格式标注的传送带异物检测数据集构建方法,涵盖数据采集、标注技巧(YOLO、COCO、VOC格式)、数据增强策略及实战案例。通过工业级解决方案,有效提升异物检测准确率与效率,适用于各类工业场景。

weixin_29168393的博客 463

(project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]

解决办法 第一步,检查自己是不是真的配置的不对,JAVA安装没,pack路径设置的对不对,这里有一位前辈的博文写的非常好,附加链接https://blog.youkuaiyun.com/ybhuangfugui/article/details/52225736#commentBox 第二步,如果按照前辈的博文设置的都一模一样,还是不对,想我下图这样。 那你来对地方了 方法很简单,你把你生成工程文件的路径彻底的...

展桑博客-BenjieBlog 2922

[Spring]Spring4+Hibernate4整合详解

[Spring]Spring4+Hibernate4整合详解

Konaji 4875

Zemax非序列模式新手入门:从零搭建一个抛物面反射镜系统(含灯丝光源与探测器设置)

本文详细介绍了如何在Zemax非序列模式下从零搭建抛物面反射镜系统,包括灯丝光源配置、反射镜建模和探测器设置等关键步骤。通过实战指南,帮助光学设计新手快速掌握非序列模式的应用技巧,特别适合处理复杂光线传播场景如反射镜系统和杂散光分析。

weixin_28717431的博客 436

无XML配置,注解实现Spring4集成Hibernate4(含事务管理)入门及例子说明

无XML配置,注解实现Spring4集成Hibernate4(含事务管理) 引言 借助Spring的DI的强大支持,通过注解的方式,无任何XML配置,即可轻松实现Spring4集成hibernate4框架进行数据库表的操作,更重要的没有事务的开始、关闭、会话连接的提交等烦琐代码,将工作重点放在业务逻辑开发上,真正提高工作效率。 1. 预先生成entity 无需xml,参考另一篇...

hills的专栏 387

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 754

Palantir 凭什么两年涨 20 倍?深度解析解决 AI 幻觉的 “本体论“ 核心原理

本文深度解析了Palantir本体(Ontology)的核心原理及其在企业AI应用中的革命性价值。本体通过构建结构化的语义层与动态执行层,将企业分散的数字资产(数据集、虚拟表、模型)映射为现实世界的数字孪生,使大模型能够在**严格的业务规则与数据边界内**进行推理与决策,从而从架构层面彻底解决AI幻觉问题。这一技术架构不仅帮助Palantir实现股价两年增长20倍、市值突破4000亿美金的商业成功,更成为SAP、Salesforce等ERP巨头争相模仿的下一代企业智能标准范式。通过航空业飞机故障应急处理等实

program哲学 222

spring4.x + hibernate4.x 配置详解

spring4.x + hibernate4.x 配置详解 关于spring和hibernate的使用以及特征等等,在此不再啰嗦,相信大家也都知道,或者去搜索一下即可。 本篇博文的内容主要是我最近整理的关于spring4.x 和 hibernate 4.x 相关配置和使用方式,当然spring3.x以及hibernate4.x也可以借鉴。   首先是配置文件 web.xml 增加以下代

海风的专栏 725

计算机视觉教程2-3:图解双线性插值算法&最近邻插值算法

提出此算法的背景是基于图片的缩放,在图片缩放的过程中,实质上就是将原图像像素矩阵像素值,填到目标图像像素矩阵中,目标图像像素矩阵可能比原图像像素矩阵大(图片放大),也可能小(图片缩小)。我们假设图片的宽(WidthWidthWidth)和高(HeightHeightHeight)是按同比例缩放的,那么 srcXsrcWidth=dstXdstWidth\frac{srcX}{srcWidth}= \frac{dstX}{dstWidth}srcWidthsrcX​=dstWidthdstX​ ...

FRIGIDWINTER的博客 7281

spring4+hibernate5整合

hibernate在实际应用中,很少单独使用的,基本都是和spring一起使用,这里介绍如何整合spring4+hibernate5。hibernate与spring整合,配置文件hibernate.cfg.xml就不需要了,配置信息直接提到spring配置文件里面,hibernate的sessionFactory交给spring容器管理,不再单独通过Configuration来构建。 整合首先...

feinifi的博客 3065

激光焦点动态跟踪技术实战大揭秘:电容式与同轴视觉的巅峰对决

激光焦点动态跟踪技术是保证激光加工质量的关键因素。本文对比评测了电容式和同轴视觉两种主流技术:电容式响应速度快、成本低,适合高速稳定加工环境,但易受电磁干扰;同轴视觉精度高、抗干扰强,适合精密加工和复杂工件,但成本较高且处理速度受限。评测结果表明,企业应根据加工需求、预算和环境选择合适技术。未来该技术将向智能化、多技术融合方向发展,为工业应用提供更优解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 124

数控系统(CNC)系列:Fanuc 31i-B_(16).CNC系统的网络连接与数据传输

硬件连接:包括网络接口的类型、连接方式等。网络协议:常用的网络协议包括Ethernet、Modbus TCP、Profinet等。网络配置:如何在CNC系统中配置网络参数,使其能够正确接入网络。在网络化的现代工业生产环境中,CNC系统的网络连接和数据传输能力变得越来越重要。通过以太网、Modbus TCP和Profinet等网络协议,可以实现CNC系统与上位机、其他CNC系统以及各种工业设备之间的高效通信。

2401_87715305的博客 2434

struts2+spring4+hibernate5整合实例

struts2作为一个很传统的mvc框架,在一些项目中,仍然发挥着重要的作用,另外hibernate和spring的结合也是很常见的,这里介绍struts2+hibernate5+spring4的整合,因为struts2支持最高的spring是4版本,所以这里采用的是spring4。整合的思路比较简单,可以从struts2+spring整合,然后接着整合hibernate+spring。也可以反过...

feinifi的博客 1777

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

spring3与hibernate4的整合

首先,spring与hibernate3整合时有三种方式:1、直接使用SessionFactory(该SessionFactory由spring管理并注入)的方式:                           @Resource public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFa

tonysong111073的专栏 9229

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

spring4整合hibernate5.1

在另一篇文章hibernate5(2)初入门配置实例中,我们针对hibernate5.1版本的崭新引导配置方法,完成了对数据库的的插入实例操作,在本节内容中,我们开始引入spring4,完成spring4与hibernate5.1的整合工作,像数据库中插入一条记录。在后面学习hibernate中,我们都会使用spring来管理我们的Bean容器。1. 导入spring4所需jar包我们推荐使用mav

总结沉淀 1万+

总结一下最近整合spring4和hibernate4遇到的问题

刚开始学习javaee,把自己遇到的主要问题总结一下,做个笔记,也希望给别人带来帮助,spring和hibernate均是>基于当前最新版本的上一个版本.4.3.7和4.3.11 遇到的问题 配置文件问题 代码编写问题 参考 项目目录结构 配置文件 webxml spring上下文 spring-servletxml pomxml 遇到的问题:配置文件问题在配置hibernate的session工

Kingber 7738

Spring4 MVC 整合Hibernate5 附源码下载

Spring4 MVC 整合Hibernate5     文章转自:anxpp.com     原文链接:http://anxpp.com/index.php/archives/261/     截止发帖时间(2016.01.22),Hibernate最新稳定版为5.0.7.Final,之前已经搭建好了 Spring4.2.4 的框架,这次我就直接基于之前的 Spri

anxpp的博客 5709

Hibernate4与spring整合找不到org.hibernate.cache.CacheProvider问题

使用Hibernate4与spring整合时出现问题 Caused by: java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider 如果声明事务还有另一个错误 Caused by: java.lang.ClassNotFoundException: org.springframework.orm.hibe

杨梅 1510

hibernate4 spring3 整合

hibernate4 spring3 整合   原文地址:http://loushi135.iteye.com/blog/1420309  原文提供了例子下载 由于hibernate4已经完全可以实现事务了 与spring3.1中的hibernatedao,hibernateTemplete等有冲突,所以spring3.1里已经不提供hibernatedaosupport,hib

jalorchen 712

SSH框架手动整合——Struts2+Hibernate4+Spring4

最近遇到过一些框架方面的问题,其中有MyBatis、SSH、SpringMVC,其中SSH的一些配置有些忘的差不多了,也有一些同事问了这些问题,前几个月也整合过SSH框架,那个时候是直接拿别人的Jar包直接整合框架,好像是Struts2+Hibernate3+Spring4,这次是相关的Jar从相关的官网下的。我整合的环境: ——Win 64 ——MySQL 5.6 ——MyEclipse 2

在此立一个IT职业上的flag:https://github.com/Zeb-D/my-review 2万+

Struts2、Spring4、Hibernate4整合 超详细教程

Struts2、Spring4、Hibernate4整合 超详细教程 项目目的:整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4)搭建项目架构原型。 项目架构原型:Struts2 + Spring4.0+ Hibernate4.2.4。 项目特色:同时使用了Struts2、Spring4、Hibernate4、log4j等库或框架,搭建一个最基本的项目原型。

龗孖 3450

J2EE中整合Spring4和hibernate4

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34014277的博客 80
Yousinnmu
博客等级 码龄13年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值