1、Hibernate基础

1.1hibernate快速预览

Hibernate是目前非常流行的ORM框架,Object Relation Model,通过ORM框架我们可以仅仅只用对对象进行操作就可以轻松的实现对数据库的操作。3.6.8

入门:

1、导入Hibernate的jar包

   -hibernate-->lib-->required

   -hibernate-->hiberate.jar

  -hibernate-->lib-->jpa

   -log4j

   -mysql-connector

2、创建相应的业务对象(User)

3、创建Hibernate的配置文件

   -src-->hibernate.cfg.xml,在这个配置文件中进行相应的数据库连接设定

Image(83)

4、为相应的业务对象创建hbm的配置文件,在这个文件中说明与数据库的映射关系,如果为User对象创建就在User对象所在的包中创建一个User.hbm.xml文件

Image(84)

5、将hbm文件加入到cfg文件中

Image(85)

6、写代码

Image(86)

7、为了方便查询相应的SQL语句,需要将log4j.properties拷贝到项目


1.2、使用Hibernate实现 CRUD

1、编写同一个HibernateUtil在这个类中统一创建单例的SessionFactory和Session

Image(87)

2、编写添加方法

Image(88)

3、编写Update方法

Image(89)

4、编写load方法

Image(90)

5、编写delete方法

Image(91)

6、编写list方法

Image(92)

1.3hibernate的状态

1、Transient(瞬时状态)

    即没有ID,也没有被Session 管理
Image(93)

2、Persistent(持久化状态)

   当执行了save,update等操作之后,这个对象就会被session所管理,被管理之后就称为Persistent

  持久化状态的对象是有id的

Image(94)

Image(95)

3、Detached(离线状态)

   有ID,但是没有被session所管理,(session关闭,创建一个对象,设置了相应id)

Image(96)

Image(97)

4、对象状态的转换

Image(98)

5、几种特殊情况

5.1、如果对离线对象进行save操作,不会执行update而会直接insert、 Image(99)

5.2、对应瞬时对象而言,如果执行update会抛出异常(id找不到)

Image(100)

5.3、saveOrUpdate

Image(101)

特别注意:saveOrUpdate这个方法一般不会使用,因为我们在开发过程中是完全控制着数据对象状态

5.4、一个session中只能存在一份id相同的持久化状态对象

Image(102)

Image(103)


1.4、延迟加载

要获取一个对象有两种方法:get和load

  ·对于get方法而言不支持延迟加载(LazyLoad(懒加载))

Image(104)

  ·对于load而言支持延迟加载,延迟加载指的是执行了load之后,并不会直接发出sql语句去数据库取数据,只有在使用了这个对象的非id属性之后才会调用sql去数据库取数据,这是一种优化的策略

Image(105)

Image(106)

·使用load可能会出现的问题

Image(107)

·一些特殊情况

get的特殊情况

Image(108)

load的特殊情况

Image(109)

Image(110)

Image(111)

可以通过设置hbm文件取消延迟加载(一般不会这样做)

Image(112)

1.5ID生成策略

id是每一个对象必须有的标识,一般情况都是用一个没有任何语义的字段作为id

Image(113)

generator表示可以设置id的生成策略,对应mysql而言:auto_increment,对于oracle而言:是使用sequence来生成自动递增序列的

native表示会自动根据数据库进行选择,如果是mysql就选择auto_increment,如果是oracle就选择sequence

对于native而言id必须是int类型

Image(114)

还有另外一种生成策略:uuid(如果使用uuid主键必须是varchar类型)

Image(115)

可以设置生成策略为assigned,assigned表示主键由用户自己指定(不经常用)

Image(116)

posted @ 2015-12-06 20:06  拉风的风吹哥  阅读(178)  评论(0编辑  收藏  举报