Hibernate总结
来源:互联网 发布:邀请好友进群js编码 编辑:程序博客网 时间:2024/06/15 13:45
几个概念:ORM 对象关系映射
有了hibernate我们就只要配置了几个配置文件以后,我们就可以完全用面向对象的方式去查询,删除,更新数据库了,其间的映射工作由配置文件去完成
持久化,把内存中只能暂时存在的内容写入数据库,或者其他永久存储设备,称之为持久化
持久层:负责持久化的层
在我们编写的对象模型与数据库表进行映射需要使用于类同名的 类.hbm.xml配置文件
另外还需一个与数据库进行连接配置的文件hibernate.cfg.xml文件在Spring中,这个文件已经全部写到了 applicationContext.xml文件中去了,目前还没搞懂这两者怎么融合的,慢慢学吧
Hibernate重要Api: Configuration类,要来配置和启动hibernate 另外有一个builSessionFactory方法来创建SessionFactory, SessionFactory为初始化hibernate,可以创建Session实例 Transication事物管理器,我们更新数据的时候,删除数据的时候都没有提交只有在commit以后才提交的,Query,Criteria接口,前面是查询的接口,后面这个接触的很少
hibernate.cfg.xml这个配置文件中,我比较注意的是<property name="show_sql">true</property>
自然主键:有现实意义的主键,代理助理:没有现实意义的主键,只是一个标志
在Hibernate 应用中,Hibernate通过对象标志符来区分不同的持久化对象,而对象标识符由标识生成器来生成 我一般用两种 assigned 这种由自己生成,identity,oid应用这个标志生成器有数据库来生成,不过我们需要在建表的时候对数据库数据库中进行相应的设置
如果需要使用符合自然主键需要使用<composite-id><key-property name="username" co-- />
<key-property name="username" co-- />
</composite-id>
大多数情况下,我们操作数据库的中的表格不仅仅是一张表格,而是有相互关系的表格,所以在配置文件中需要进行相应的配置
一对一映射关系:我们需要在两个POJO类中都增加一个另一个类的对象,并生成其Set,get方法
然后在hbm.xml配置文件中 对于含有外键的一方的主键的生成器要采用如下的配置
<id name="id" column="ID" type="integer"> <generator class="foreign">// 注意这里用外键标志生成器,所以才叫主键共享 <param name="property">company</param> </generator> </id> <!--映射Company与Login的一对一关联--> <one-to-one name="company" class="com.ORM.Company" constrained="true" />//表明现在的主键上有个一个外键约束下面是想联系的另一个映射配置文件 <one-to-one name="login" class="com.ORM.Login" cascade="all" // 主控类的所有操作,对关联类也执行同样的操作 lazy="false" outer-join="true" />
一对一的另一种映射方式是,唯一外键方式,这里的唯一的外键方式是多对一的一种特殊情况,用unique="true"来表示,下面一个是多对一,但是unique=“true”实现了一对一
在另一张表中是一对一,所以就是实现了一对一双向关联
<!--映射Client到Address的单向一对一关联--> <many-to-one name="address" class="com.ORM.Address" lazy="false" cascade="all" unique="true" column="address" /><!--实现从具体地址到client的一对一映射---> <one-to-one name="client" class="com.ORM.Client" property-ref="address" />
多对一单向关联,在多的一方POJO中增加一个单的一方的域,并生成Set,Get方法,在单的一方映射文件照原样,多的一方则像上面一对一的唯一外键映射一样,配置,不过这里不再加unique,因为多的一方可以有多个对应一个,另外not-null则表示,被关联的单的一方不能不存在
<!--映射orders到customer的多对一关联--> <many-to-one name="customer" column="CUSTOMER_ID" class="com.ORM.Customer" lazy="false" not-null="true" /〉
多对一双向关联,在单的一方的属性中要设置一个HashSet ,这里在单的一方one-to-many 多的一方may-to-one还挺好记的,多的一方有Column_ID,单的一方有Column—_ID,但的一方配置Set,set的用处,是在该集合中不存在相同的元素,不过到底在下面怎么实现的???
private Set orders = new HashSet(); <!--映射customer到orders的一对多关联--> <set name="orders" cascade="all" lazy="false" inverse="true"> <key column="CUSTOMER_ID" /> //充当外键的字段名 <one-to-many class="com.ORM.Orders" /> </set>多的一方与上面一样Hibernate 中对象有三种状态Transientl临时状态,Persistent持久状态,Detached托管状态,临时状态的对象的信息没有进入Session,也没有进入数据库,托管状态就是存在于session中的持久化对象当Session关闭以后或者调用Evict针对某个对象时,进入托管状态,get方法与load方法的区别,get方法找不到数据,返回null,load方法则直接抛出异常 saveorupdate方法,如果对象为游离状态,则调用update,如果为临时状态,则调用save
- Hibernate总结
- hibernate总结
- hibernate总结
- hibernate总结
- hibernate 总结
- Hibernate总结
- Hibernate总结
- hibernate总结
- Hibernate总结
- hibernate总结
- Hibernate总结
- Hibernate总结
- Hibernate总结
- Hibernate总结
- hibernate 总结
- Hibernate 总结
- Hibernate 总结
- Hibernate总结
- Algorithm Gossip: 約瑟夫問題(Josephus Problem)
- 剑指Offer算法实现之十:二进制中1的个数
- OTSU算法对图像二值化
- 智能车PCB心得
- NY--108 -- 士兵杀敌(一)
- Hibernate总结
- linux下有用的清理系统命令
- UVA 10047 The Monocycle (状态记录广搜)
- 第五章变量的更多内容
- BFS+状态压缩 hdu-1885-Key Task
- Linux sed 批量替换字符串和更多用法
- 欧拉回路((hdu1878))
- 2013腾讯编程马拉松初赛第二场(3月22日) 小Q系列故事——为什么时光不能倒流 ---好水!!
- HDU1074Doing Homework 状态压缩DP入门