当前位置: 首页 > news >正文

Spring JpaTransactionManager事务管理

首先,在做关于JpaTransactionManager之前,先对Jpa做一个简单的了解,他毕竟不如hibernate那么热门,其实二者很相识,只不过后期hibernate和JDO 版本都已经兼容了其Jpa,目前大家用的少了。

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。

JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

ORM映射元数据

JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

API

用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

查询语言

这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

下面,做一些JPA简单的例子,让大家熟悉一下JPA的配置:

1.productDao.java

package com.spring.jpa;import com.spring.model.Product;public interface ProductDao {public void save(Product p);
}

复制

2.productDaoImpl.java

package com.spring.jpa;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import com.spring.model.Product;public class ProductDaoImpl implements ProductDao {	public void save(Product p) {		EntityManagerFactory emf = Persistence.createEntityManagerFactory("SimplePU");		EntityManager em = emf.createEntityManager();		em.getTransaction().begin();		em.persist(p);		em.getTransaction().commit();		emf.close();	}}

复制

3.ProductManager.java

package com.spring.jpa;import com.spring.model.Product;public interface ProductManager {		public void save(Product p);}

复制

4.ProductManagerImpl.java

package com.spring.jpa;import com.spring.model.Product;public class ProductManagerImpl implements ProductManager{		private ProductDao productDao = new ProductDaoImpl();		@Override	public void save(Product p) {		productDao.save(p);	}}

复制

5.persistence.xml

<?xml version="1.0" encoding="UTF-8"?><!-- 切记,该文件一定要放在/WEB-INF/classes/META-INF这里才能生效 --><persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">	<persistence-unit name="SimplePU"		transaction-type="RESOURCE_LOCAL">		<provider>org.hibernate.ejb.HibernatePersistence</provider>		<class>com.spring.model.Product</class>		<properties>			<property name="hibernate.connection.driver_class"				value="com.mysql.jdbc.Driver" />			<property name="hibernate.connection.url"				value="jdbc:mysql://127.0.0.1:3306/jinhonglun" />			<property name="hibernate.connection.username" value="root" />			<property name="hibernate.connection.password" value="root" />			<property name="hibernate.dialect"				value="org.hibernate.dialect.MySQL5Dialect" />			<property name="hibernate.show_sql" value="true" />			<property name="hibernate.format_sql" value="true" />			<property name="hibernate.use_sql_comments" value="false" />			<property name="hibernate.hbm2ddl.auto" value="update" />		</properties>	</persistence-unit></persistence>

复制

6.SimpleSpringJpaDemo.java

package com.spring.jpa;import com.spring.model.Product;public class SimpleSpringJpaDemo {	public static void main(String[] args) {		Product p = new Product();		p.setProductTitle("JPA测试");		new ProductManagerImpl().save(p);	}}

复制

接下来进行主题介绍JpaTransactionManager: * 我们引入 Spring,以展示 Spring 框架对 JPA 的支持。业务层接口 ProductManager 保持不变,ProductManagerImpl 中增加了三个注解, * 以让 Spring 完成依赖注入,因此不再需要使用 new 操作符创建 ProductDaoImpl 对象了。同时我们还使用了 Spring 的声明式事务:

1.ProductDaoImpl.java

package com.spring.jpaTransactionManager;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;import com.spring.model.Product;@Repository("productDao")public class ProductDaoImpl implements ProductDao {		@PersistenceContext 	private EntityManager em; 		@Transactional	public void save(Product p) {		em.persist(p);	}}

复制

2.ProductManagerImpl.java

package com.spring.jpaTransactionManager;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.spring.model.Product;@Service("productManager")public class ProductManagerImpl implements ProductManager{		@Resource	private ProductDao productDao;		@Transactional	@Override	public void save(Product p) {		productDao.save(p);	}}

复制

3.SimpleSpringJpaDemo.java

package com.spring.jpaTransactionManager;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.spring.model.Product;public class SimpleSpringJpaDemo {	public static void main(String[] args) {		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/com/spring/jpaTransactionManager/spring-jpa.xml");		ProductDao productDao = ctx.getBean("productDao", ProductDao.class);				Product p = new Product();		p.setProductTitle("JPA  Spring与JpaTransactionManager结合测试");		productDao.save(p);	}}

复制

4.spring-jpa.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/

相关文章:

Spring JpaTransactionManager事务管理

首先&#xff0c;在做关于JpaTransactionManager之前&#xff0c;先对Jpa做一个简单的了解&#xff0c;他毕竟不如hibernate那么热门&#xff0c;其实二者很相识&#xff0c;只不过后期hibernate和JDO 版本都已经兼容了其Jpa&#xff0c;目前大家用的少了。 JPA全称Java Persi…...

全国职业院校技能大赛网络建设与运维赛项赛题(七)

全国职业院校技能大赛 网络建设与运维 赛题 (七)...

asp.net+sqlserver企业公司进销存管理系统

基于WEB的进销存管理系统主要企业内部提供服务&#xff0c;系统分为管理员&#xff0c;和员工2部分。 在本基于WEB的进销存管理系统中分为管理员&#xff0c;和普通用户2中模式&#xff0c;其中管理人员主要是对企业内商品类型。商品信息商品的出入库信息&#xff0c;以及员工…...

WxGL应用实例:绘制点云

WxGL附带了几个工具函数&#xff0c;其中read_pcfile用来解析.ply和.pcd格式的点云文件&#xff0c;该函数返回一个PointCloudData类实例&#xff0c;包含以下属性&#xff1a; PointCloudData.ok - 数据是否可用&#xff0c;布尔型PointCloudData.info - 数据可用性说明&…...

一个月内面了30家公司,薪资从18K变成28K,真行啊····

工作3年&#xff0c;换了好几份工作&#xff08;行业流行性大&#xff09;&#xff0c;每次工作都是裸辞。朋友都觉得不可思议。因为我一直对自己很有信心&#xff0c;而且特别不喜欢请假面试&#xff0c;对自己负责也对公司负责。 但是这次没想到市场环境非常不好&#xff0c;…...

《计算机网络——自顶向下方法》精炼——1.4到1.7

三更灯火五更鸡&#xff0c;努力学习永不止。无惧困难与挑战&#xff0c;砥砺前行向成功。 文章目录 引言正文时延排队时延 吞吐量协议层次&#xff0c;服务模型&#xff08;重点&#xff09;封装&#xff08;重点&#xff09;网络安全&#xff08;选看&#xff09;恶意软件的分…...

消息队列 (Message Queue)

消息队列 What 消息队列 是消息的队列&#xff1b;是消息的临时缓冲&#xff1b;是发布/订阅模式的兄弟&#xff1b;在多个进程/线程间实现异步通讯模式。 Why 消息队列在多个进程/线程中实现了异步通讯模式。 这里我们先介绍下同步消息处理。对于同步消息处理&#xff0…...

JavaScript原型链污染学习记录

1.JS原型和继承机制 0> 原型及其搜索机制 NodeJS原型机制&#xff0c;比较官方的定义&#xff1a; 我们创建的每个函数都有一个 prototype&#xff08;原型&#xff09;属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c; 而这个对象的用途是包含可…...

顶级白帽黑客必备的十大黑客技术

1.熟悉Linux系统和命令行操作&#xff1a; Linux是黑客的基石&#xff0c;几乎所有黑客工具和技术都是在Linux平台上运行的&#xff0c;熟悉Linux系统和命令行操作是必须的。 2.掌握网络协议和TCP/IP模型&#xff1a; 了解TCP/IP模型、网络协议和通信流程是黑客攻击的基础&a…...

【关于认证鉴权一些概念梳理】

关于认证鉴权一些概念梳理 记录一些灵感瞬间聊聊Session&#xff0c;Cookie和Token三剑客的特性前后端分离登录中的springsecurity与不分离的异同三更up关于springSecurity的讲解B站知乎上关于springSecurity的讲解掘金大佬SpringSecurityJWT认证流程解析一个权限对应一个资源&…...

16.网络爬虫—字体反爬(实战演示)

网络爬虫—字体反爬 一字体反爬原理二字体反爬模块FonttoolsTTF文件 三FontCreator 14.0.0.2790FontCreatorPortable下载与安装 四实战演示五后记 前言&#xff1a; &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &#x1f396;️&#x1f396;️:Python领域…...

BOM概述

目录 什么是BOM 浏览器对象模型&#xff08;Browser Object Model (BOM)&#xff09; Window对象 一些常用方法 JavaScript Window Screen Window Screen Window Screen 高度 Window Screen 可用宽度 Window Screen 可用高度 Window Screen 色深 Window Screen 像素深…...

3.Docker实用技术

Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…...

群体无人机:协同作战的未来

摘要&#xff1a;本文将探讨群体无人机技术的发展及其在多个领域的应用&#xff0c;特别是在军事作战、救援任务和物流方面的潜力。我们将分析群体无人机在协同作战中的优势&#xff0c;以及如何通过协同控制和通信技术实现更高效的任务完成。 内容&#xff1a; 引言 简要介绍…...

如何在Windows AD域中驻留ACL后门

前言 当拿下域控权限时&#xff0c;为了维持权限&#xff0c;常常需要驻留一些后门&#xff0c;从而达到长期控制的目的。Windows AD域后门五花八门&#xff0c;除了常规的的添加隐藏用户、启动项、计划任务、抓取登录时的密码&#xff0c;还有一些基于ACL的后门。 ACL介绍 …...

LVGL移植——stm32f4

LVGL移植说明 移植LVGL版本&#xff1a;8.3.6 主控&#xff1a;STM32F407ZGT6 github链接&#xff1a;https://github.com/lvgl/lvgl.git 文章目录 LVGL移植说明STM32移植LVGL①需要的依赖文件②移植显示驱动文件③将文件加入工程当中④配置心跳④修改栈堆的空间⑤编译链接 STM…...

ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7

编辑&#xff1a;ll ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7 型号&#xff1a;ADP5054ACPZ-R7 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;LFCSP-48 批号&#xff1a;2023 引脚数量&#xff1a;48 工作温度&#xff1a;-40C~125C 安装类型&#xff1a;表…...

TCP/IP相关面试题

1. 什么是TCP/IP协议&#xff1f;它的作用是什么&#xff1f; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;互联网中最常用的协议&#xff0c;是计算机网络通信的基础。由TCP协议和IP协议两部分组成。IP协议负责数据的传输和路由选择&#…...

MySQL数据库——MySQL存储过程是什么?

我们前面所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句&#xff0c;但是在数据库的实际操作中&#xff0c;经常会有需要多条 SQL 语句处理多个表才能完成的操作。 例如&#xff0c;为了确认学生能否毕业&#xff0c;需要同时查询学生档案表、成绩表和综合表&…...

消息队列中的事务消息

大家好&#xff0c;我是易安&#xff01;今天我们谈一谈消息队列中的事务消息这个话题。 一说起事务&#xff0c;你可能自然会联想到数据库。我们日常使用事务的场景&#xff0c;绝大部分都是在操作数据库的时候。像MySQL、Oracle这些主流的关系型数据库&#xff0c;也都提供了…...

Three.js 开发环境搭建避坑指南:从零开始用Parcel构建你的第一个3D场景

Three.js 开发环境搭建避坑指南&#xff1a;从零开始用Parcel构建你的第一个3D场景 第一次接触Three.js时&#xff0c;最令人头疼的往往不是3D编程本身&#xff0c;而是那些看似简单却暗藏玄机的环境配置问题。记得我刚开始学习时&#xff0c;光是让一个立方体在浏览器中显示出…...

FireRedASR Pro Java集成开发指南:SpringBoot微服务语音处理实战

FireRedASR Pro Java集成开发指南&#xff1a;SpringBoot微服务语音处理实战 如果你是一个Java后端开发者&#xff0c;最近接到了要给系统加上语音识别功能的需求&#xff0c;比如处理用户上传的客服录音&#xff0c;或者分析会议纪要&#xff0c;那你可能正在寻找一个既稳定又…...

OpenClaw安全指南:GLM-4.7-Flash环境下的权限控制与风险规避

OpenClaw安全指南&#xff1a;GLM-4.7-Flash环境下的权限控制与风险规避 1. 为什么需要特别关注OpenClaw的安全配置&#xff1f; 去年夏天&#xff0c;我在调试一个自动整理照片的OpenClaw任务时&#xff0c;差点酿成大祸。脚本误将整个/Users/Shared目录识别为待处理文件夹&…...

技术经理必修管理知识:从管理到领导——高阶技术管理者的自我修养

08-技术经理必修管理知识&#xff1a;从管理到领导——高阶技术管理者的自我修养管理者正确地做事&#xff0c;领导者做正确的事。管理的终点是效率&#xff0c;领导的起点是方向。当你开始思考"我们该往哪里走"而不是"我们该怎么走快一点"&#xff0c;你就…...

红海跟风:为何亚马逊上“更好的产品”往往死得最快

在亚马逊这片由算法和心智认知共同统治的战场上&#xff0c;无数跟随者都死于同一种“绝症”&#xff1a;相信只要产品比领导者“更好”&#xff0c;就理应获得成功。​ 他们投入大量时间优化参数、增加无关紧要的功能、或进行微弱的降价&#xff0c;却将最宝贵的“时机”和“心…...

OpenClaw/阿里copaw/阿里QoderWork/腾讯Qclaw/腾讯workbuddy综合对比

1、功能介绍 核心能力&#xff1a;自然语言交互、本地文件操作、代码执行 支持模型&#xff1a;Qwen、Deepseek、OpenAI 等主流厂家模型均支持&#xff08;硬件条件允许&#xff0c;也可通过ollama连接本地模型&#xff09; 机器人助手&#xff1a;飞书、企业微信、QQ等创建…...

IC设计工程师必看:ESD测试四大组合详解与实战避坑指南

IC设计工程师必看&#xff1a;ESD测试四大组合详解与实战避坑指南 在集成电路设计领域&#xff0c;静电放电&#xff08;ESD&#xff09;防护能力是衡量芯片可靠性的关键指标之一。据统计&#xff0c;超过35%的芯片失效案例与ESD事件相关&#xff0c;而设计阶段的防护策略直接影…...

nlp_structbert_sentence-similarity_chinese-large 效果展示:中文文本相似度计算精准度测评

nlp_structbert_sentence-similarity_chinese-large 效果展示&#xff1a;中文文本相似度计算精准度测评 最近在做一个智能客服的项目&#xff0c;需要判断用户提问和知识库答案的匹配度。试了好几个开源模型&#xff0c;效果总是不太理想&#xff0c;要么把意思完全相反的句子…...

颠覆叙事设计:用Arrow打造3类互动故事的零代码解决方案

颠覆叙事设计&#xff1a;用Arrow打造3类互动故事的零代码解决方案 【免费下载链接】Arrow Game Narrative Design Tool 项目地址: https://gitcode.com/gh_mirrors/arrow/Arrow 在游戏开发的黄金时代&#xff0c;叙事设计师们正面临着前所未有的创作困境&#xff1a;当…...

Pyrocko + PSGRN/PSCMP小问题

1.先看看你的脚本&#xff0c;然后诊断 config 文件的问题。问题很明确——YAML 解析 config 文件时在 earthmodel_1d 块标量那里报错。大概率是 |2 缩进指示符和实际内容缩进不匹配。 让我先下载脚本看看&#xff0c;然后直接诊断&#xff1a;fomosto 不在当前环境&#xff0…...