浅谈Hibernate

O/R Mapping:

对象-关系映射,实现了Java应用中的对象到关系数据数据库中的表的自动的(和透明的)持久化,使用元数据(meta data)描述对象与数据库间的映射

 

Hibernate是一种开放源代码的对象/关系映射持久层框架

事务处理,生命周期管理不依赖于J2EE容器

解决数据库的方言问题

Hibernate只需要操作对象就可以完成数据库的增删查改操作,使用hibernate更面向对象

轻量级,无侵入性,移植性好

不适用范围:

批量对对象进行操作

数据库特定映射

表间关系复杂,会造成性能问题

 

轻量级和重量级:

一个框架的轻与重,主要是指该框架对于其他框架或容器的依赖性。如果依赖性强,那么是重量级框架,如果没有依赖性就是轻量级框架

 

Configuration类负责管理Hibernate的配置信息,包括:

Hibernate运行的底层信息:数据库的URL,用户名,密码

JDBC驱动类等

Configuration cfg = new Configuration().configure()  Configuration cfg = new Configuration()

 

主键生成策略:

Increment(自动增长,其主键由Hibernate控制,数据库中相应的字段没有设置自动增长,不能用于集群)

Identity(自动增长,对DB2,Mysqlsql server数据库中对应的字段设置自动增长)

Sequence(对Oracle数据库中相应的字段设置自动增长)

UUID采用UUID算法生成字符串唯一标识,UUID生成策略相对来讲速度较快,不需要使用数据库相关的维护表的操作,但是查找相对较慢

Native(根据数据库底层的描述,决定采用identity,sequence中的一个)

Assigned手动分配主键,当generator没有设置时,采用这种方式

select使用触发器分配主键

foreign使用另外一个相关联的对象的标识符,通常和<one-to-one>联合起来使用

 

 

 

对象状态:

Transient(瞬时状态):数据库没有相应记录,没有session管理

Persistent(持久状态)session调用save/update,并在数据库中添加了相应记录,并且session正在进行管理

Detached(游离状态):session事务提交时,数据库有与之对应的记录,从session一级缓存清除,session不再对其管理.

 

Hibernate可以使用原生SQL语句做查询

SQLQuery是一个接口

SQLQuery q = Session.createSQLQuery(“sql语句”);

List list =q.list();

For(Object obj : list){

Object[] arr = (Object[])obj;

System.out.println(arr[0] + “  ” +arr[1]);

}

一般用于复杂查询和统计查询

 

 org.hibernate.LazyInitializationExceptionhibernate的延迟加载异常。在查询延迟加载对象时,并不会立即发出sql语句做查询,而是在该对象被使用时才发出sql语句查询,如果在使用延迟加载对象时,session做了关闭,就会抛出该异常

 

Sessionload()get()的区别:

1.Get()为立即加载,在执行了get()方法后,立即发出sql语句查询对象

Load()为延迟加载,在执行了load()方法后,并不会立即发出sql语句查询对象,而是在使用该对象时,才会发出sql语句

2.如果查询主键不存在的对象时,get()返回null,load()抛出对象未找到异常

 

 

 

对应关系:

一对一:

一条主表记录对应一条从表记录,同时一条从表记录对应一条主表记录

一对一关联方式有两种:

1.主键关联:从表没有专门的外键列,从表主键同时又是主表的外键

2.外键关联:从表有专门的外键列,关联主表,但外键列的值不重复,是多对一的特例

一般做一对一时,采用唯一外键关联,外键列可以设置为null

 

一对多:一条主表记录对应多条从表记录,一条从表记录只对应一条主表记录,外键列在从表身上

多对多:一条主表记录对应多条从表记录,一条从表记录对应多条主表记录,需要中间表来关联

 

CasCadeinverse的区别:

casCade表示级联操作,当主表记录做添加,删除,修改时,从表记录是否做相应的操作,维护的是记录。

inverse表示控制反转,当该属性为真时,表示由对方维护外键,当前对象不做维护,维护的是外键。一般将一方设置为inverse=true,由多方来维护外键

 

Hibernate注解配置:

定义实体类:

@Entity---定义实体类,表示该类可以通过注解进行操作

@Table(name=””)---指明该实体类映射的数据库表名

@Id---表示定义主键

@GeneratedValue(strategy=GenerationType.AUTO)--定义主键生成策略,为数据库自动增长

@Column(name=””)---定义该属性对应的列名,如果属性名和列名一致可以不用写

@Transient表示该属性并非一个到数据库表的字段的映射

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值