Hibernate简介.docx_第1页
Hibernate简介.docx_第2页
Hibernate简介.docx_第3页
Hibernate简介.docx_第4页
Hibernate简介.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

一、 Hibernate定义Hibernate是一种Java语言下的对象关系映射解决方案,是一个基于Java的开源的持久化中间件,对JDBC做了轻量的封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 它是一种自由、开源的软件。它用来把对象模型表示的对象映射到基于SQL 的关系模型结构中去,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和 Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五的核心接口分别加以介绍。Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。Session的方法的详解:1.保存 svae:立即插入数据库,并且返回主键 persist:不立即(延迟)插入数据库,无返回值2.获取 load:加载对象后,对对象的改动不会立即刷新到db,必须flush到dbex: User user=session.load(User.class,2);user.setName(gt); user.flush(); (延迟加载) get:加载对象后,对对象的改动立即刷新到db3.更新 update:持久化对象,更新 saveOrUpdate:包含save()和update()功能,如果传入的参数是临时对象(没有保存过)就调用save()方法;如果传入的参数是游离对象,就调用update()方法 merge:不会持久化对象,只会把托管对象的修改更新到db4.删除 delete:从数据库中删除与JAVA对象对应的记录5.清理 flush:把缓存同步到db clear:清除session的缓存大小(更新批量时,应考虑)二、 Hibernate的优缺点(1)优点:a、Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透明性。b、Hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。c、 它支持各种关系数据库,从一对一到多对多的各种复杂关系。(2)缺点:Hibernate限制您所使用的对象模型。例如,一个持久性类不能映射到多个表。三、 使用步骤1、创建Hibernate配置文件,存储和数据库连接的相关信息,放在classes下。2、创建持久化类(数据bean并实现Serializable接口)注意:Serializable接口不是必需的,但是在分布式的系统中,不同的进程之间传输时需要实现这个接口。POJO(Plain Ordinary Java Object) 就是Value Object。 3、创建对象-关系-映射文件(ORM Object Relational Map)4、编写使用Hibernate API访问数据库的代码。四、创建映射文件使用XML文件指定对象和数据库表之间的映射,放在持久化类相同的目录下。 五、HQL(Hibernate Query Language)1、 添加Configuration cfg = new Configuration();Configuration c = cfg.configure();SessionFactory sf = c.buildSessionFactory();Session sess = sf.openSession(); Transaction tx=null;try tx = sess.beginTransaction(); Users u = new Users(); u.setName(bbb); sess.save(u); mit();catch (Exception e) if (tx!=null) tx.rollback(); e.printStackTrace();finally sess.close();2、 查询a) 所有对象from User 注意User大写或者select u from Users as ub) 条件查询from Users as u where id=1c) 模糊查询String name=”abc”;String username=”%”+name+”%”;Query q = sess.createQuery(“from Users as u where u.username like :key”);q.setparameter(“key”,username); 或者String sql = from News as n where title like %+title+%;d)例子:Transaction tx=null;try tx = sess.beginTransaction();String sql = from Users;Query query = sess.createQuery(sql);List list = query.list();Iterator it = list.iterator();while(it.hasNext()Users u = (Users)it.next();System.out.println(id=+u.getId()+ name=+u.getName();mit();catch (Exception e) if (tx!=null) tx.rollback(); e.printStackTrace();finally sess.close();3、 更新session.update(user)4、 删除session.delete(user);5、 通用jdbc查询Connection conn = session.connection();/建立到数据库的连接PreparedStatement ps = conn.prepareStatement(sql);六、Hibernate中jar包简介(了解)必选包:Hibernate3.jar:Hibernate的库,必须使用的jar包 cglib-asm.jar:CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包 dom4j.jar:dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j,直到现在。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包, Hibernate用它来读写配置文件。 odmg.jar:ODMG是一个ORM的规范,Hibernate实现了ODMG规范,这是一个核心的库,必须使用的jar包。 commons-collections.jar:Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。 commons-beanutils.jar:Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-lang.jar:Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。 commons-logging.jar:Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带的 java.util.logging,如果也找不到就用Simple Lmons-logging.jar的出现是一个历史的的遗留的遗憾,当初Apache极力游说Sun把log4j加入JDK1.4,然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,使用自己的java.util.logging,这个包的功能比log4j差的很远,性能也一般。 后来Apache就开发出来了commons-logging.jar用来兼容两个 logger。因此用commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4j, java.util.logging或者它自带的Simple Logger。不过我仍然强烈建议使用log4j,因为log4j性能很高,log输出信息时间几乎等于System.out,而处理一条log平均只需要5us。你可以在Hibernate的src目录下找到Hibernate已经为你准备好了的log4j的配置文件,你只需要到Apache 网站去下载log4j就可以了。commons-logging.jar也是必须的jar包。可选包: ant.jar:Ant编译工具的jar包,用来编译Hibernate源代码的。如果你不准备修改和编译Hibernate源代码,那么就没有什么用,可选的jar包 optional.jar:Ant的一个辅助包。 c3p0.jar:C3PO是一个数据库连接池,Hibernate可以配置为使用C3PO连接池。如果你准备用这个连接池,就需要这个jar包。 proxool.jar:也是一个连接池,同上。 commons-pool.jar, commons-dbcp.jar:DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCP。 实际上Hibernate自己也实现了一个非常非常简单的数据库连接池,加上上面3个,你实际上可以在Hibernate上选择4种不同的数据库连接池,选择哪一个看个人的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中使用Hibernate,一定要用App Server的连接池,不要用以上4种连接池,否则容器管理事务不起作用。 connector.jar:JCA 规范,如果你在App Server上把Hibernate配置为Connector的话,就需要这个jar。不过实际上一般App Server肯定会带上这个包,所以实际上是多余的包。 jaas.jar:JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以实际上是多余的包。 jcs.jar:如果你准备在Hibernate中使用JCS的话,那么必须包括它,否则就不用。 jdbc2_0-stdext.jar:JDBC2.0的扩展包,一般来说数据库连接池会用上它。不过App Server都会带上,所以也是多余的。 jta.jar:JTA规范,当Hibernate使用JTA的时候需要,不过App Server都会带上,所以也是多余的。 junit.jar:Junit包,当你运行Hibernate自带的测试代码的时候需要,否则就不用。 xalan.jar, xerces.jar, xml-apis.jar:Xerces是XML解析器,Xalan是格式化器,xml-apis

温馨提示

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

评论

0/150

提交评论