第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt

上传人:本田雅阁 文档编号:2986828 上传时间:2019-06-20 格式:PPT 页数:197 大小:5.30MB
返回 下载 相关 举报
第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt_第1页
第1页 / 共197页
第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt_第2页
第2页 / 共197页
第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt_第3页
第3页 / 共197页
第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt_第4页
第4页 / 共197页
第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt_第5页
第5页 / 共197页
点击查看更多>>
资源描述

《第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt》由会员分享,可在线阅读,更多相关《第2讲基于开源框架的企业级信息系统开发技术-课堂2012.ppt(197页珍藏版)》请在三一文库上搜索。

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例子,Servlet

10、 Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。 简单的理解: Servlet是Java类 Servlet可以接收客户请求request Servlet可以给客户响应response Servlet在服务器端加载 Ser

11、vlet运行在Servlet容器中,JSP和Servlet例子,看个Servlet的例子:计算圆面积 新建Web Project:项目名称:servlet 新建Servlet类(继承HttpServlet类):Servlet.java,package cn.edu.ujn.servletdemo; /省略import public class Servlet extends HttpServlet Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletExce

12、ption, 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, IOExcepti

13、on resp.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 cn.edu.ujn.servletdemo.Servlet servletdemo /servlet ,JS

14、P和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

15、指令:标签引用(Struts2中会用到),21,JSP和Servlet例子,JSP动作 赋值: 向一个对象提出请求 寻找或者实例化一个JavaBean 设置JavaBean的属性 输出某个JavaBean的属性 把请求转到一个新的页面 根据浏览器类型为Java插件生成OBJECT或EMBED标记 JSP注释 输出注释: 隐藏注释: 该注释不发送给用户,JSP和Servlet例子,JSP内置对象,JSP和Servlet例子,Servlet主要接口和类 Servlet接口(实现init、service、destroy方法) GenericServlet类(覆写service方法) HttpServ

16、let类(覆写doPost或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(

18、); dl.setXh(username); 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

19、 DBConn conn = new 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

20、 DriverManager.getConnection 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,lis

21、t,getParameter 实例化对象 调用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.set

23、Xh(username); 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 c

24、onn = new 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 DriverMa

25、nager.getConnection createStatement 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.

26、2.1 简单Struts 2实例开发,Struts2开发步骤: 添加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(配置过滤器)

27、新建struts.xml 新建JSP 新建Action类 修改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-

28、mapping struts.xml package: action: result: ActionSupport Struts2中Action与容器是完全解耦(不继承类、不实现接口) 继承ActionSupport,降低工作难度,充分利用Struts2提供的功能。, struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* ,/welcome.jsp,Struts 2数据验证有两种实现方式: Action类中validate方法 继承ActionSupport 覆写validate方法(或者新建命名规则为validat

29、a*的方法) 增加“input”的result JSP页面中用标签 验证框架(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

30、、stringlength validator 、url 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():获取

31、ServletContext中保存的Attribute。 public Map getSession():获取HttpSession中保存的Attribute。,Struts2框架提供org.apache.struts2.ServletActionContext辅助类来获得web对象。 HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session = req

32、uest.getSession(); ServletContext application = ServletActionContext.getServletContext();,扩充:多方法Action的配置,多方法Action的配置及调用方法有如下几种: 1为Action配置method属性 2动态方法调用 动态方法调用是指采用如下格式调用Action中对应的方法: 用这种方式需要先开启一个开关(struts.xml) 3. 使用通配符映射方式 在struts.xml文件中配置action元素时,它的name、class、method属性都可支持通配符,这种通配符的方式是另一种形式的动态方

33、法调用。,控制名!方法名.action, ,回顾:Struts 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) 对象与对象之间的关系对应到数据库表与表

34、之间的关系的一种模式。 简单地说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。 对象和关系数据是业务实现的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在着关联和继承关系。而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。,4.1 Hibernate概述,2. Hibernate体系结构 Hibernate作为模型层/数据访问层。 配置文件(hibernate.cfg.xml或hibernate.properties

35、) 映射文件(*.hbm.xml) POJO类,图4.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)通过Hib

36、ernate API编写访问数据库的代码。 MyEclipse中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类如下:,packa

37、ge org.model; public class 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类中的属性和表中的字段通

38、过*.hbm.xml映射文件来一一对应。本例就是Kcb.hbm.xml,代码如下:,4.2.2 Hibernate各种文件的作用,native:由数据库对id赋值。当设置时,数据库负责主键id的赋值,最常见的是int型的自增型主键。 hilo:通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。 seqhilo:与hi/lo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在sequence中,适用于支持sequence的数据库,如Oracle。 increment:主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存当前的最大值,

39、之后每次需要生成主键的时候将此值加1作为主键。 identity:采用数据库提供的主键生成机制,如SQL Server、MySQL中的自增主键生成机制。 sequence:采用数据库提供的sequence机制生成主键,如Oracle sequence。 uuid.hex:由Hibernate基于128位唯一值产生算法,根据当前设备IP、时间、JVM启动时间、内部自增量等4个参数生成十六进制数值(编码后长度为32位的字符串表示)作为主键。即使是在多实例并发运行的情况下,这种算法在最大程度上保证了产生id的唯一性。当然,重复的概率在理论上依然存在,只是概率比较小。 uuid.string:与uui

40、d.hex类似,只是对生成的主键进行编码(长度16位)。 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.

41、mysql.jdbc.Driver ,4.2.2 Hibernate各种文件的作用,2. hibernate.cfg.xml文件,4.2.2 Hibernate各种文件的作用,3. HibernateSessionFactory HibernateSessionFactory类是自定义的SessionFactory,名字可以根据自己的喜好来决定。这里用的是HibernateSessionFactory,在Hibernate中,Session负责完成对象持久化操作。该文件负责创建和关闭Session对象。Session对象的创建大致需要以下3个步骤: 初始化Hibernate配置管理类Confi

42、guration。 通过Configuration类实例创建Session的工厂类SessionFactory。 通过SessionFactory得到Session实例(事务)。, / 定义一个静态字符串变量存放Hibernate的配置文件名 private static String CONFIG_FILE_LOCATION=“/hibernate.cfg.xml“; / 创建一个线程局部变量对象 private static final ThreadLocal threadLocal=new ThreadLocal(); private static Configuration confi

43、guration=new Configuration(); / 创建一个静态的Configuration对象 private static org.hibernate.SessionFactory sessionFactory; / 定义一个静态的SessionFactory对象 private static String configFile=CONFIG_FILE_LOCATION; configuration.configure(configFile); sessionFactory=configuration.buildSessionFactory(); Session session

44、=(sessionFactory != null) ? sessionFactory.openSession(): null; Transaction ts=session.beginTransaction();,回顾,Hibernate开发步骤: (1)创建Hibernate的配置文件。 (2)创建持久化类。 (3)创建对象-关系映射文件。 (4)通过Hibernate API编写访问数据库的代码(创建SessionFactory类)。 Hibernate各种文件 POJO类和映射配置文件 Hibernate.cfg.xml文件 HibernateSessionFactory Hiberna

45、te核心接口 Configuration、SessionFactory、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)通过Hibe

46、rnate的缓存进行批量插入 使用这种方法时,首先要在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=

47、session.beginTransaction(); 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

48、.closeSession();,4.4.1 Hibernate批量处理,(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 into KCB(KCH) values(?)“); for (int i=0; i 500; i+) stmt.setString(1, i+“); stmt.addBatch(); / 添加到批处理命令中 stmt.executeBatch(); / 执行批处理任

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1