JBoss 4.2.x Spring 3 JPA Hibernate教程第2部分

我们将继续有关Spring 3 , Hibernate , JPA和JBoss 4.2.x – 4.3集成的教程 。

最后一步是创建一个Spring服务,以向最终用户公开功能。 我们必须创建一个接口类和相关的实现类。 首先是接口类:

package com.mycomp.myproject.services;import com.mycomp.myproject.dto.EmployeeDTO;public interface ExampleService {public EmployeeDTO findEmployee(long employeeId);public void saveEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void updateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void saveOrUpdateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void deleteEmployee(long employeeId) throws Exception;}

如您所见,这是一个经典的Java接口类。 我们将在EmployeeDTO对象上实现创建,检索,更新,删除(CRUD)函数。

以下是指定接口的实现类。

package com.mycomp.myproject.services.impl;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.mycomp.myproject.dao.EmployeeDAO;
import com.mycomp.myproject.dto.EmployeeDTO;
import com.mycomp.myproject.services.ExampleService;@Service("exampleService")
public class ExampleServiceImpl implements ExampleService {@Autowiredprivate EmployeeDAO employeeDAO;@PostConstructpublic void init() throws Exception {}@PreDestroypublic void destroy() {}public EmployeeDTO findEmployee(long employeeId) {return employeeDAO.findById(employeeId);}@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)public void saveEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO = employeeDAO.findById(employeeId);if(employeeDTO == null) {employeeDTO = new EmployeeDTO(employeeId, name,surname, jobDescription);employeeDAO.persist(employeeDTO);}}@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)public void updateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO = employeeDAO.findById(employeeId);if(employeeDTO != null) {employeeDTO.setEmployeeName(name);employeeDTO.setEmployeeSurname(surname);employeeDTO.setJob(jobDescription);}}@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)public void deleteEmployee(long employeeId) throws Exception {EmployeeDTO employeeDTO = employeeDAO.findById(employeeId);if(employeeDTO != null)employeeDAO.remove(employeeDTO);}@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)public void saveOrUpdateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO = new EmployeeDTO(employeeId, name,surname, jobDescription);employeeDAO.merge(employeeDTO);}}

这里要注意的事情:

  • 我们使用@Service (“ exampleService”)构造型注释,以便声明该类以名称“ exampleService”表示Spring服务。 Spring容器将在启动时实例化所有服务。
  • 我们使用@Autowire批注将DAO类的实例注入“ exampleService”。 为了正确地实例化服务, Spring容器必须首先解析服务中所有可能的引用,因此实例化DAO类并将实例注入到“ exampleService”的适当字段–“ employeeDAO”字段。 如果您想知道,依赖项注入是根据类型(类)完成的,如果不满足则是根据名称完成的,这意味着如果我们定义了多个相同类型(类)的服务,则注入的服务将是名称相同的服务作为指定字段。
  • 我们使用Java批注@PostConstruct@PreDestroy来声明在初始化(完成所有依赖项注入)和服务的先前销毁后Spring容器将调用的方法。
  • 对于需要对数据库执行更新操作的所有方法(INSERT,UPDATE,DELETE),我们使用@Transactional批注
  • 我们不要在对数据库执行检索(FIND)操作的方法上使用@Transactional批注(包含延迟初始化的引用的对象除外-请参见下文),和/或不执行数据库操作。 那是因为每次您调用一个注解为事务性的方法时, Spring容器都会涉及到调用JPA的实体管理器以及结果平台的事务管理器,从而定义了将要应用的事务行为,特别是引入了明显的性能损失。适用于低延迟/高吞吐量的应用程序。
  • 对于对包含延迟初始化的引用的对象执行检索(FIND)操作的方法,应使用@Transactional批注,指定“ NESTED ”传播类型,以使Spring可以为整个方法调用保持Hibernate会话打开
  • 事务处理行为仅应用于对服务的客户端调用。 事务行为不适用于内部操作调用。 例如,如果客户端调用未注释为事务性的操作,而后者的实现将对同一服务的另一个操作的调用引入了注释为事务性的调用,则对于合并的操作,将不会应用任何事务行为。
  • 最终用户应始终通过定义的界面访问服务

那确实是一个很大的教程!

希望你喜欢它。

贾斯汀

翻译自: https://www.javacodegeeks.com/2010/05/jboss-42x-spring-3-jpa-hibernate_21.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P1035 [NOIP2002 普及组] 级数求和

代码 import java.util.Scanner;public class Main {public static void main(String args[]){Scanner sc new Scanner(System.in);int k sc.nextInt();int n 0;double Sn 0;while(Sn<k){n;Sn Sn 1.0/n;}System.out.println(n);} }这样写while循环体这需要每次加上1/…

『Luogu OJ』『C++』Level 1-1

关卡1-1&#xff0c;3道题 洛谷的第一个任务 任务说明&#xff1a;勇敢的迈出第一步&#xff0c;了解下语言和洛谷。跟着书本和老师走&#xff0c;不会难的。 要完成这个任务&#xff0c;请将以下的题目都AC掉&#xff08;即通过这道题目&#xff09;&#xff1a; 1.AB Problem…

Java中的Google ClientLogin实用程序

Google API的身份验证和授权是当今需要与Google服务集成和信息交换的应用程序中的常见功能。 尽管大多数Google身份验证过程是针对Web应用程序量身定制的&#xff0c;但它也可用于桌面和已安装的应用程序。 对于桌面应用程序&#xff0c;Google建议使用称为ClientLogin的身份验…

九度OJ1486 /POJ 1029/2012北京大学研究生复试上机

wa到死&#xff01;wa到死&#xff01;这是一个看着简单&#xff0c;坑及其多的题&#xff01; 坑一&#xff1a;POJ上是单组输入&#xff0c;九度上是多组输入&#xff0c;妈蛋要是研究生复试遇到这种大坑肯定死掉啊&#xff01;而且对于codeforces比较习惯的 同学肯定会觉得巨…

P1046 [NOIP2005 普及组] 陶陶摘苹果

题目描述 陶陶家的院子里有一棵苹果树&#xff0c;每到秋天树上就会结出 1010 个苹果。苹果成熟的时候&#xff0c;陶陶就会跑去摘苹果。陶陶有个 3030 厘米高的板凳&#xff0c;当她不能直接用手摘到苹果的时候&#xff0c;就会踩到板凳上再试试。 现在已知 1010 个苹果到地面…

新手不了解Xcode和mac系统可能犯得错误和我的建议

我是学iOS刚入门的新手&#xff0c;本人装的时黑苹果&#xff0c;我是喜欢完美的人&#xff0c;但黑苹果又是不完美的系统&#xff0c;比如关不了机啊&#xff0c;和显卡驱动不了啊&#xff0c;当自己的电脑出现白屏和卡顿的时候气的没脾气。我是一个新手。开始学的时java但我喜…

改善Java应用程序性能的快速技巧

曾经遇到过性能问题吗&#xff1f; 我也是。 如果我的经理再喊一次“ faaaaster”&#xff0c;我一生都会有听力障碍。 顺便说一句&#xff0c;我能听到所有声音中的德语发音吗&#xff1f; ;-) 您可以相信仍然有人无知地在谈论垃圾收集器&#xff08;得到它吗&#xff1f;&…

P1047 [NOIP2005 普及组] 校门外的树

某校大门外长度为 ll 的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴&#xff0c;马路的一端在数轴 00 的位置&#xff0c;另一端在 ll 的位置&#xff1b;数轴上的每个整数点&#xff0c;即 0,1,2,\dots,l0,1,2,…,l&#xff0…

团队开发——个人工作总结04

昨天对要用到的SQL语句进行了研究&#xff0c;分别得到了以下结果&#xff1a; 1.这段语句是为用户登录服务的&#xff0c;通过JSP的到的用户名username和密码passdword作为条件查询数据库&#xff0c;如果有查询结果&#xff0c;则返回true select * from [login] where usern…

Nginx的几种常见的几种启动方式

1.默认方式启动 直接执行Nginx的二进制文件即可 /usr/local/nginx/sbin/nginx 这时默认读取配置文件&#xff0c;配置文件目录 /usr/local/nginx/conf/nginx.conf 2.指定配置文件的启动方式 /usr/local/nginx/sbin/nginx -c /tmp/nginx.conf转载于:https://www.cnblogs.com/Leo…

yii2阅读随笔14

继续来看Event.php /*** Triggers a class-level event.* 触发类级别事件。* This method will cause invocation of event handlers that are attached to the named event* for the specified class and all its parent classes.* 触发某个类或者对象的某个事件* param strin…

P1059 [NOIP2006 普及组] 明明的随机数

题目描述 明明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0c;他先用计算机生成了N个1到1000之间的随机整数(N≤100)&#xff0c;对于其中重复的数字&#xff0c;只保留一个&#xff0c;把其余相同的数去掉&#xff0c;不同的数对应着不同的学…

基本的EJB参考,注入和查找

在本系列的第一部分中 &#xff0c;我们介绍了Enterprise JavaBeans v。3.0规范提供的机制&#xff0c;用于定义EJB组件&#xff0c;声明对EJB的引用并通过依赖项注入或程序化JNDI查找将它们连接起来。 在此博客文章中&#xff0c;我们将研究一些基本示例以了解如何使用EJB API…

ViewPager使用笔记

1.ViewPager.setCurrentItem(position)&#xff0c;即使已设置动画&#xff0c;但是没有动画效果 原因&#xff1a;因为ViewPager滑动之前的时间间隔太短&#xff0c;可以通过反射&#xff0c;去修改ViewPager自动滑动时间&#xff0c;代码实现如下 1 public class ViewPagerSc…

IOS开发之Swift学习笔记

1.因为存储属性要求初始化&#xff0c;我们可以使用lazy修饰符来延迟初始化。转载于:https://www.cnblogs.com/luntai/p/5430223.html

力扣1两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

C ++或Java,高频交易哪个更快?

总览 关于什么是高频交易的最佳解决方案&#xff0c;存在不同意见。 问题的一部分是高频交易的变化超出您的预期&#xff0c;另一部分是更快的含义。 我的看法 如果您有一个典型的Java程序员和一个典型的C 程序员&#xff0c;并且每个人都有几年编写典型的面向对象程序的经验…

iOS 8 Xcode6 设置Launch Image 启动图片

本人apem http://www.mamicode.com/info-detail-494411.html 如何设置App的启动图,也就是Launch Image? Step1 1.点击Image.xcassets 进入图片管理,然后右击,弹出"New Launch Image"2.如图,右侧的勾选可以让你选择是否要对ipad,横屏,竖屏,以及低版本的ios系统做支持…

代码分享h5-sessionStorage,提示app下载代码块

1.html <div class"down-app">    <span id"dowm-close">x</span>    <dl>      <dt>logo</dt>      <dd>        <h3>某某公司</h3>        <p>某某公…

Apache CXF负载平衡和故障转移

前一段时间&#xff0c;我们已经面临基于Apache CXF的负载平衡Web服务客户端的需求。 此外&#xff0c;当某些服务器关闭时&#xff0c;客户端应自动进行故障转移。 更糟糕的是&#xff0c;服务器目标地址列表要从外部服务获取并在运行时更新。 最终&#xff0c;我们最终获得了…