




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、企业级信息系统开发技术,济南大学信息学院 刘鹍 ,第2讲 基于开源框架的企业级信息系统开发技术,第2章 基于Java EE开发环境的构建 第3章 Struts2应用 第4章 Hibernate应用 第5章 Spring应用 第6章 Struts2、Hibernate和Spring整合应用,第2讲 基于开源框架的企业级信息系统开发技术,Servlet Servlet是Java语言的CGI实现,与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性。 高效: 传统的CGI程序以进程方式运行,而Servlet以线程方式运行。
2、方便: Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表 单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。 功能强大:可以完成很多传统的CGI程序很难做到的事情。 可移植性好:Servlet API具有完善的标准。,Web服务器,doGet()方法,doPost()方法,HTTP GET请求,HTTP POST请求,响应,响应,客户机,第2讲 基于开源框架的企业级信息系统开发技术,JSP JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在
3、传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。 JSP采用的是动态代码与静态HTML页面相结合的方式,JSP的语法内容放入在以“%”开始,以“%”结束的特殊标记之内。 JSP页面文件通常以.jsp为扩展名。虽然从代码编写来看,JSP页面更象普通Web页面而不象Servlet,但实际上,JSP最终会被转换成正规的Servlet,静态HTML直接输出到和Servlet service方法关联的输出流。,第2讲
4、 基于开源框架的企业级信息系统开发技术,Struts 2框架 Struts是开源软件。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。 Struts框架具有组件的模块化、灵活性和重用性的优点,同时也简化了基于MVC的Web应用程序的开发。 从应用的角度来说,Struts有三大块,分别是Struts核心类、Struts配置文件及Struts标签库。,Hibernate框架 传统的Java应用都是采用JDBC来访问数据库,它是一种基于SQL的操作方式,但对目前的Java EE信息化系统而言,通常采用面向对象分析和面向对象设计的过程。系统从需求分析到系统设计都是按
5、面向对象方式进行,但是到详细的数据访问设计阶段,又回到了传统的JDBC访问数据库的老路上来。 Hibernate的问世解决了这个问题,Hibernate是一个面向Java环境的对象/关系映射工具,它用来把对象模型表示的对象映射到基于SQL的关系数据模型中去,这样就不用再为怎样用面向对象的方法进行数据的持久化而大伤脑筋了。,第2讲 基于开源框架的企业级信息系统开发技术,第2讲 基于开源框架的企业级信息系统开发技术,Spring框架 Spring框架是Rod Johnson开发的,2003年发布了Spring框架的第一个版本。Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通
6、用步骤,从而大大提高了企业应用的开发效率。 Spring为企业应用的开发提供了一个轻量级的解决方案。其中依赖注入、基于AOP的声明式事务管理、多种持久层的整合与优秀的Web MVC框架等最为人们关注。Spring可以贯穿程序的各个层之间,但它并不是想取代那些已有的框架,而是以高度的开放性和它们紧密的整合。这也是Spring被广泛应用的原因之一。,第2讲 基于开源框架的企业级信息系统开发技术,JSP+Servlet+JavaBean实现MVC,JSP,JSP,JSP,Servlet,JavaBean,EJB,Web服务,视图,控制器,模型,JDBC,DataBase,第2讲 基于开源框架的企业级
7、信息系统开发技术,Struts2、Spring和Hibernate框架,第2讲 基于开源框架的企业级信息系统开发技术,Struts2、Spring和Hibernate框架,IService,jsp,command,IDomain,IDao,资源层,发出请求,viewbean,databean,databean,service实现类,domain实现类,组织数据,在页面显示,dao实现类,Spring框架,Struts框架,Hibernate框架,第2章 Java EE开发环境的构建,JSP和Servlet例子,JSP和Servlet例子,JSP JSP(Java Server Pages)是由
8、Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。 简单的说JSP就是: HTML文件中嵌入Java程序段和JSP标记 扩展名是*.jsp,JSP和Servlet例子,看个JSP的例子计算圆面积: 新建Web Project,项目名称:test 输入半径的页面input.jsp(WebRo
9、ot文件夹下):, 请输入半径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.1 input.jsp页面图2.2 result.jsp页面,JSP和Servlet例子,Servle
10、t Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。 简单的理解: Servlet是Java类 Servlet可以接收客户请求request Servlet可以给客户响应response Servlet在服务器端加载 Se
11、rvlet运行在Servlet容器中,JSP和Servlet例子,看个Servlet的例子:计算圆面积 新建Web Project:项目名称:servlet 新建Servlet类(继承HttpServlet类):Servlet.java,package .ujn.servletdemo; /省略import public class Servlet extends HttpServlet Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletExc
12、eption, IOException resp.setCharacterEncoding(GBK); PrintWriter pw=resp.getWriter(); double radius = Double.valueOf(req.getParameter(radius); pw.println(圆的面积是:+radius*radius*3.14); Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException re
13、sp.setCharacterEncoding(GBK); PrintWriter pw=resp.getWriter(); double radius = Double.valueOf(req.getParameter(radius); pw.println(圆的面积是get:+radius*radius*3.14); ,JSP和Servlet例子,看个Servlet的例子:计算圆面积 编辑web.xml,增加该Servlet的配置:, servletdemo .ujn.servletdemo.Servlet servletdemo /servlet ,JSP和Servlet例子
14、,看个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指令:标签引用(Str
15、uts2中会用到),21,JSP和Servlet例子,JSP动作 赋值: 向一个对象提出请求 寻找或者实例化一个JavaBean 设置JavaBean的属性 输出某个JavaBean的属性 把请求转到一个新的页面 根据浏览器类型为Java插件生成OBJECT或EMBED标记 JSP注释 输出注释: 隐藏注释: 该注释不发送给用户,JSP和Servlet例子,JSP内置对象,JSP和Servlet例子,Servlet主要接口和类 Servlet接口(实现init、service、destroy方法) GenericServlet类(覆写service方法) HttpServlet类(覆写doPo
16、st或doGet方法) HttpServletRequest和HttpServletResponse接口 Servlet生命周期 当Servlet被装载到容器后,生命周期开始。 首先调用init()方法进行初始化。 初始化后,调用service()方法,根据请求的不同调用不同的doXxx()方法处理客户请求,并将处理结果封装到HttpServletResponse中返回给客户端。 当Servlet实例从容器中移除时调用其destroy()方法,这就是Servlet运行的整个过程。,思考:MVC模式,怎样应用MVC模式?, MVC 用户登录 登录名: 密码: , login 登录成功! 登录失败
17、! 数据库操作失败,请联系管理员。 ,login.jsp,loginok.jsp,思考:MVC模式,JSP+Servlet+JavaBean实现MVC模式 抽取表示层(JSP) 抽取“领域对象” 实现“控制层”Servlet 抽取业务逻辑层接口 实现业务逻辑层 实现其他业务逻辑层(数据库连接),思考:MVC模式,login.jsp,成功页面,失败页面, String username = request.getParameter(username); String pwd = request.getParameter(pwd); Dlb dl = new Dlb(); dl.setXh(use
18、rname); dl.setKl(pwd); ICheckLoginDomain dlDomain = new CheckLoginDomainImpl(); if(dlDomain.checkLogin(dl) response.sendRedirect(./secondloginok.jsp); else response.sendRedirect(./secondloginfalse.jsp); ,web.xml,LoginServlet,ICheckLoginDomain接口, public boolean checkLogin(Dlb dl) try DBConn conn = ne
19、w DBConn(); String sql = select * from dlb where ; ResultSet rs = conn.executeQuery(sql); if(rs.next() return true; else return false; catch (SQLException e) return false; , private String id; private String xh; private String kl; ,Dlb.java,CheckLoginDomainImpl.java, Class.forName DriverManager.getC
20、onnection createStatement executeQuery ,DBConn.java,思考:MVC模式,MVC模式没有给出代码结构性的具体要求 MVC的控制器是做一个Servlet,还是多个Servlet? 跳转页面的名称是写在代码中还是配置文件中?,企业级信息系统开发技术,济南大学信息学院 刘鹍 ,JSP+Servlet+JavaBean,JSP+Servlet+JavaBean实现MVC,请求,FORM,POST GET,request,JSP,Servlet,JavaBean,DB,request,object,object,list,getParameter 实例化对
21、象 调用JavaBean,JDBC 数据库 增删改查 ,返回结果 setParameter setAttribute,显示数据,session,session,第3章 Struts2应用,3.1 Struts 2概述 3.2 Struts 2基本应用及工作流程,3.1 Struts 2概述,Struts 2与Struts 1 Webwork + Struts 1 = Struts 2,3.1 Struts 2概述,3.1.1 MVC简介 MVC有以下优点: 多个视图可以对应一个模型。 模型返回的数据与显示逻辑分离。 应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。 控制层的概念也
22、很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求,因此控制层可以说是包含了用户请求权限的概念。 MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。,回顾:JSP+Servlet实现MVC模式,login.jsp,成功页面,失败页面, String username = request.getParameter(username); String pwd = request.getParameter(pwd); Dlb dl = new Dlb(); dl.setXh(username); dl.setKl(
23、pwd); ICheckLoginDomain dlDomain = new CheckLoginDomainImpl(); if(dlDomain.checkLogin(dl) response.sendRedirect(./secondloginok.jsp); else response.sendRedirect(./secondloginfalse.jsp); ,web.xml,LoginServlet,ICheckLoginDomain接口, public boolean checkLogin(Dlb dl) try DBConn conn = new DBConn(); Strin
24、g sql = select * from dlb where ; ResultSet rs = conn.executeQuery(sql); if(rs.next() return true; else return false; catch (SQLException e) return false; , private String id; private String xh; private String kl; ,Dlb.java,CheckLoginDomainImpl.java, Class.forName DriverManager.getConnection createS
25、tatement executeQuery ,DBConn.java,3.1.2 Struts 2体系结构,Struts2的MVC原理,3.1.2 Struts 2体系结构,3.1.2 Struts 2体系结构,Struts 2框架的应用着重在控制上。 简单的流程是:页面控制器页面。 最重要的是控制器的取数据与处理后传数据的问题。 Struts 2的体系结构还可以参考图3.1,更直观地展现出其流程。,图3.1 Struts 2体系结构,第3章 Struts2应用,3.1 Struts 2概述 3.2 Struts 2基本应用及工作流程,3.2.1 简单Struts 2实例开发,Struts2开
26、发步骤: 添加Struts2开发能力 添加类库 添加配置文件 添加过滤器 开发JSP页面 开发Action类 配置Actioin类 设置校验器 开发拦截器 国际化应用,3.2.1 简单Struts 2实例开发,hello.jsp ,web.xml filter,StrutsAction.java public String execute() return “success”; ,ok.jsp,3.2.1 简单Struts 2实例开发,小结:Struts2的开发步骤 新建Web项目 导入类库(5个jar) 修改web.xml(配置过滤器) 新建struts.xml 新建JSP 新建Action
27、类 修改struts.xml (package、action、result),3.2.2 Struts 2工作流程及各种文件详解,1. Struts 2的工作流程 Web浏览器请求一个资源。 过滤器Dispatcher查找请求,确定适当的Action。 拦截器自动对请求应用通用功能,如验证和文件上传等操作。 Action的execute方法通常用来存储和(或)重新获得信息(通过数据库)。 结果被返回到浏览器。可能是HTML、图片、PDF或其他。,3.2.2 Struts 2工作流程及各种文件详解,web.xml filter Filter-mapping struts.xml package:
28、 action: result: ActionSupport Struts2中Action与容器是完全解耦(不继承类、不实现接口) 继承ActionSupport,降低工作难度,充分利用Struts2提供的功能。, struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* ,/welcome.jsp,Struts 2数据验证有两种实现方式: Action类中validate方法 继承ActionSupport 覆写validate方法(或者新建命名规则为validata*的方法) 增加“input”的result JSP
29、页面中用标签 验证框架(xml) 位置:与Action类同一路径下 命名: -validation.xml -validation.xml 校验器:conversion validator 、date validator 、double validator 、email validator 、expression validator 、fieldexpression validator 、int validator 、regex validator 、required validator 、requiredstring validator 、stringlength validator 、ur
30、l validator 、visitor validator,3.2.3 Struts 2数据验证及验证框架的应用,补充:在Action中访问Web对象,在Action中访问Web对象 通过ActionContext访问 直接访问Web对象,public static ActionContext getContext():获得ActionContext 对象。 public Map getParameters():从请求对象(HttpServletRequest)中获取请求参数。 public Map getApplication():获取ServletContext中保存的Attribute
31、。 public Map getSession():获取HttpSession中保存的Attribute。,Struts2框架提供org.apache.struts2.ServletActionContext辅助类来获得web对象。 HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session = request.getSession(); ServletC
32、ontext application = ServletActionContext.getServletContext();,扩充:多方法Action的配置,多方法Action的配置及调用方法有如下几种: 1为Action配置method属性 2动态方法调用 动态方法调用是指采用如下格式调用Action中对应的方法: 用这种方式需要先开启一个开关(struts.xml) 3. 使用通配符映射方式 在struts.xml文件中配置action元素时,它的name、class、method属性都可支持通配符,这种通配符的方式是另一种形式的动态方法调用。,控制名!方法名.action, ,回顾:St
33、ruts 2应用,Struts 2开发流程: 2个XML+Action类+JSP页面+JavaBean 校验器: validate方法或者XML校验器 注意:命名+位置,企业级信息系统开发技术,济南大学信息学院 刘鹍 ,补充:Struts 2配置,Struts2中配置: struts.xml中constant参数配置: 动态加载struts.xml:,第4章 Hibernate应用,4.1 Hibernate概述,1. ORM简介 对象/关系映射ORM(Object-Relation Mapping) 对象与对象之间的关系对应到数据库表与表之间的关系的一种模式。 简单地说,ORM是通过使用描述
34、对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。 对象和关系数据是业务实现的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在着关联和继承关系。而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。,4.1 Hibernate概述,2. Hibernate体系结构 Hibernate作为模型层/数据访问层。 配置文件(hibernate.cfg.xml或perties) 映射文件(*.hbm.xml) POJO类,图4.
35、1 Hibernate体系结构,把Java对象或持久化对象(Persistent Object,PO)映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作,其中PO就是POJO(普通Java对象)加映射文件。,4.2 Hibernate应用基础,4.2 Hibernate应用基础,Hibernate工作流程,4.2 Hibernate应用基础,Hibernate开发步骤: (1)创建Hibernate的配置文件。 (2)创建持久化类。 (3)创建对象-关系映射文件。 (4)创建SessionFactory。 (5)通过Hibernate API编写访问数据库的代码。 MyEcl
36、ipse中Hibernate开发步骤: (1)新建表,创建数据库连接。 (2)添加Hibernate开发能力。 (3)反向工程,生成POJO类和映射文件。 (4)创建HibernateSessionFactory。 (5)调用Hibernate API开发,4.2.2 Hibernate各种文件的作用,1. POJO类和其映射配置文件 2. hibernate.cfg.xml文件 3. HibernateSessionFactory,4.2.2 Hibernate各种文件的作用,1. POJO类和其映射配置文件 POJO类如下:,package org.model; public class
37、Kcb implements java.io.Serializable private String kch; / 对应表中KCH字段 private String kcm; / 对应表中KCM字段 private Short kxxq; / 对应表中KXXQ字段 private Integer xs; / 对应表中XS字段 private Integer xf; / 对应表中XF字段 public Kcb() / 省略上述属性的getter和setter方法 ,4.2.2 Hibernate各种文件的作用,POJO类中的属性和表中的字段通过*.hbm.xml映射文件来一一对应。本例就是Kcb
38、.hbm.xml,代码如下:, ,4.2.2 Hibernate各种文件的作用,native:由数据库对id赋值。当设置时,数据库负责主键id的赋值,最常见的是int型的自增型主键。 hilo:通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。 seqhilo:与hi/lo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在sequence中,适用于支持sequence的数据库,如Oracle。 increment:主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。 i
39、dentity:采用数据库提供的主键生成机制,如SQL Server、MySQL中的自增主键生成机制。 sequence:采用数据库提供的sequence机制生成主键,如Oracle sequence。 uuid.hex:由Hibernate基于128位唯一值产生算法,根据当前设备IP、时间、JVM启动时间、内部自增量等4个参数生成十六进制数值(编码后长度为32位的字符串表示)作为主键。即使是在多实例并发运行的情况下,这种算法在最大程度上保证了产生id的唯一性。当然,重复的概率在理论上依然存在,只是概率比较小。 uuid.string:与uuid.hex类似,只是对生成的主键进行编码(长度16
40、位)。 foreign:使用外部表的字段作为主键。 select:Hibernate 3新引入的主键生成机制,主要针对遗留系统的改造工程。,4.2.2 Hibernate各种文件的作用,2. hibernate.cfg.xml文件 该文件是Hibernate重要的配置文件,配置该文件主要是配置SessionFractory类。, jdbc:mysql:/localhost:3306/javaee org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver liukun liukun com.mysql.jdbc.Driver ,4.2.2
41、Hibernate各种文件的作用,2. hibernate.cfg.xml文件,4.2.2 Hibernate各种文件的作用,3. HibernateSessionFactory HibernateSessionFactory类是自定义的SessionFactory,名字可以根据自己的喜好来决定。这里用的是HibernateSessionFactory,在Hibernate中,Session负责完成对象持久化操作。该文件负责创建和关闭Session对象。Session对象的创建大致需要以下3个步骤: 初始化Hibernate配置管理类Configuration。 通过Configuration
42、类实例创建Session的工厂类SessionFactory。 通过SessionFactory得到Session实例(事务)。, / 定义一个静态字符串变量存放Hibernate的配置文件名 private static String CONFIG_FILE_LOCATION=/hibernate.cfg.xml; / 创建一个线程局部变量对象 private static final ThreadLocal threadLocal=new ThreadLocal(); private static Configuration configuration=new Configuration(
43、); / 创建一个静态的Configuration对象 private static org.hibernate.SessionFactory sessionFactory; / 定义一个静态的SessionFactory对象 private static String configFile=CONFIG_FILE_LOCATION; configuration.configure(configFile); sessionFactory=configuration.buildSessionFactory(); Session session=(sessionFactory != null) ?
44、 sessionFactory.openSession(): null; Transaction ts=session.beginTransaction();,回顾,Hibernate开发步骤: (1)创建Hibernate的配置文件。 (2)创建持久化类。 (3)创建对象-关系映射文件。 (4)通过Hibernate API编写访问数据库的代码(创建SessionFactory类)。 Hibernate各种文件 POJO类和映射配置文件 Hibernate.cfg.xml文件 HibernateSessionFactory Hibernate核心接口 Configuration、Sessio
45、nFactory、Session、Transaction、Query HQL查询,4.3 Hibernate关系映射,4.3 Hibernate关系映射,一对一关联 共享主键方式 唯一外键方式 多对一单向关联 一对多双向关联 多对多关联(单向、多向),4.4 Hibernate高级功能,4.4 Hibernate高级功能,批量处理(插入、更新、删除) 实体对象生命周期 事务管理 基于JDBC的事务管理 基于JTA的事务管理概念 锁,4.4 Hibernate高级功能,4.4.1 Hibernate批量处理 1. 批量插入 (1)通过Hibernate的缓存进行批量插入 使用这种方法时,首先要在
46、Hibernate的配置文件hibernate.cfg.xml中设置批量尺寸属性hibernate.jdbc.batch_size,且最好关闭Hibernate的二级缓存以提高效率。 例如:, 50 / 设置批量尺寸 false / 关闭二级缓存 ,4.4.1 Hibernate批量处理,下面以4.2.1节的例子中的课程进行批量插入为例,说明批量插入操作的具体过程,这里假设批量插入500个课程到数据中:,Session session=HibernateSessionFactory.getSession(); Transaction ts=session.beginTransaction();
47、 for(int i=0;i500;i+) Kcb kcb=new Kcb(); / 这里设置课程号为i,在实际应用中应该是被插入的课程对象 / 已经放在集合或数组中,这里只要取出 kcb.setKch(i+); session.save(kcb); if(i%50=0) / 以50个课程为一个批次向数据库提交,此值应与配置的批量尺寸一致 session.flush(); / 将该批量数据立即插入数据库中 session.clear(); / 清空缓存区,释放内存供下批数据使用 mit(); HibernateSessionFactory.closeSession();,4.4.1 Hiber
48、nate批量处理,(2)绕过Hibernate直接调用JDBC进行插入 由于Hibernate只是对JDBC进行了轻量级的封装,因此完全可以绕过Hibernate直接调用JDBC进行批量插入。因此上例可以改成如下代码:,Session session=HibernateSessionFactory.getSession(); Transaction ts=session.beginTransaction(); Connection conn=session.connection(); try PreparedStatement stmt=conn.prepareStatement(insert
49、 into KCB(KCH) values(?); for (int i=0; i 500; i+) stmt.setString(1, i+); stmt.addBatch(); / 添加到批处理命令中 stmt.executeBatch(); / 执行批处理任务 catch (SQLException e) e.printStackTrace(); mit(); HibernateSessionFactory.closeSession();,4.4.1 Hibernate批量处理,2. 批量更新 (1)由Hibernate直接进行批量更新 为了使Hibernate的HQL直接支持updat
50、e/delete的批量更新语法,首先要在Hibernate的配置文件hibernate.cfg.xml中设置HQL/SQL查询翻译器属性hibernate.query.factory_class。, org.hibernate.hql.ast.ASTQueryTranslatorFactory ,4.4.1 Hibernate批量处理,下面使用HQL批量更新把课程表中的XS修改为30。由于这里是用Hibernate操作,故HQL要用类对象及其属性。,Session session=HibernateSessionFactory.getSession(); Transaction ts=sess
51、ion.beginTransaction(); /在HQL查询中使用update进行批量更新 Query query=session.createQuery(update Kcb set xs=30); query.executeUpdate(); mit(); HibernateSessionFactory.closeSession();,4.4.1 Hibernate批量处理,(2)绕过Hibernate调用JDBC进行批量更新 由于这里是直接操作数据库,故要操作对应表,而不是类。,Session session=HibernateSessionFactory.getSession();
52、Transaction ts=session.beginTransaction(); Connection conn=session.connection(); try Statement stmt=conn.createStatement(); /调用JDBC的update进行批量更新 stmt.executeUpdate(update KCB set XS=30); catch (SQLException e) e.printStackTrace(); mit(); HibernateSessionFactory.closeSession();,4.4.1 Hibernate批量处理,3.
53、 批量删除 (1)由Hibernate直接进行批量删除 与批量更新一样,为了使Hibernate的HQL直接支持update/delete的批量删除语法,首先要在Hibernate的配置文件hibernate.cfg.xml中设置HQL/SQL查询翻译器属性hibernate.query.factory_class。, org.hibernate.hql.ast.ASTQueryTranslatorFactory ,4.4.1 Hibernate批量处理,下面将使用HQL批量删除课程表中课程号大于200的课程。,Session session=HibernateSessionFactory.g
54、etSession(); Transaction ts=session.beginTransaction(); /在HQL查询中使用delete进行批量删除 Query query=session.createQuery(delete Kcb where kch200); query.executeUpdate(); mit(); HibernateSessionFactory.closeSession();,4.4.1 Hibernate批量处理,(2)绕过Hibernate调用JDBC进行批量删除 同样删除课程表中课程号大于200的课程。,Session session=Hibernate
55、SessionFactory.getSession(); Transaction ts=session.beginTransaction(); Connection conn=session.connection(); try Statement stmt= conn.createStatement(); /调用JDBC的delete进行批量删除 stmt.executeUpdate(delete from KCB where KCH200); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(
56、); mit(); HibernateSessionFactory.closeSession();,4.4.2 实体对象生命周期,实体对象的生命周期有以下3种状态。 1transient(瞬时态) 瞬时态,即实体对象在内存中的存在,与数据库中的记录无关。如下面的代码:,Student stu=new Student(); stu.setSnumber(081101); stu.setSname(李方方); stu.setSage(21);,4.4.2 实体对象生命周期,实体对象的生命周期有以下3种状态。 2persisent(持久态) 在这种状态下,实体对象的引用被纳入Hibernate实体容
57、器中加以管理。处于持久状态的对象,其变更将由Hibernate固化到数据库中。例如下面的代码:,Student stu=new Student(); Student stu1=new Student(); stu.setSnumber(081101); stu.setSname(李方方); stu.setSage(21); stu1.setSnumber(081102); stu1.setSname(程明); stu1.setSage(22);/ 到此为止,stu和stu1均处于瞬时态 Transaction tx=session.beginTransaction(); / 通过save()方
58、法,stu对象转换为持久态,由Hibernate纳入实体管理容器,而stu1仍然处于瞬时态 session.save(stu); / 事务提交之后,数据库表中插入一条学生的记录,对于stu1则无任何操作 mit(); Transaction tx2=session.beginTransaction(); stu.setSname(李方); stu1.setSname(程明明); mit();,虽然这个事务中没有显示调用session.save()方法保存stu对象,但是由于stu为持久态,将自动被固化到数据库, 因此数据库的学号为“081101” 学生记录的姓名已被更改为“李方”,此时stu1仍然是一个普通Java对象,对数据库未产生任何影响。,处于瞬时态的对象,可以通过Session的save()方法转换成持久状态。同样,如果一个实体对象由Hibernate加载,那么,它也处于持久状态。例如下面的代码: / 由Hibernate返回的持久对象 Student stu=(Student)session.load(Student.class,new Integer(1);,4.4.2 实体对象生命周期,3Detached(脱管状态) 处于持久态的对象,其对应的Session实例关闭之后,此对象就处于脱管状态。Session实例可以看做是持久对象的宿主,一旦此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤矿职工安全意识培训
- 2025年企业办公室租赁合同样本
- 2024年09月河南焦作市特招医学院校毕业生和特岗全科医生招聘97名笔试历年专业考点(难、易错点)附带答案详解
- 2024年09月河北邢台市卫生健康委员会委属医院第二批招聘工作人员18人笔试历年专业考点(难、易错点)附带答案详解
- 2025写字楼租赁合同范本格式解析
- 《地形分析与测绘》课件
- 水暖管道配件的故障预防策略考核试卷
- 大学课件电力系统继电保护方向比较式纵联保护
- 2025简约借款合同范本
- 2024年09月无棣县疾病预防控制中心公开招聘情况统计笔试历年专业考点(难、易错点)附带答案详解
- 《电力设备典型消防规程》知识培训
- 2025年天津市河东区中考一模英语试题(原卷版+解析版)
- 2025届浙江省君兮协作联盟高三下学期4月教学质量检测英语试题(含解析)
- 注册会计师(综合阶段)题库完美版带答案分析2025
- 新课标解读丨《义务教育道德与法治课程标准(2022年版)》解读
- 2024年中国海洋大学招聘辅导员笔试真题
- 红蓝黄光治疗皮肤病临床应用专家共识解读
- 氧气管道施工方案
- 《三字经》全文拼音版
- 安徽水利工程供水定价成本监审表
- 一篇污水处理英文论文
评论
0/150
提交评论