




已阅读5页,还剩192页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
企业级信息系统开发技术,liukun,第2讲基于开源框架的企业级信息系统开发技术,第2章基于JavaEE开发环境的构建第3章Struts2应用第4章Hibernate应用第5章Spring应用第6章Struts2、Hibernate和Spring整合应用,第2讲基于开源框架的企业级信息系统开发技术,ServletServlet是Java语言的CGI实现,与传统的CGI和许多其他类似CGI的技术相比,JavaServlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性。高效:传统的CGI程序以进程方式运行,而Servlet以线程方式运行。方便:Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。功能强大:可以完成很多传统的CGI程序很难做到的事情。可移植性好:ServletAPI具有完善的标准。,Web服务器,doGet()方法,doPost()方法,HTTPGET请求,HTTPPOST请求,响应,响应,客户机,第2讲基于开源框架的企业级信息系统开发技术,JSPJSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。JSP采用的是动态代码与静态HTML页面相结合的方式,JSP的语法内容放入在以“%”开始,以“%”结束的特殊标记之内。JSP页面文件通常以.jsp为扩展名。虽然从代码编写来看,JSP页面更象普通Web页面而不象Servlet,但实际上,JSP最终会被转换成正规的Servlet,静态HTML直接输出到和Servletservice方法关联的输出流。,第2讲基于开源框架的企业级信息系统开发技术,Struts2框架Struts是开源软件。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。Struts框架具有组件的模块化、灵活性和重用性的优点,同时也简化了基于MVC的Web应用程序的开发。从应用的角度来说,Struts有三大块,分别是Struts核心类、Struts配置文件及Struts标签库。,Hibernate框架传统的Java应用都是采用JDBC来访问数据库,它是一种基于SQL的操作方式,但对目前的JavaEE信息化系统而言,通常采用面向对象分析和面向对象设计的过程。系统从需求分析到系统设计都是按面向对象方式进行,但是到详细的数据访问设计阶段,又回到了传统的JDBC访问数据库的老路上来。Hibernate的问世解决了这个问题,Hibernate是一个面向Java环境的对象/关系映射工具,它用来把对象模型表示的对象映射到基于SQL的关系数据模型中去,这样就不用再为怎样用面向对象的方法进行数据的持久化而大伤脑筋了。,第2讲基于开源框架的企业级信息系统开发技术,第2讲基于开源框架的企业级信息系统开发技术,Spring框架Spring框架是RodJohnson开发的,2003年发布了Spring框架的第一个版本。Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,从而大大提高了企业应用的开发效率。Spring为企业应用的开发提供了一个轻量级的解决方案。其中依赖注入、基于AOP的声明式事务管理、多种持久层的整合与优秀的WebMVC框架等最为人们关注。Spring可以贯穿程序的各个层之间,但它并不是想取代那些已有的框架,而是以高度的开放性和它们紧密的整合。这也是Spring被广泛应用的原因之一。,第2讲基于开源框架的企业级信息系统开发技术,JSP+Servlet+JavaBean实现MVC,JSP,JSP,JSP,Servlet,JavaBean,EJB,Web服务,视图,控制器,模型,JDBC,DataBase,第2讲基于开源框架的企业级信息系统开发技术,Struts2、Spring和Hibernate框架,第2讲基于开源框架的企业级信息系统开发技术,Struts2、Spring和Hibernate框架,IService,jsp,command,IDomain,IDao,资源层,发出请求,viewbean,databean,databean,service实现类,domain实现类,组织数据,在页面显示,dao实现类,Spring框架,Struts框架,Hibernate框架,第2章JavaEE开发环境的构建,JSP和Servlet例子,JSP和Servlet例子,JSPJSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。简单的说JSP就是:HTML文件中嵌入Java程序段和JSP标记扩展名是*.jsp,JSP和Servlet例子,看个JSP的例子计算圆面积:新建WebProject,项目名称:test输入半径的页面input.jsp(WebRoot文件夹下):,请输入半径r:,JSP和Servlet例子,看个例子计算圆面积:计算圆面积的页面result.jsp:,JSP和Servlet例子,看个例子计算圆面积:发布启动Tomcat服务器,在IE浏览器中输入“http:/localhost:8080/test/input.jsp”,系统会显示input.jsp页面,如图2.1所示。当在文本框中输入10后,单击【计算】按钮会跳转到另外一个页面,也就是result.jsp页面,并且输出结果314.0,如图2.2所示。,图2.1input.jsp页面图2.2result.jsp页面,JSP和Servlet例子,ServletServlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。简单的理解:Servlet是Java类Servlet可以接收客户请求requestServlet可以给客户响应responseServlet在服务器端加载Servlet运行在Servlet容器中,JSP和Servlet例子,看个Servlet的例子:计算圆面积新建WebProject:项目名称:servlet新建Servlet类(继承HttpServlet类):Servlet.java,.ujn.servletdemo;/省略importpublicclassServletextendsHttpServletOverrideprotectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOExceptionresp.setCharacterEncoding(GBK);PrintWriterpw=resp.getWriter();doubleradius=Double.valueOf(req.getParameter(radius);pw.println(圆的面积是:+radius*radius*3.14);OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOExceptionresp.setCharacterEncoding(GBK);PrintWriterpw=resp.getWriter();doubleradius=Double.valueOf(req.getParameter(radius);pw.println(圆的面积是get:+radius*radius*3.14);,JSP和Servlet例子,看个Servlet的例子:计算圆面积编辑web.xml,增加该Servlet的配置:,.ujn.servletdemo.Servletservletdemo/servlet,JSP和Servlet例子,看个Servlet的例子:计算圆面积新建JSP页面:inputservlet.jsp发布测试POST方式,在浏览器中输入:http:/localhost:8080/servlet/inputservlet.jsp测试GET方式,在浏览器中输入:http:/localhost:8080/servlet/servlet?radius=18,请输入半径r:,JSP和Servlet例子,JSP数据定义:JSP程序块:JSP表达式JSP指令page指令:设定整个JSP文件的属性和相关功能include指令:导入包含静态的文件(JSP、HTML)taglib指令:标签引用(Struts2中会用到),21,JSP和Servlet例子,JSP动作赋值:向一个对象提出请求寻找或者实例化一个JavaBean设置JavaBean的属性输出某个JavaBean的属性把请求转到一个新的页面根据浏览器类型为Java插件生成OBJECT或EMBED标记JSP注释输出注释:隐藏注释:该注释不发送给用户,JSP和Servlet例子,JSP内置对象,JSP和Servlet例子,Servlet主要接口和类Servlet接口(实现init、service、destroy方法)GenericServlet类(覆写service方法)HttpServlet类(覆写doPost或doGet方法)HttpServletRequest和HttpServletResponse接口Servlet生命周期当Servlet被装载到容器后,生命周期开始。首先调用init()方法进行初始化。初始化后,调用service()方法,根据请求的不同调用不同的doXxx()方法处理客户请求,并将处理结果封装到HttpServletResponse中返回给客户端。当Servlet实例从容器中移除时调用其destroy()方法,这就是Servlet运行的整个过程。,思考:MVC模式,怎样应用MVC模式?,MVC用户登录登录名:密码:,login登录成功!登录失败!数据库操作失败,请联系管理员。,login.jsp,loginok.jsp,思考:MVC模式,JSP+Servlet+JavaBean实现MVC模式抽取表示层(JSP)抽取“领域对象”实现“控制层”Servlet抽取业务逻辑层接口实现业务逻辑层实现其他业务逻辑层(数据库连接),思考:MVC模式,login.jsp,成功页面,失败页面,Stringusername=request.getParameter(username);Stringpwd=request.getParameter(pwd);Dlbdl=newDlb();dl.setXh(username);dl.setKl(pwd);ICheckLoginDomaindlDomain=newCheckLoginDomainImpl();if(dlDomain.checkLogin(dl)response.sendRedirect(./secondloginok.jsp);elseresponse.sendRedirect(./secondloginfalse.jsp);,web.xml,LoginServlet,ICheckLoginDomain接口,publicbooleancheckLogin(Dlbdl)tryDBConnconn=newDBConn();Stringsql=select*fromdlbwhere;ResultSetrs=conn.executeQuery(sql);if(rs.next()returntrue;elsereturnfalse;catch(SQLExceptione)returnfalse;,privateStringid;privateStringxh;privateStringkl;,Dlb.java,CheckLoginDomainImpl.java,Class.forNameDriverManager.getConnectioncreateStatementexecuteQuery,DBConn.java,思考:MVC模式,MVC模式没有给出代码结构性的具体要求MVC的控制器是做一个Servlet,还是多个Servlet?跳转页面的名称是写在代码中还是配置文件中?,企业级信息系统开发技术,济南大学信息学院刘鹍liukun,JSP+Servlet+JavaBean,JSP+Servlet+JavaBean实现MVC,请求,FORM,POSTGET,request,JSP,Servlet,JavaBean,DB,request,object,object,list,getParameter实例化对象调用JavaBean,JDBC数据库增删改查,返回结果setParametersetAttribute,显示数据,session,session,第3章Struts2应用,3.1Struts2概述3.2Struts2基本应用及工作流程,3.1Struts2概述,Struts2与Struts1Webwork+Struts1=Struts2,3.1Struts2概述,3.1.1MVC简介MVC有以下优点:多个视图可以对应一个模型。模型返回的数据与显示逻辑分离。应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求,因此控制层可以说是包含了用户请求权限的概念。MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。,回顾:JSP+Servlet实现MVC模式,login.jsp,成功页面,失败页面,Stringusername=request.getParameter(username);Stringpwd=request.getParameter(pwd);Dlbdl=newDlb();dl.setXh(username);dl.setKl(pwd);ICheckLoginDomaindlDomain=newCheckLoginDomainImpl();if(dlDomain.checkLogin(dl)response.sendRedirect(./secondloginok.jsp);elseresponse.sendRedirect(./secondloginfalse.jsp);,web.xml,LoginServlet,ICheckLoginDomain接口,publicbooleancheckLogin(Dlbdl)tryDBConnconn=newDBConn();Stringsql=select*fromdlbwhere;ResultSetrs=conn.executeQuery(sql);if(rs.next()returntrue;elsereturnfalse;catch(SQLExceptione)returnfalse;,privateStringid;privateStringxh;privateStringkl;,Dlb.java,CheckLoginDomainImpl.java,Class.forNameDriverManager.getConnectioncreateStatementexecuteQuery,DBConn.java,3.1.2Struts2体系结构,Struts2的MVC原理,3.1.2Struts2体系结构,3.1.2Struts2体系结构,Struts2框架的应用着重在控制上。简单的流程是:页面控制器页面。最重要的是控制器的取数据与处理后传数据的问题。Struts2的体系结构还可以参考图3.1,更直观地展现出其流程。,图3.1Struts2体系结构,第3章Struts2应用,3.1Struts2概述3.2Struts2基本应用及工作流程,3.2.1简单Struts2实例开发,Struts2开发步骤:添加Struts2开发能力添加类库添加配置文件添加过滤器开发JSP页面开发Action类配置Actioin类设置校验器开发拦截器国际化应用,3.2.1简单Struts2实例开发,hello.jsp,web.xmlfilter,StrutsAction.javapublicStringexecute()return“success”;,ok.jsp,3.2.1简单Struts2实例开发,小结:Struts2的开发步骤新建Web项目导入类库(5个jar)修改web.xml(配置过滤器)新建struts.xml新建JSP新建Action类修改struts.xml(package、action、result),3.2.2Struts2工作流程及各种文件详解,1.Struts2的工作流程Web浏览器请求一个资源。过滤器Dispatcher查找请求,确定适当的Action。拦截器自动对请求应用通用功能,如验证和文件上传等操作。Action的execute方法通常用来存储和(或)重新获得信息(通过数据库)。结果被返回到浏览器。可能是HTML、图片、PDF或其他。,3.2.2Struts2工作流程及各种文件详解,web.xmlfilterFilter-mappingstruts.xmlpackage:action:result:ActionSupportStruts2中Action与容器是完全解耦(不继承类、不实现接口)继承ActionSupport,降低工作难度,充分利用Struts2提供的功能。,struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*,/welcome.jsp,Struts2数据验证有两种实现方式:Action类中validate方法继承ActionSupport覆写validate方法(或者新建命名规则为validata*的方法)增加“input”的resultJSP页面中用标签验证框架(xml)位置:与Action类同一路径下命名:-validation.xml-validation.xml校验器:conversionvalidator、datevalidator、doublevalidator、emailvalidator、expressionvalidator、fieldexpressionvalidator、intvalidator、regexvalidator、requiredvalidator、requiredstringvalidator、stringlengthvalidator、urlvalidator、visitorvalidator,3.2.3Struts2数据验证及验证框架的应用,补充:在Action中访问Web对象,在Action中访问Web对象通过ActionContext访问直接访问Web对象,publicstaticActionContextgetContext():获得ActionContext对象。publicMapgetParameters():从请求对象(HttpServletRequest)中获取请求参数。publicMapgetApplication():获取ServletContext中保存的Attribute。publicMapgetSession():获取HttpSession中保存的Attribute。,Struts2框架提供org.apache.struts2.ServletActionContext辅助类来获得web对象。HttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseresponse=ServletActionContext.getResponse();HttpSessionsession=request.getSession();ServletContextapplication=ServletActionContext.getServletContext();,扩充:多方法Action的配置,多方法Action的配置及调用方法有如下几种:1为Action配置method属性2动态方法调用动态方法调用是指采用如下格式调用Action中对应的方法:用这种方式需要先开启一个开关(struts.xml)3.使用通配符映射方式在struts.xml文件中配置action元素时,它的name、class、method属性都可支持通配符,这种通配符的方式是另一种形式的动态方法调用。,控制名!方法名.action,回顾:Struts2应用,Struts2开发流程:2个XML+Action类+JSP页面+JavaBean校验器:validate方法或者XML校验器注意:命名+位置,企业级信息系统开发技术,济南大学信息学院刘鹍liukun,补充:Struts2配置,Struts2中配置:struts.xml中constant参数配置:动态加载struts.xml:,第4章Hibernate应用,4.1Hibernate概述,1.ORM简介对象/关系映射ORM(Object-RelationMapping)对象与对象之间的关系对应到数据库表与表之间的关系的一种模式。简单地说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。对象和关系数据是业务实现的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在着关联和继承关系。而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。,4.1Hibernate概述,2.Hibernate体系结构Hibernate作为模型层/数据访问层。配置文件(hibernate.cfg.xml或perties)映射文件(*.hbm.xml)POJO类,图4.1Hibernate体系结构,把Java对象或持久化对象(PersistentObject,PO)映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作,其中PO就是POJO(普通Java对象)加映射文件。,4.2Hibernate应用基础,4.2Hibernate应用基础,Hibernate工作流程,4.2Hibernate应用基础,Hibernate开发步骤:(1)创建Hibernate的配置文件。(2)创建持久化类。(3)创建对象-关系映射文件。(4)创建SessionFactory。(5)通过HibernateAPI编写访问数据库的代码。MyEclipse中Hibernate开发步骤:(1)新建表,创建数据库连接。(2)添加Hibernate开发能力。(3)反向工程,生成POJO类和映射文件。(4)创建HibernateSessionFactory。(5)调用HibernateAPI开发,4.2.2Hibernate各种文件的作用,1.POJO类和其映射配置文件2.hibernate.cfg.xml文件3.HibernateSessionFactory,4.2.2Hibernate各种文件的作用,1.POJO类和其映射配置文件POJO类如下:,packageorg.model;publicclassKcbimplementsjava.io.SerializableprivateStringkch;/对应表中KCH字段privateStringkcm;/对应表中KCM字段privateShortkxxq;/对应表中KXXQ字段privateIntegerxs;/对应表中XS字段privateIntegerxf;/对应表中XF字段publicKcb()/省略上述属性的getter和setter方法,4.2.2Hibernate各种文件的作用,POJO类中的属性和表中的字段通过*.hbm.xml映射文件来一一对应。本例就是Kcb.hbm.xml,代码如下:,4.2.2Hibernate各种文件的作用,native:由数据库对id赋值。当设置时,数据库负责主键id的赋值,最常见的是int型的自增型主键。hilo:通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。seqhilo:与hi/lo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在sequence中,适用于支持sequence的数据库,如Oracle。increment:主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。identity:采用数据库提供的主键生成机制,如SQLServer、MySQL中的自增主键生成机制。sequence:采用数据库提供的sequence机制生成主键,如Oraclesequence。uuid.hex:由Hibernate基于128位唯一值产生算法,根据当前设备IP、时间、JVM启动时间、内部自增量等4个参数生成十六进制数值(编码后长度为32位的字符串表示)作为主键。即使是在多实例并发运行的情况下,这种算法在最大程度上保证了产生id的唯一性。当然,重复的概率在理论上依然存在,只是概率比较小。uuid.string:与uuid.hex类似,只是对生成的主键进行编码(长度16位)。foreign:使用外部表的字段作为主键。select:Hibernate3新引入的主键生成机制,主要针对遗留系统的改造工程。,4.2.2Hibernate各种文件的作用,2.hibernate.cfg.xml文件该文件是Hibernate重要的配置文件,配置该文件主要是配置SessionFractory类。,jdbc:mysql:/localhost:3306/javaeeorg.hibernate.dialect.MySQLDialectcom.mysql.jdbc.Driverliukunliukuncom.mysql.jdbc.Driver,4.2.2Hibernate各种文件的作用,2.hibernate.cfg.xml文件,4.2.2Hibernate各种文件的作用,3.HibernateSessionFactoryHibernateSessionFactory类是自定义的SessionFactory,名字可以根据自己的喜好来决定。这里用的是HibernateSessionFactory,在Hibernate中,Session负责完成对象持久化操作。该文件负责创建和关闭Session对象。Session对象的创建大致需要以下3个步骤:初始化Hibernate配置管理类Configuration。通过Configuration类实例创建Session的工厂类SessionFactory。通过SessionFactory得到Session实例(事务)。,/定义一个静态字符串变量存放Hibernate的配置文件名privatestaticStringCONFIG_FILE_LOCATION=/hibernate.cfg.xml;/创建一个线程局部变量对象privatestaticfinalThreadLocalthreadLocal=newThreadLocal();privatestaticConfigurationconfiguration=newConfiguration();/创建一个静态的Configuration对象privatestaticorg.hibernate.SessionFactorysessionFactory;/定义一个静态的SessionFactory对象privatestaticStringconfigFile=CONFIG_FILE_LOCATION;configuration.configure(configFile);sessionFactory=configuration.buildSessionFactory();Sessionsession=(sessionFactory!=null)?sessionFactory.openSession():null;Transactionts=session.beginTransaction();,回顾,Hibernate开发步骤:(1)创建Hibernate的配置文件。(2)创建持久化类。(3)创建对象-关系映射文件。(4)通过HibernateAPI编写访问数据库的代码(创建SessionFactory类)。Hibernate各种文件POJO类和映射配置文件Hibernate.cfg.xml文件HibernateSessionFactoryHibernate核心接口Configuration、SessionFactory、Session、Transaction、QueryHQL查询,4.3Hibernate关系映射,4.3Hibernate关系映射,一对一关联共享主键方式唯一外键方式多对一单向关联一对多双向关联多对多关联(单向、多向),4.4Hibernate高级功能,4.4Hibernate高级功能,批量处理(插入、更新、删除)实体对象生命周期事务管理基于JDBC的事务管理基于JTA的事务管理概念锁,4.4Hibernate高级功能,4.4.1Hibernate批量处理1.批量插入(1)通过Hibernate的缓存进行批量插入使用这种方法时,首先要在Hibernate的配置文件hibernate.cfg.xml中设置批量尺寸属性hibernate.jdbc.batch_size,且最好关闭Hibernate的二级缓存以提高效率。例如:,50/设置批量尺寸false/关闭二级缓存,4.4.1Hibernate批量处理,下面以4.2.1节的例子中的课程进行批量插入为例,说明批量插入操作的具体过程,这里假设批量插入500个课程到数据中:,Sessionsession=HibernateSessionFactory.getSession();Transactionts=session.beginTransaction();for(inti=0;i200);catch(SQLExceptione)/TODOAuto-generatedcatchblocke.printStackTrace();mit();HibernateSessionFactory.closeSession();,4.4.2实体对象生命周期,实体对象的生命周期有以下3种状态。1transient(瞬时态)瞬时态,即实体对象在内存中的存在,与数据库中的记录无关。如下面的代码:,Studentstu=newStudent();stu.setSnumber(081101);stu.setSname(李方方);stu.setSage(21);,4.4.2实体对象生命周期,实体对象的生命周期有以下3种状态。2persisent(持久态)在这种状态下,实体对象的引用被纳入Hibernate实体容器中加以管理。处于持久状态的对象,其变更将由Hibernate固化到数据库中。例如下面的代码:,Studentstu=newStudent();Studentstu1=newStudent();stu.setSnumber(081101);stu.setSname(李方方);stu.setSage(21);stu1.setSnumber(081102);stu1.setSname(程明);stu1.setSage(22);/到此为止,stu和stu1均处于瞬时态Transactiontx=session.beginTransaction();/通过save()方法,stu对象转换为持久态,由Hibernate纳入实体管理容器,而stu1仍然处于瞬时态session.save(stu);/事务提交之后,数据库表中插入一条学生的记录,对于stu1则无任何操作mit();Transactiontx2=session.beginTransaction();stu.setSname(李方);stu1.setSname(程明明);mit();,虽然这个事务中没有显示调用session.save()方法保存stu对象,但是由于stu为持久态,将自动被固化到数据库,因此数据库的学号为“081101”学生记录的姓名已被更改为“李方”,此时stu1仍然是一个普通Java对象,对数据库未产生任何影响。,处于瞬时态的对象,可以通过Session的save()方法转换成持久状态。同样,如果一个实体对象由Hibernate加载,那么,它也处于持久状态。例如下面的代码:/由Hibernate返回的持久对象Studentstu=(Student)session.load(Student.class,newInteger(1);,4.4.2实体对象生命周期,3Detached(脱管状态)处于持久态的对象,其对应的Session实例关闭之后,此对象就处于脱管状态。Session实例可以看做是持久对象的宿主,一旦此宿主失效,其从属的持久对象进入脱管状态。如下面的代码:,/stu处于瞬时态Studentstu=newStudent();Studentstu1=newStudent();stu.setSnumber(081101);stu.setSname(李方方);stu.setSage(21);stu1.setSnumber(081102);stu1.setSname(程明);stu1.setSage(22);Transactiontx=session.beginTransaction();/stu对象由Hibernate纳入管理容器,处于持久状态session.save(stu);mit();/stu对象状态为脱管态,因为与其关联的session已经关闭session.close();,4.4.3Hibernate事务管理,1基于JDBC的事务管理Hibernate是JDBC的轻量级封装,本身并不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或JTA,以实现事务管理和调度功能。在JDBC的数据库操作中,一项事务是由一条或多条表达式组成的不可分割的工作单元,通过提交commit()或回滚rollback()来结束事务的操作。将事务管理委托给JDBC进行处理是最简单的实现方式,Hibernate对于JDBC事务的封装也比较简单。如下面的代码:,Sessionsession=sessionFactory.openSession();Transactiontx=session.beginTransaction();session.save(room);mit();从JDBC层面而言,上面的代码实际上对应着:Connectioncn=getConnection;cn.setAutoCommit(false);/JDBC调用相关的SQL语句mit();,4.4.3Hibernate事务管理,下面的代码不会对数据库产生任何效果:如果要使代码真正作用到数据库,必须显示地调用Transaction指令:,sessionsession=session.Factory.openSession();session.save(room);session.close();,Sessionsession=sessionFactory.openSession();Transactiontx=sessio.beginTransaction();session.save(room);mit();session.close();,4.4.3Hibernate事务管理,2基于JTA的事务管理概念JTA(JavaTransactionAPI)是由JavaEETransactionManager去管理的事务。其最大的特点是调用UserTransaction接口的begin、commit和rollback方法来完成事务范围的界定、事务的提交和回滚。JTA可以实现统一事务对应不同的数据库。JTA主要用于分布式的多个数据源的两阶段提交的事务,而JDBC的Connection提供单个数据源的事务。后者因为只涉及一个数据源,所以其事务可以由数据库自己单独实现。而JTA事务因为其分布式和多数据源的特性,不可能由任何一个数据源实现事务。因此,JTA中的事务是由“事务管理器”实现的。它会在多个数据源之间统筹事务,具体使用的技术就是所谓的“两阶段提交”。,4.4.3Hibernate事务管理,2基于JTA的事务管理概念配置hibernate.cfg.xml或者pertieshibernate.transaction.factory_class:net.sf.hibernate.transaction.JTATransactionFactory默认是:hibernate.transaction.factory_class:net.sf.hibernate.transaction.JDBCTransactionFactory在程序中调用UserTransaction接口,javax.transaction.UserTransactiontx=newInitialContext().lookup(javax.transaction.UserTransaction);Sessions1=sf.openSession();.s1.flush();s1.close();.Sessions2=sf.openSession();.s2.flush();s2.close();mit();,4.4.3Hibernate事务管理,3锁业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,希望对某个结算时间点的数据进行处理,而不希望在结算过程中(可能是几秒,也可能是几个小时),数据再发生变化。此时,需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制就是所谓的“锁”,即给选定的目标数据上锁,使其无法被其他程序修改。Hibernate支持两种锁机制,悲观锁(PessimisticLocking)和乐观锁(OptimisticLocking)。,企业级信息系统开发技术,济南大学信息学院刘鹍liukun,第5章Spring应用,第5章Spring应用,Spring是一个开源框架它由RodJohnson创建目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB提供了更多的企业应用功能范围:任何Java应用Spring容器框架=一个轻量级的控制反转(IoC)+面向切面(AOP),Spring之父:RodJohnson,第5章Spring应用,轻量从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工冬季安全生产培训课件
- 农业机械分离装置课件
- 别墅土建安全培训课件
- 兴发集团安全生产培训课件
- 内部审计程序培训课件
- 内部安全培训资料课件
- 宏观环境因素营销方案(3篇)
- 营销部营销方案(3篇)
- 2024-2025学年九年级上学期第一次月考数学试卷【附答案】
- 内蒙安全员培训课件
- 住房供给调控预案
- 培训行业转介绍
- pos机风险管理办法
- 山河已无恙+吾辈当自强+课件-2025-2026学年高二上学期用《南京照相馆》和731上一节思政课
- 中国兽药典三部 2020年版
- 初中物理课外知识讲座
- 班组质量管理和现场管理培训
- 眼睑裂伤查房
- 卷烟制造工艺学课件-第八章-制丝工艺
- 知名国企的职场礼仪培训材料
- 《品牌管理》第13章 品牌资产保护
评论
0/150
提交评论