第6章 Jdbc和HIBERNATE_第1页
第6章 Jdbc和HIBERNATE_第2页
第6章 Jdbc和HIBERNATE_第3页
第6章 Jdbc和HIBERNATE_第4页
第6章 Jdbc和HIBERNATE_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 JDBC/Hibernate技术(jsh)河海大学(h hi d xu)文天学院7/19/20221共六十七页本章(bn zhn)内容6.1 JDBC技术(jsh)6.2 JavaBean技术6.3 Hibernate技术7/19/20222共六十七页6.1 JDBC技术(jsh) JDBC(Java Data Base Connectivity,Java数据库连接),是Java应用程序连结数据库、存取数据的一种机制(jzh),由一组用Java语言编写的类和接口组成的API。常用接口:DriverManagerConnectionStatementPreparedStatementRe

2、sultSet存放位置:java.sql,javax.sql包。7/19/20223共六十七页简介(jin ji)应用程序、JDBC API、数据库驱动(q dn)及数据库之间的关系7/19/20224共六十七页利用(lyng)JDBC操作数据库加载JDBC驱动程序(只做一次)创建与数据库的连接(Connection) 创建对象(Statement)执行SQL语句(execute、executeUpdate、executeQuery)处理结果(ResultSet)释放(shfng)资源借车确定行驶路线确定司机装货、拉货过程卸货还车7/19/20225共六十七页1.加载数据库驱动(q dn)通过

3、(tnggu)Class.forName(“”).newInstance();驱动类型(四种类型)SQL Server 2000的JDBC驱动类名: com.microsoft.jdbc.sqlserver.SQLServerDriverOracle的JDBC驱动类名: oracle.jdbc.driver.OracleDriverMysql的JDBC驱动类名: com.mysql.jdbc.DriverSybase的JDBC驱动类名: com.sybase.jdbc2.jdbc.SybDriver7/19/20226共六十七页2.建立(jinl)连接(Connection)Connectio

4、n conn = DriverManager.getConnection(url, user, password);url格式(g shi):JDBC:子名称/主机名:端口/数据库名或: JDBC:子名称/主机名:端口/数据库名?属性名=属性值 例如,Mysql的连接创建: Connection conn = DriverManager.getConnection(“jdbc:mysql:/localhost:3306/testdb?user=root&password=123456”;)7/19/20227共六十七页2.建立(jinl)连接(Connection)SqlServer2005的

5、连接(linji)创建:Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);cn=DriverManager.getConnection(jdbc:sqlserver:/localhost:1433:databaseName,sUsr,sPwd);Oracle 的连接创建:Class.forName(oracle.jdbc.driver.OracleDriver);cn=DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:databaseName,sUsr,s

6、Pwd);7/19/20228共六十七页3.创建(chungjin)Statement对象String sql=select * from user where name=+name+;Statement stm=conn.createStatement(int resultSetType,int resultSetConcurrency);/第一个参数(cnsh)选项如下:/TYPE_FORWARD_ONLY (缺省值)/TYPE_SCROLL_INSENSITIVE/TYPE_SCROLL_SENSITIVE/第二个参数选项如下:/CONCUR_READ_ONLY (缺省值)/CONCUR

7、_UPDATABLE ResultSet rs = stm.executeQuery(sql);7/19/20229共六十七页4.执行(zhxng) SQL 语句boolean execute(String sql)/返回值为true时,表示执行的是查询语句,通过getResultSet方法获取(huq)结果;返回值为false时,执行的是更新语句,通过getUpdateCount方法获取(huq)更新的记录数量。int executeUpdate(String sql)/执行给定 SQL 语句,该语句可以为 INSERT、 DELETE 或 UPDATE语句,返回值是更新的记录数量。Resu

8、ltSet executeQuery(String sql) /执行给定 SQL 语句,产生结果集。7/19/202210共六十七页5.释放(shfng)资源释放(shfng)ResultSetrs.close();释放Statementstm.close();释放Connectionconn.close();7/19/202211共六十七页用户注册、登录(dn l)登录页面login.jsp登录操作login_action.jsp欢迎页面welcome.jsp注册页面register.jsp注册操作register_action.jsp退出操作logout.jspJSP页面流程6个页面(y

9、min)!7/19/202212共六十七页Java Web开发(kif)模式(1)JSP(一层架构(ji u)模式)SystemResponseUserRequestBrowerWebContainerJSP文件(Viewer)DATA图1:一层架构图软件开发方案7/19/202213共六十七页JSP开发模式: 优点:逻辑结构简单、容易理解。 缺点:当应用系统(xtng)功能复杂时,代码的可读性差。 结论:通常用于简单的WEB网站开发。 7/19/202214共六十七页Java Web开发(kif)模式(2)JSP+JavaBean(两层架构(ji u)模式)SystemResponseUse

10、rRequestBrowerWebContainerJSP(Viewer)DATAJavaBean(Model)图2:两层架构模式7/19/202215共六十七页JSPJavaBean开发模式: 优点:该模式将业务逻辑与页面表现(bioxin)进行分离,在一定程度上增加了程序的可调试性和维护性。 缺点:JSP页面将显示与控制集于一身。 结论:适合简单、小型项目的快速构建与运行。7/19/202216共六十七页Java Web开发(kif)模式(3)JSP+JavaBean+Servlet(三层架构(ji u)模式)SystemResponseUserRequestBrowerWebContai

11、nerJSP(Viewer)DATAJavaBean(Model)Servlet(Controller)图3:三层架构模式7/19/202217共六十七页JSPServletJavaBean开发模式(msh): 优点:JSP负责页面显示。Servlet作为控制器,控制程序的流向。JavaBean负责业务逻辑处理。 遗憾:没有统一的开发框架导致开发周期长。7/19/202218共六十七页(4)SSH (struts2+spring+hibernate)整合开发(kif)(多层架构模式)SystemResponseUserRequestBrowerWebContainerJSP(Viewer)DA

12、TADataPersistenceServlet(Controller)DAO图4:多层架构图7/19/202219共六十七页6.2 JavaBean技术(jsh)JavaBean实际上是把一些(yxi)属性和方法封装起来的Java类,它遵循一定的编程规则,把可以重复利用的功能代码封装起来提供给其他开发人员和页面调用。JavaBean的工作过程:JSPJavaBean调用JavaBean的方法返回处理的结果7/19/202220共六十七页为什么要在JSP中使用(shyng)JavaBean?原因:代码重用性差。业务逻辑和页面显示代码混乱。代码可读性差,后期(huq)维护困难。7/19/2022

13、21共六十七页JavaBean的编程规范(gufn):遵守四点:1. 如果类的属性名是xxx,在类中使用两个方法:getXxx(),用来获取属性xxx。setXxx(),用来修改属性xxx。2. boolean类型的成员变量,允许使用is代替get和set。如:isValid()或getValid()。3. 类中方法的访问属性必须是public的。类中如果有构造方法,要求是无参数(cnsh)的。4. 如果使用Tomcat5.0版本后的引擎服务器,bean必须有包名。如:package tom。7/19/202222共六十七页package tom;public class TestCounte

14、rprivate int num;public void testCounter() num=1; 类名要首字母大写,后面的单词首字母大写。方法(fngf)名的第一个单词小写,后面的单词首字母大写。变量名的第一个单词小写,后面的单词首字母大写。JavaBean命名(mng mng)规则 7/19/202223共六十七页在JSP中调用(dioyng)JavaBean 第一步必须有相应的import指令: 第二步是使用下列(xili)三种JSP动作标签,分别是:jsp:useBean动作标记Jsp:setProperty动作标记Jsp:getProperty动作标记7/19/202224共六十七页

15、在JSP中调用(dioyng)JavaBean使用jsp:useBean指令声明JavaBean对象,语法格式(g shi):其中,id是当前页面中引用JavaBean的名字。scope指定JavaBean的作用范围,可取4个值: page:JavaBean只能在当前页面中使用。在JSP页面执行完毕后,该JavaBean将会被进行垃圾回收。 request:JavaBean在相临的两个页面中有效。 session:JavaBean在整个用户会话过程中都有效。 application:JavaBean在当前整个Web应用的范围内有效。7/19/202225共六十七页讨论(toln)Javabea

16、n中scope的不同取值和默认值1、先讨论(toln)request、session与application区别?package com;import java.io.*;public class Trick int i=1; public int getI() i+; return i; Trick.javatrick.jsp7/19/202226共六十七页运行trick.jspRequest: 刷新页面3次屏幕显示2,重启浏览器屏幕显示2;Session: 刷新页面3次数字从2开始递增至4,重启浏览器屏幕重新从2开始递增;Application: 刷新页面3次数字从2开始递增4,重启浏览器

17、从4开始递增。结论:应用范围大小比较(bjio):requestsessionapplicationRequest: 请求期间有效Session: 会话期间有效Application: 服务器运行期间有效7/19/202227共六十七页2、再讨论(toln)page与request区别? 运行trick1.jsptrick.jsp,trick1.jsp中同取scope=”request”: 屏幕显示3trick.jsp,trick1.jsp中同取scope=”page”: 屏幕显示2结论:应用(yngyng)范围大小:pagerequesttrick.jsp7/19/202228共六十七页3、

18、scope的默认值测试方法: trick.jsp中scope=“page”; trick.jsp中去掉scope; 运行trick.jsp,屏幕显示2,与scope=”page”时结果(ji gu)相同,故理论上默认值应为page。7/19/202229共六十七页架构(ji u)2:JSP+JavaBean架构(ji u)原型架构1:用户注册、登录(JSP)DBAccess.javaUserBean.java架构2:demo(JSP+JavaBean)数据库底层(d cn)处理 业务逻辑操作 7/19/202230共六十七页架构(ji u)3:JSP+JavaBean+Servlet架构(ji

19、 u)原型UserServlet.java架构3:demo(JSP+JavaBean+Servlet)架构1:用户注册、登录(JSP)DBAccess.javaUserBean.java架构2:demo(JSP+JavaBean)7/19/202231共六十七页6.3 Hibernate技术(jsh)理论基础Hibernate开发流程Hibernate核心(hxn)接口7/19/202232共六十七页6.3.1 理论(lln)基础存在(cnzi)的理论基础:数据库操作的三个阶段ORM对象关系映射持久化和持久层概念7/19/202233共六十七页操作(cozu)数据库的三个阶段1)JDBC阶段

20、操作数据库需遵6步:加载JDBC驱动程序(只做一次)创建与数据库的连接(Connection) 创建语句对象(duxing)(Statement)执行语句(execute、executeUpdate、executeQuery)处理结果(ResultSet)释放资源7/19/202234共六十七页2)封装JDBC阶段(jidun)开发数据库底层处理JavaBeanDBAccess.javapublic boolean createConn():加载驱动创建连接对象(duxing);public boolean update(String sql):执行更新SQL;public void quer

21、y(String sql):执行查询SQL;public void closeRs():public void closeStm();public void closeConn();开发业务逻辑操作 JavaBean7/19/202235共六十七页 3)ORM(Object Relational Mapping,对象关系映射(yngsh))阶段 在面向(min xin)对象的编程开发中,面向(min xin)过程的关系数据库数据库的操作与面向(min xin)对象的Java代码操作,显然是两种开发思路。 能否操作数据库像操作Java类一样? 于是,ORM便应运而生了。7/19/202236共六

22、十七页ORM对象(duxing)关系映射ORM(Object Relational Mapping,对象(duxing)关系映射)是一种为了解决面向对象(duxing)与关系数据库存在的互不匹配的现象的技术。用户实体、数据表、JAVA类之间映射关系:用户实体编号 用户名 密码 EmailUser表PKIDUsernamePasswordemailUser类-ID-username-password-emailERORM7/19/202237共六十七页持久(chji)化和持久(chji)层概念持久化(Persistence):是对数据和程序状态的保持,是将数据在瞬时状态和持久状态之间转换的机制。

23、持久层(Persistence Layer):是专注(zhunzh)于实现数据持久化的一个相对独立的领域(Domain),是负责向(从)存储器中存储(获取)数据的一组类和组件。7/19/202238共六十七页SSH (struts2+spring+hibernate)整合开发(kif)(多层架构模式)SystemResponseUserRequestBrowerWebContainerJSP(Viewer)DATADataPersistenceServlet(Controller)DAOORM组件(z jin),负责封装数据库访问的细节!7/19/202239共六十七页持久(chji)层可选方

24、案方案优点缺点JDBC成熟,流行代码烦杂,可读性差,维护困难,移植困难。Entity BeanEJB3不可移植,依赖性强,不可序列化,不支持多态的关联查询。Apache OJB属Apache基金组织文档资源太少。iBATIS可以控制更多的数据库操作细节持久层封装不够彻底。Hibernate成熟、流行、功能强大。并逐渐成JAVA持久层标准。不够透明。7/19/202240共六十七页6.3.2 Hibernate框架(kun ji)Hibernate是目前非常优秀、成熟的O/R Mapping框架,它是对JDBC的轻量级的对象封装,可以用在任何JDBC使用的场合。Hibernate的工作原理:通过

25、文件把对象和数据库表字(bioz)段之间建立起一个映射关系。Hibernate优势开源:/成熟流行自定义API7/19/202241共六十七页Hibernate开发(kif)流程图数据库表数据库表映射文件持久化类Hibernate配置文件Hibernate APIDAO层Service层7/19/202242共六十七页Hibernate开发(kif)步骤在JAVA应用中,Hibernate开发步骤(bzhu):下载并安装Hibernate3。创建Hibernate的配置文件。创建Hibernate映射文件。创建持久化(POJO)类。编写DAO层代码。编写Service层代码。7/19/2022

26、43共六十七页1.安装(nzhung)配置Hibernate下载(xi zi)并安装hibernate3。 将下载的hibernate3.jar和/lib下的所有文件都复制到项目的lib子目录下:hibernate3.jarcglib.jarasm.jarcommons-collections.jarcommons-logging.jarjta.jardom4j.jar7/19/202244共六十七页2.创建(chungjin)Hibernate的配置文件Hibernate配置文件:主要用于配置(pizh)数据库连接和Hibernate运行时所需的各种属性。支持两种形式:XML和propert

27、ies格式的配置文件,推荐使用XML格式。pertieshibernate.cfg.xml7/19/202245共六十七页hibernate.cfg.xml文件(wnjin) com.mysql.jdbc.Driver jdbc:mysql:/localhost:3306/testdb root 123456 org.hibernate.dialect.MySQLDialect true 7/19/202246共六十七页3.编写(binxi)映射文件User.hbm.xml /定义(dngy)主键 /主键字段为自增类型 7/19/202247共六十七页4.编写(binxi)持久化类(POJO类

28、)User.java持久化类POJO(Plain Old Java Objects,简单的Java对象),实际就是普通JavaBeans。遵循4条规则:为属性字段创建对应的getXXX()和setXXX()方法。实现(shxin)一个默认的无参构造方法。提供一个标识属性,该属性映射数据库表的主键字段。使用非final的类。7/19/202248共六十七页5.编写(binxi)DAO类UserDAO.javaDAO(Data Access Object,数据访问(fngwn)对象):负责调用hibernate API,实现CRUD操作。7/19/202249共六十七页6.编写Service层代码

29、(di m)并运行Service层代码,面向用户服务(fw)并定义与实际业务相关的方法,主要是面向用户负责调用DAO层的代码。7/19/202250共六十七页举例(j l):请参照课堂中所举的具体(jt)案例。7/19/202251共六十七页6.3.3 Hibernate核心(hxn)接口和类Hibernate 的核心(hxn)接口和类有5个:配置Hibernate的类:Configuration。访问数据库操作的接口:SessionFactory、Session、 Query、Transaction接口。pertiesConfiguration 配置hibernateSessionFacto

30、ry 初始化hibernateSession 负责对象操作Java EE 应用Hibernate.cfg.xml*.hbm.xmlCriteria 条件查询Transaction管理事务Query HQL查询图:Hibernate常用的接口和类7/19/202252共六十七页Configuration类Configuration负责配置并启动Hibernate(解析Hibernate的配置文件(wnjin)和持久化映射文件(wnjin))。创建SessionFactoty对象。7/19/202253共六十七页SessionFactory接口(ji ku)SessionFactory可以生成Se

31、ssion对象。一般一个(y )项目只有一个(y )SessionFactory对象。 Configuration cfg=new Configuration().configure(); SessionFactory factory=cfg.buildSessionFactory(); Session session=factory.getCurrentSession();7/19/202254共六十七页Session 接口(ji ku)session对象 用于执行(zhxng)被持久化对象的CRUD操作7/19/202255共六十七页获取(huq)session对象Configuratio

32、n cfg=new Configuration().configure();SessionFactory factory=cfg.buildSessionFactory();Session session=factory.openSession();使用session对象方法:save() 保存对象update() 更新持久化对象。 delete() 移除持久化对象beginTransaction() 开始事务操作方法:getCurrentSession()注:使用getCurrentSession()需要(xyo)在hibernate.cfg.xml中加入如下配置: thread7/19/2

33、02256共六十七页Transaction接口(ji ku)负责(fz)事务相关的操作事务操作:获取Transaction对象Transaction trans=session.beginTransaction()事务提交mit();事务回滚trans.rollback();7/19/202257共六十七页Query接口(ji ku)创建并执行面向对象的标准化查询(chxn)可以使用HQL可以使用SQL7/19/202258共六十七页HQL(Hibernate Query Language)语言(yyn) HQL是完全面向对象的查询语言, HQL语法简单,类似(li s)于普通SQL的语法。与

34、SQL唯一不同的是,HQL将SQL中的表名变成了Hibernate中的持久化类的名称。总体语法结构是selectfromwheregroup by havingorder by7/19/202259共六十七页Query查询(chxn)步骤this.session = factory.openSession() ;/获取Session对象;String hql= FROM Person WHERE id=? ;/编写HQL语句;Query q = this.session.createQuery(hql) ;/以HQL语句作为参数,调用Session的createQuery方法创建(chungj

35、in)查询对象;q.setString(0,id) ;/如果HQL语句包含参数,调用Query的setXxx方法为参数赋值;List l = q.list() ;/调用Query对象的list方法遍历查询结果 Iterator iter = l.iterator() ; if(iter.hasNext() p = (Person)iter.next() ; return p ;7/19/202260共六十七页HQL语法(yf)from 子句所有的查询语句至少有from语句。例如(lr):要查询Person持久化类: from Person 可以为Person起个别名 from Person as pe7/19/202261共六十七页select子句选择哪些(nxi)对象或属性返回到查询结果中。select id, name from Person 可以使用的聚集函数:avg(.) 求均值,sum(.) 求和,min(.)最小值,max(.)最大值 count(.) 求个数使用distinct 去除重复的数据。如:计算age的总和?select cou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论