Hibernate主键生成策略和持久化对象的三种状态和MySql常用的数据库语句

来源:互联网 发布:手机焓湿图计算软件 编辑:程序博客网 时间:2024/06/06 23:17

     不像使用struts框架只能建立web项目一样,Hibernate可用于建立java项目,当然最主要的仍然需要一些依赖的jar包和配置文件。Hibernate通过映射文件来展示实体,然后将映射文件配置到配置文件中进行管理。最大的优点就是极大的封装了对数据库的访问。上一篇博客已经初步了解了什么是Hibernate框架,以及作用和优缺点,剩下的博客我们接触Hibernate的知识点,最后贯穿到Hibernate的核心思想上。

主键生成策略:

    Hibernate在配置文件中需要配置主键,并为主键指定一种生成策略,通过这种主键生成策略告诉hibernate我们的主键在数据库中是用何种方式实现的。下面是几种Hibernate常用的主键生成策略:

1、uuid方式:

这种方式可以保证数据库创建主键的唯一性,Hibernate在维护数据库主键时不需要从数据库中查询,提高了数据访问的效率,适用于所有的数据库,可以轻松的从各个数据库中来回切换,最大的缺点就是占据的数据库存储空间很大。如果我们的项目需要使用不同的数据库,那么这种方式就是最理想的。

2、identity方式:

这种主键的生成方式与底层数据库有关,不同的数据库使用不同的主键增长方式,并且这种方式的应用也只能用来支持主键可以自增长的数据库中。这种方式的使用,数据库在建表的时候指定id为自增长,不需要我们手动插入一个自增长的主键值,系统会自动使主键值递增,使用方便,但是因为依赖于数据库,所以不方便在数据库之间移植。

3、native方式:

这种方式可以根据数据库的类型,Hibernate配置文件中的方言来判断是哪个数据库,可以在数据库之间来回切换,所以如果我们的程序开发中要用到多个数据库的时候可以采用这种生成策略。

4、assigned方式

这种方式需要我们手动分配主键,Hibernate不在自动的为我们生成主键,采用这种方式,我们需要在程序中指明主键值是什么,这种方式更加自由化,如果我们在主键需求不清楚的时候可以采用这种方式。

5、foreign方式

这种方式是采用外部对象的主键作为本对象的主键,一般应用在一对一的关联上,使用范围很小,不经常使用。

    还有其他的主键生成策略,这里不一一介绍了,细分这些主键生成的方式,有的不需要和数据库交互就可以直接生成id,例如:uuid。有的需要和数据库交互才能生成id的,例如:identity、foreign、sequenceincrement。有的可以自己管理,例如:assigned。根据项目的需求特点选择合适的主键生成策略才会更方便于程序的开发。

Hibernate中持久化对象的三种状态转换:

    所谓一个实体就是一个对象,对象自然有存在的生命周期,在java中一个对象生命的开始就是我们new出这个对象,到最后该对象使用完成被垃圾回收掉。在整个过程中,我们把这个对象分为了三种存在的状态,TO、PO、DO,分别为瞬时态,持久态和游离态。

    下面是三种状态的转换图:


    当看到这个图时,我第一印象就想到了操作系统中的关于进程转换的三种状态:


两者相较,其实含义是相似的。

 1、瞬时状态 (Transient Objects)

    当我们通过Javanew关键字来生成一个实体对象时,这时这个实体对象就处于该状态,如下:

 Student stu=new Student (“zx”,27);

此时stu只是通过JVM获得了一块内存空间,还并没有通过Session对象的save()方法保存进数据库,因此也就还没有纳入Hibernate的缓存管理中,也就是说stu对象现在还自由的游荡于Hibernate缓存管理之外。

瞬时状态特点:

(1) 不和 Session 实例关联

(2) 在数据库中没有与之关联的记录

  2、持久状态 (Persistent)

    持久化对象就是已经被保存进数据库的实体对象,并且这个实体对象现在还处于Hibernate的缓存管理之中。这是对该实体对象的任何修改,都会在清理缓存时同步到数据库中。

持久化对象的特点:

(1)  Session 实例关联

(2) 在数据库中有和持久对象关联的记录

  3、脱管状态 (Detached)

    当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它对应的记录,只是现在这个游离对象脱离了Hibernate的缓存管理,而自由对象不会在数据库中出现与它对应的数据记录。

脱管对象特点:

(1) 本质上和瞬时对象相同

(2) 只是比爱瞬时对象多了一个数据库记录标识值 id.

MySql常用的数据库语句:

(MySql数据库的密码是root,用户名是root)

create database 数据库名;

use 数据库名;

show tables;显示数据库中的表

desc tables;查看表的结果

select * from tables;查询表中的数据

drop tables 表名称;删除某个表的信息

drop database 数据库名;删除某个库的信息






0 0
原创粉丝点击