Hibernate(一个面向java环境的对象/关系映射工具)

eclipse需要添加jboss tools插件中的hibernate tools

hibernate和spring都可以是普通的java project
struts必须是web java project
一、
1、
POJO类 持久化的类(反向工程生成) 该类中的属性和表中的字段是一一对应的 通过 .hbm.xml映射文件来一一对应
.hbm中主键必须为 中间还要加主键生成策略 如 有很多策略 上网查询
外层都是类的属性(一般全大写)

PO持久化

2、
hibernate,cfg.xml 主要是配置SessionFactory类
主要有 数据库地址、方言dialect(不同的数据库不同的方言)、用户名、密码、驱动类型等
hibernate.show_sql 为true时可以调试数据库
最后有一个 映射文件地址

3、
HibernateSessionFactory

1初始化Hibernate配置管理类Configuration
2通过Configuration类实例创建Session的工厂类SessionFactory
3通过SessionFactory得到Session实例(事务)

二、
hibernate核心接口(重要)
1、
Configuration接口 负责管理hibernate的配置信息 数据库url、数据库用户名 等
这些属性在hibernate配置文件hibernate.cfg.xml中加以设定 Configuartion读取的是hibernate.cfg.xml中的配置
2、
SessionFactory 负责创建Session实例,可以通过Configuration实例(config.buildSessionFatory())构建SessionFactory(构造后不变)
3、
Session接口 负责持久化 如sava update等 单线程的
Session实例由SessionFactory构建
4、Transaction接口
事务操作的接口 由Session的实例创建
5
Query接口
由Session的实例查询
三、HQL
FROM Object
query.setMaxResulst(1)设置最大检索数目为1
query.uniqueResult()装载单个对象
query.list()返回一个list()
query.setParameter(0,”javaee”) 设定参数

分页查询
SetFirstResult(int firstResult) 指定从当前页哪一个对象开始查询 序号从0开始 默认围殴 0
如当每页5个时,第一页是从0开始 第二页是从5开始 不断在变
SetMaxResult(int maxResult) 指定一次最多查询出的对象

一对一关联
1、共享主键(同一个人的不同信息,如 一个人的账号和密码一个表 剩下的信息一个表 但是两个表的主键是相同的)
在各自的java类中都有对方的对象和get() set()方法
数据库中一个主表一个从表 主表产生主键 从表用主表的主键
从表的*.hbm.xml中要添加关联属性 属性中有对应方式(一对一)、对应类、类的地址、constrained等 constrained=“true”表示Login中的id作为外键
从表指定(在中)是外键和
主表
主表的*
.hbm.xml中要添加关联属性 属性中有对应方式(一对一)、对应类、类的地址、cascade lazy等 。lazy=”false”是立即执行,cascade=“all”是主表的所有操作 从表页都执行

在使用时 通过Session对象调用session.save()主表的持久化来保存
2、唯一外键
需要把反向工程生成的外键和get,set方法删掉
在各自的java类中都有对方的对象和get() set()方法
如 人和房间 人和房间是 多对一
在多的一段的*.hbm.xml中添加
column=”room_id” // 充当外键的字段名
class=”org.model.Room” // 被关联的类的名称
cascade=”all” // 主控类所有操作,对关联类也执行同样操作
unique=”true”/> // 唯一性约束,实现一对一
在一的一端的*.hbm.xml中添加
class=”org.model.Person” // 被关联的类的名称
property-ref=“room”/> // 指定关联类的属性名,表示指向person类中的room属性,这样来进行关联
room属性为在主表中的*.hbm.xml设好的唯一外键**

可以在 hibernate.cfg.xml中设置hibernate.show _sql 查看sql语句
用带cascade=”all”的那个类肯定可以把两个数据都保存


多对一关联
1、多对一单向关联
多的一边添加:
<many-to-one name=”room” // 属性名称
column=”room_id” // 充当外键的字段名
class=”org.model.Room” // 被关联的类的名称
cascade=”all”/> // 主控类所有操作,对关联类也执行同样操作
一的一边的主键是
2、多对一双向关联
一的那一方需要设置一个集合 多的那一方不变 加一个一的一方的对象
一的一方添加:
<set name=”person” //此属性为Set集合类型,由name指定属性名字
inverse=”false” cascade=”all”> //级联程度
//充当外键的字段名
//被关联的类名字

**

配置文件中cascade配置的是级联程度
all:表示所有操作句在关联层级上进行连锁操作。
save-update:表示只有save和update操作进行连锁操作。
delete:表示只有delete操作进行连锁操作。
all-delete-orphan:在保存或更新当前持久化对象时,它相当于save-update。在删除当前持久化对象时,它相当于delete;另外它还可以删除与当前持久化对象断开关联关系的其他持久化对象
**
多对多
需要添加连接表(连接表不需要反向工程)
1、单向关联
2、多向关联