`

hibernate入门知识

阅读更多

<div class="iteye-blog-content-contain" style="font-size: 14px"></div>

        1.Hibernate 讲解内容:

1.Hibernate简介
2.Hibernate开发流程
3.Hibernate配置文件
4.Hibernate核心接口和类
5.HibernateORM映射
6.HQL
7.Hibernate懒加载机制和抓取策略
8.Hibernate缓存
9.Hibernate锁机制

 2.Hibernate是作用在持久层的ORM开源框架,底层是JDBC编写的(O是object对象,R是relation关系,M是mapping映射)。ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单说ORM

是通过使用描述对象和数据之间映射的元数据(*.hbm.xml)将java程序中的对象自动持久化到数据库中。本质就是将数据从一种形式转换成另一种形式。

 

3.Hibernate是帮助我们利用面向对象的思想开发基于关系型数据库的应用程序。

4.Hibernate中若关系式一对一,外键设在次要的或者后产生的一方,若是一对多的关系外键设置多的一方。

5.类的关系式继承关系的,转成hibernate的表关系是一对一关系。

6.创建Hibernate项目所需jar包:

 7.配置cfg.xml:

 8.测试数据库链接:用junit插件测试的.

 

9.SessionFactory和Configuration

  • SessionFactory是线程安全的,一个数据库对应一个SessionFactory,生命周期长,一般在整个系统生命周期内有效;SessionFactory保存着和数据库连接的相关信息(user,password,url)和映射信息,以及Hibernate运行时要用到的一些信息。
  • SessionFactory是产生Session的工厂 
  • SessionFactory维护二级缓存
  • 工厂初始化代码:

       Configuration cfg = new Configuration();

       cfg.configure(“config.cfg.xml”);

       也可以通过cfg.setProperty设置属性。

        SessionFactory sessionFactory = cfg.buildSessionFactory();   

10.Session:

  •  Session是非线程安全的,生命周期较短,代表一个和数据库的连接,在B/S系统中一般不会超过一个请求;内部维护一级缓存和数据库连接,如果session长时间打开,会长时间占用内存和数据库连接。
  • Session的几个主要方法:

       1.save,保存对象

2.delete,删除对象

3.update,更新对象,如果数据库中没有记录,会出现异常。

4.get,根据ID查,会立刻访问数据库。

5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。

11.po和映射文件:

  •  开发流程

1由po-> mapping->db。(官方推荐)

2由DB开始,用工具生成mapping和po。(使用较多)

3由映射文件开始。

  • po类

       1.默认的构造方法(必须的)。

2.有无意义的标示符id(主键)(可选)

3.非final的,对懒加载有影响(可选)

      

 public class User {
         private int id;
         private String name;
         private Date createTime;
     
               public User(){}
      //getter setter…
        }

 

 

     *.hbm.xml

<?xml version="1.0"?>
<hibernate-mapping package=“com.puckasoft.po">
<class name="User" table="user">
<id name="id">
<generator class="native"/>//native表示自增
</id>
<property name="name"/>
<property name=“createTime”
column=“create_time”/>
</class>
</hibernate-mapping>

 

 

12.创建好po类和映射文件---》导表(在数据库中创建表)



 13.单表的数据保存例子:

 若是不想让某个字段插入,可以在hbm.xml中配置中<property name="name"  insert=“false” /> 字段的property 标签中 的insert属性值改为false,默认是false。

14.update 数据例子:

把 回去session对象的方法封装起来,把sessionfactory写成单利模式:



 

 

 

1)当更新数据在数据中不存在,就是更新失败是会报异常:


意思是:批量跟新返回不期望的行数,实际更新0行,期望是1行。

2)若更新的那条数据存在但是对象只给要改变的那个属性赋值了,更新的结果是其他没赋值的字段也会被跟新,它们会根据默认值跟新字段。

3)若某个字段不允许更新可以在对应的.hbm.xml文件中对应的property标签中加上update属性把值改为“false”,当更新数据时这个字段不会更新。

15.delete操作例子:



 当删除的数据id在数据库中不存在,会跑一个异常和update时的异常一样的。

16.get方法和load方法的区别:



 


  •  load支持懒加载机制,而get方法不支持懒加载(load方法是在使用对象时发送的sql语句,get方法是在get方法是就发送sql语句),get方法是返回的po类,load方法返回的是cglib的代理类,增强po类的功能可以自己发送sql.
  • get方法返回的是实体对象本身,而load方法返回是实体对象的cglib代理类
  • 采用get加载数据如果没有匹配的数据返回null ,而load方法抛ObjectNotFoundException(get方法取不到数据时返回的对象就是null,当时load时代理类要继承po(po是null)类,所以回报异常。
  • load方法一般不单独使用(因为load方法查出的对象,return过后就不能使用了)

17.懒加载机制:

  • 定义:只有在真正使用实体对象时,才发出Sql语句加载它。所谓真正使用实体对象时是指调用了对象的方法,其中不包括getId,getClass方法。
  • 优点:避免无谓的性能开销
  • 当使用load方法加载实体时,会看映射文件中配置该类的class标签上的lazy属性,lazy=true才实现懒加载
  • 当使用getXXX方法加载关联对象时,会看映射文件中配置该关联对象的标签上的lazy属性,然后再决定是否实现懒加载
  • Hibernate标签上的 lazy属性,在3.x后是默认打开的,在以前版本中默认是关闭的。
  • 懒加载生命周期与session有关,lazy加载必须依赖于session一直开启,session关闭懒加载就失效,抛LazyInitializationException
  • 懒加载是用cglib代理类实现的,它依赖cglib.jar。cglib代理类是实体类的子类,cglib代理类能发送sql语句

18.懒加载的配置:

  • <class> 标签

     取值:true/false

     只对普通属性的延迟加载有效,不包括集合和其他类属性。

  • <set><List>集合标签

    取值: true/false/extra

    如果设置为true,那么就会在该集合被加载时发出SQL语句

    如果设置为false,那么在发出查询普通属性sql时就会随后发出集合的查询语句。

    如果设置为extra,与设置为true类似,但相对智能,建议在实际工作中选用extra.

  • <one-to-one><many-to-one> 单端关联标签 

     取值: proxy /false/noproxy

     如果设置为proxy,那么就会在类对象被加载时发出SQL语句。

     如果设置为false,那么在发出查询普通属性sql时就会随后发出类对象的查询语句。

19.po对象的三个状态:

 1)瞬时态 transient状态的特征

 * 在数据库中没有与之匹配的数据(没有唯一标识符)

 * 没有纳入session的管理

 

 2)持久态 persistent状态的特征

* persistent状态的对象在数据库中有与之匹配的数据(有唯一标识符)

* 纳入了session的管理

* 在清理缓存(脏数据检查)的时候,会和数据库同步

 

3)托管态 detached状态的特征

* 在数据库中有与之匹配的数据(有唯一标识符)

* 没有纳入session的管理

状态说明例子:



 注意:这个例子中第一个try的里面的第一个红框的下面的的update语句是可以去掉的,因为持久态会清理缓存同步 数据,所以在commit的时候会发送update语句,下面的那个update语句是不可以去掉的因为po只有在持久态是才有那个特征。

po对象生命周期图:



 20.动态更新(load方法的用处,load方法不能单独使用)

     1)把将要修改表对象的.hbm.xml文件中class标签中添加一个dynamic-update=“true”的属性。

     2)将需更新的对象load进来。

     3)改变某个属性

     4) commit。



 

 

 

 

   

 

 

 

 

  • 描述: 对象关系映射
  • 大小: 80.3 KB
  • 描述: 所需jar包
  • 大小: 100.3 KB
  • 描述: cfg.xml
  • 大小: 9.8 KB
  • 描述: 测试数据库链接
  • 大小: 112.2 KB
  • 描述: 怎样导表
  • 大小: 86.1 KB
  • 描述: save方法
  • 大小: 125.5 KB
  • 描述: 更新异常
  • 大小: 14.2 KB
  • 描述: update方法
  • 大小: 118 KB
  • 描述: delete方法
  • 大小: 90.2 KB
  • 描述: get方法
  • 大小: 62.5 KB
  • 描述: load方法
  • 大小: 52.8 KB
  • 描述: po状态
  • 大小: 139.9 KB
  • 描述: po状态图
  • 大小: 6.1 KB
  • 描述: session工厂
  • 大小: 140.2 KB
  • 描述: 动态更新
  • 大小: 91.7 KB
分享到:
评论

相关推荐

    java基础入门之Hibernate 入门

    Hibernate 入门知识

    hibernate的一些入门知识

    hibernate的一些入门知识.rar 本人所发布的所有资源,请访问以下地址 http://download.csdn.net/user/hahaomi23&lt;br&gt;http://download.csdn.net/user/hahaomi23&lt;br&gt;&lt;br&gt;希望这些资源对大家有所帮助! 如有...

    hibernate入门必看

    hibernate最基础知识 入门必学 很全面

    Hibernate3.2官方中文参考手册

    Hibernate3.2官方中文参考手册,内容涉及Hibernate入门知识、配置、集合类映射、关联关系映射、组件、事务并发、批量处理、对象事件等知识。

    hibernate知识点总结

    本文档适用于J2EE初学者,主要是针对hibernate部分的知识点进行总结,有助于初学者迅速入门

    hibernate入门课件共24页.pdf.zip

    hibernate入门课件共24页.pdf.zip

    Hibernate快速入门教程

    这个对于初学者是相当有用的一本书,学习梯度不高,适合初学者,语言通俗易懂,知识点明确,虽说没有老外写的高深,但是对于初学者,我觉得太深的东西反而会适得其反,适合的才是最佳的。

    Hibernate入门

    Hibernate入门,介绍了Hibernate的应用和基础知识,希望大家会喜欢,谢谢

    极好的hibernate入门实例

    hibernate very good 包含了所有的基本知识,适合入门学习

    《Hibernate3.2 参考手册》

    Hibernate3.2官方中文参考手册,内容涉及Hibernate入门知识、配置、集合类映射、关联关系映射、组件、事务并发、批量处理、对象事件等知识。

    hibernate中文文档

    Hibernate3.2官方中文参考手册,内容涉及Hibernate入门知识、配置、集合类映射、关联关系映射、组件、事务并发、批量处理、对象事件等知识。

    Hibernate知识总结(从入门到精通)

    Hibernate知识总结(从入门到精通),是我自己一点一点看视屏总结出来的,对于很多比较细小的知识点都总结到位,很适合刚刚入门的新手朋友,也适合各位进行温故知新~

    传智播客李勇hibernate源码1-20课

    02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|load|persist方法 05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名...

    hibernate培训入门

    hibernate培训入门,讲述了hibernate的基础知识及每个配置文件的作用和配置文件每个参数的作用

    hibernate 培训讲义

    hibernate 基础知识,对快速入门很有帮助

    Hibernate介绍

    Hibernate介绍,介绍了Hibernate相关的知识点,是入门的一份文档!

    Hibernate 中文API文档

    本章是面向Hibernate初学者的一个入门教程。我们从一个使用驻留内存式(in-memory)数据库的简单命令行应用程序开始, 用易于理解的方式逐步开发。 本章面向Hibernate初学者,但需要Java和SQL知识。它是在Michael ...

Global site tag (gtag.js) - Google Analytics