`

Hibernate(基础一)

阅读更多
映射文件(hbm.xml): 是配置对象与数据库表的对应关系。是站在对象的位置上进
行配置的。* hibernate-mapping元素, package:指定一个包前缀,如果在映射文档中
没有指定全限定的类名,就使用这个作为包名。auto-import:指定是否可以在查
询语言中使用非全限定名(仅限于本映射文件中的类),默认为true。

Java是面向对象语言,对象模型,其主要概念有:继承、关联、多态等;关系型
数据库中的概念有:表、主键、外键等。当使用Jdbc去操作关系型数据库时,因
为他们对应不起来,所以要做转换(转换的过程就叫做ORM, Object Relation
Mapping, 对象关系映射)。除了手工转换外,还可以使用ORM框架来解决,当前
主流ORM框架有Hibernate和TopLink等,我们学习的是Hibernate(3.2.6).

0,准备环境:
   1,引入jar包,最基本的包为:
      hibernate3.jar
      antlr-2.7.6.jar
      asm.jar
      asm-attrs.jar
      cglib-2.1.3.jar
      dom4j-1.6.1.jar
      commons-collections-2.1.1.jar
      commons-logging-1.0.4.jar
      jta.jar
     所用的数据库的JDBC驱动
     可以选择加入log4j-1.2.11.jar。

   2,拷贝配置文件hibernate.cfg.xml到classpath的根中,并修改其中的数据
      库连接信息。选择拷贝log4j.properties文件。
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///lesson-hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<!-- 显示sql语句 -->
<property name="show_sql">true</property>
<!-- 自动更新表结构 -->
<property name="hbm2ddl.auto">update</property>

Hibernate映射文件就是用于说明Java对象与数据库表中的记录的对应关系的。不
能性质的属性(例如主键和普通属性)用不同的标签来映射,如果Java对象中的
某个属性不需要存储到数据库中,那么就不需要在映射文件中配置这个属性。

1,HelloWorld:
  domain: User: id:int, name:string.
  dao: UserDao: save, delete, update, get, find(int first, int max).
  实现实体映射与实体的增删改查与分页查询(HQL)。

  Hibernate对实体的要求:
    1,有默认的构造方法;
    2,推荐提供一个标识属性(与业务无关的id);
    3,推荐此类不是final的(对懒加载有影响);
    4,推荐重写hashCode与equals方法。

2,属性映射:name,colum,type,length,not-null.
  id映射与主键生成策略;unsaved-value:一个特定的标识属性值,用来标专该
    实例是刚刚创建的,尚未保存。默认是由hibernate选择一个合理的值。
  在id或property中指定column信息或使用<column>子元素。
  主键生成策略:identity, increment, ehilo, native.
  常用的映射类型:integer,string,date,timestamp,text,binary.
  时间类型映射:  生日(Date,date);
  大文本类型映射:描述(String,text);
  二进制类型映射:文件(byte[],binary);


Session的几个主要方法
1.save,persist,保存数据
2.delete,删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
4.get,根据ID查,会立刻访问数据库。
5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。
6.saveOrUpdate,merge,由Hibernte来确定是save或update

3,Hibernate对象实例的三种状态与Session的方法:
  三种状态:自由(瞬时)、持久、游离;
    自由(瞬时)状态:从未与任何Session关联过,一般指新创建的对象实例。
    持久状态:目前正与Session有关联,拥有持久化标识(相当于主键值),
            并且相关联的session没有关闭,事务没有提交。持久对象状态发
            生改变,在事务提交时会更新到数据库。
    游离状态:曾经与Session关联过,不过那个Session已经关闭了。

  三种状态之间的转换(通过Session的方法):
  Session的方法:save(persist), delete, get, load.
    update:update是把一个已经更改过的脱管状态的对象变成持久状态。
    saveOrUpdate(merge):【什么下情况添加什么情况下更新】;
       使用save和saveOrUpdate方法时,如果被操作对象与另一个跟本session
       关联的po对象拥有相同的持久化标识(identifier),就会抛出一个异常:
       org.hibernate.NonUniqueObjectException。

       通常下面的场景会使用update()或saveOrUpdate():程序在第一个
       session 中加载对象,接着把session关闭,该对象被传递到表现层,对
       象发生了一些改动,该对象被返回到业务逻辑层最终到持久层,程序创建
       第二session调用第二个session的update()方法持久这些改动。

    contains:Session是否包含某个对象(是否是持久状态);
    clear:清空一级缓存;
    flush:强制刷出(更新到数据库);
 
    load与get的区别:
       get方法:如果找不到符合条件的纪录,返回null。
       load方法:返回的是一个代理对象。在第一次访问这些懒加载对象(代理对
         象)的属性(getId方法除外)时,hibernate 会初始化这些代理。这
         时如果数据库中没有与之对应的记录,就会抛异常:
         org.hibernate.ObjectNotFoundException: No row with the given
         identifier exists: ...。
       如果PO是final的,则load被调用时会马上发出一条select语句(即不能使
       用懒加载功能)。

分享到:
评论

相关推荐

    hibernate基础实验

    (1) Hibernate是一个面向Java环境的对象/关系数据库映射工具,Hibernate不仅管理Java类型到数据库表的映射,还提供查询数据和操作数据的OO方法。 (2) Hibernate对JDBC进行了轻量级的对象封装,使Java程序员可以...

    hibernate基础教程

    Hibernate中使用了一级缓存和二级缓存的机制来提高程序的性能. 一 为什么要使用缓存? 缓存是一块存储区域,可能是一块内存,也可能是一块硬盘.缓存能起到缓冲的作用,把程序经常使用...

    hibernate基础学习资料

    Java框架中关于hibernate的基础学习

    HIbernate基础包

    hibaernate 基础包,用于ssh开发,直接导进去就可以用了,一套完整的jar包。

    深入浅出Hibernate(PDF)第一部分

    再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、...

    hibernate基础技术

    hibernate常用技术,适合新手,包含所有hibernate的技术,每个技术都有一个例子和解释

    hibernate基础教程.pdf

    hibernate的入门教程,大家快来下吧昂。嘿嘿。。给小弟点分昂。嘿嘿~~~

    hibernate基础 快速入门 一

    hibernate的基础 快速入门........................................

    struts+spring+hibernate基础整合包+数据库Mysql+C3p0

    SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架 现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,另外,由于Spring使用的依赖注射以及AOP...

    Hibernate_基础汇总(一)

    Hibernate_基础汇总(一)

    Hibernate开发需要的8个基础包

    Hibernate开发需要的8个基础包,其中包括了Hibernate包中没有的一个slf4j实现包,有了这8个基础包可以基本实现Hibernate的大众操作

    Hibernate 课件_基础入门

    我培训用的 Hibernate课件, 个人能力范围内精心整理... 这是第一篇, 内容如下: 了解基于B/S的三层架构; 了解持久化层-O/R Mapping ;理解Java持久化层技术Hibernate; 学习Hibernate的开发步骤;学习Hibernate的重要接口

    深入浅出Hibernate中文版 part1

    第4章 Hibernate基础 4.1 Hibernate基础语义 4.2 基础配置 4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 4.7 自定义持久化实现 第5章 Hibernate高级特性 5.1 Hibernate持久...

    hibernate基础项目

    这是一个加入了hibernate框架的空白项目,里面有hibernate必须的jar,简单的配置(配置了C3P0连接池),自己写的hibernate工具类,还有一个使用hibernate操作Student类的简单例子,很适合刚学习hibernate的童鞋拿来...

    使用Mysql+Maven+Hibernate的一对一,一对多的CURD小案例

    使用mysql+maven+Hibernate做的一个一对一,一对多小案例,有需要的拿走,这个比较基础

    深入浅出Hibernate.pdf

    再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、...

    Java框架hibernate基础教程,简单上手。

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以...

    深入浅出Hibernate(PDF)第二部分

    再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、...

    Hibernate应用基础知识.rar

    使用了一些简单的hibernate基础,一个简单的idea项目,搭建了hibernate环境,适合刚刚学习hibernate的初学者参考

    Hibernate笔记 马士兵

    第11课 Hibernate基础配置 15 一、 提纲 15 二、 介绍MYSQL的图形化客户端 16 三、 Hibernate.cfg.xml:hbm2ddl.auto 16 四、 搭建日志环境并配置显示DDL语句 16 五、 搭建Junit环境 16 六、 ehibernate.cfg.xml : ...

Global site tag (gtag.js) - Google Analytics