Hibernate基础与

来源:互联网 发布:app微信支付接口 php 编辑:程序博客网 时间:2024/06/05 01:52

          个人观点!    仅供参考!

 

 

                 在读本文前,我希望你对WEB开发流程有所了解,我还是简单的提一下步骤吧!

首先,我们会新建一个WEB项目,然后你可以选择手工进行Hibernate配置, 也可以直接用MyEclipse生成,这里我就讲讲用工具生成吧!

 

创建Hibernate框架流程:

hibernate开发流程(手工配置)
1、建立工程。
2、将hibernate/lib目录下所有的jar包拷入工程。并导入,同时需要导入hibernate3.jar和JDBC的驱动包

3、将hiberante/etc目录下hibernate.cfg.xml(用于JDBC驱动、URL、用户名、密码设置)和log4j.properties(日志处理)拷入src目录下

4、修改hibernate.cfg.xml基本配置文件,完成JDBC驱动、URL、用户名、密码及方言的设置;

5、创建对象模型。
6、在src下建立ORM映射文件,描述对象和关系的映射关系。
7、在hibernate.cfg.xml完成ORM映射文件的注册

 

O/R Mapping(映射):指的是对象数据和数据库数控的映射关系。也就是数据库那个子段映射哪个属性,我们使用ORM映射来完成数据库的记录和对象属性值之间的转化,——他是同一个数据不同的转化方式

1:Hibernate是一种开放的源代码的对象、关系映射框架,是构建在JDBC基础之上的框架
2:解决主抗不匹配的问题(对象是有属性而表是有字段组成问题在于怎么样吧表中的字段别称对象的属性,这就是阻抗)
3:尸体域对象属性和行为组成
4:关系型数据库游标和字段组成
5:完全着眼于关系数据库的OR映射
6:事务处理,生命周期管理不依赖于J2EE容器

 

价值:优点:
1:Hibernate只需要操作对象就可以完成数据库的增删改查操作,更切合面向对象编程
2:将对象数据报讯在数据库中
3:将数据库数据读入到对象中
4:轻量级,无侵入性,移植性好
5:失去理                                                                                                                                                                          
6:只对某个对象简单查询出来,对他进行编辑、膝盖。不是对很对对象进行批量操纵(只对单个对象操作优势)

 

缺点:
1:不适用于批量操作、
2:数据库特定映射、
3:表间关系复杂时、
4:表间联合查询是会造成性能问题                                                                                                                                        

Hibernate黑心包:Hibernate3.jar      

 

~~~~持久化java类必须遵循的原则
为类持久化字段申明访问方法(get/set),hibernate对javaBean分割的属性实行持久化

式袭击案一个默认的构造方法,这样的话hibernate就可以用constructor。newInstance()来实例化它们
如果是集合类型的属性,它的类型必须定义为集合的接口
提供一个表示属性,如果没有改属性,一些功能不起作用,
是有飞final的类
实体类中的属性不是数据库中的关键字


~~~主键生成策略
1:increment(自动增长)
2:identity(自动增长,对DB2,Mysql,sqlServer 数据库中相应的字段设置自动增长)
3:sequence(对Oracle数据库中相应才字设置自动增长)
书上pag106; 

~~~~hibernate对象的三种状态:
1:瞬时状态
直接new(不是通过对模型的设置时)的时候属于瞬时状态,数据库中没有相关记录,并且不受session管理

  形如:UserBean b = new UserBean(1,"","","","","");


2:持久化状态
b.setUserName("XXX");这时,session会先做插入,然后再修改这列的值为XXX
session会随时保证受管理的bean数据和数据库保持一致


3:游离状态
session关闭后属于有利状态,数据库有相关的记录,但是不受session管理

 

hibernate中get()和load()方法的区别

1:get为立即加载,load方法为执行完get后马上发出SQL语句查询数据,load方法为 延迟加载,执行完load方法后,
不会立即发出SQL语句,只有使用了查询对象后,载发出SQL语句,但是当sess关闭后在查询就会出错:
2:当查询主键不存在记录时,get方法返回为null,而load发放会抛出异常
3:get方法返回的是一个Bean的实际对象,而load方法返回的是一个CGlib产生的实体子类对象