Hibernate课堂纪要 为什么要使用Hibernate 解决JDBC繁琐的代码问题。 Hibernate 是在JDBC的基础上进行封装,只需要少量的代码完成持久化工作 什么是orm映射 面向对象语言和关系数据库之间阻抗不匹配的问题。完成对象数据到关系数据库映射 基本操作 1. 添加包 2. 添加hibernate.cfg.xml 文件 3. 添加对象和映射文件 (object.hbm.xml) 使用hibernate的七个步骤: 1.读取配置文件 Configuration cfg = new Configuration().configre(); 2.创建sessionFactory factory = cfg.buildSessionFactory(); 3.创建session session = factory.opensession(); 4.打开事物 Transaction tx = session.beginTransaction(); 5.持久化操作 session.save();... 6.提交事物 tx.commint(); 7.关闭session.close(); 使用工具简化操作(操作方式) 1. 添加hibernate支持 2. 配置DB Browser 配置数据源 2. 将表中的数据导出为实体和映射文件 hibernate的三种状态 1.瞬时状态: 当new一个对象的时所处的状态为瞬时状态。 2.持久状态: save或update 的时所处的状态为持久状态 3.离线状态 a> 删除前要先获取该对像,将该对象删除哦,获取的对象还存在,只是不能在于数据库 打交道,不受hibernate管理,称为离线状态。 b> 删除数据或者关闭session的时候所处的状态为离线状态 get和load加载数据的区别 get: 1. 使用get加载数据时,hibernate会先发hql语句,并将基本属性的数据加载进来。 如果不存在该数据,会抛出nullException空指针。 2. 当关闭session后,使用get()加载其关联数据时,将抛出on session Exception session关闭后属于离线状态,并不能再获取其关联的数据。处理此方式有两种方法: 方式一: 在配置文件中设置lazy属性为false。 方式二:在代码块中先获取关联的非ID数据即可。 删除数据时使用。呵呵 默认情况下,get不会去获取所关联的数据(session关闭的前提下) load: 1. load 属于延迟加载。执行时hibernate 不会先发hql语句。先获取ID,如果没有用到非Id属性,load不会去加载其他数据。当数据库没有与之对象的数据,将抛出 ObjectNOFoundException. 处理方式方式有: 方式一:在配置文件中设置lazy属性为false。 方式二:在代码块中先获取非Id的数据 更新数据使用... 多对一单向关联(操作方式): 1. 在多的一方添加一的一方的实体作为属性 2. 配置文件中使用<many-to-one>标签,如: <many-to-one name="group" class="com.org.bean_many2one.Group" column="groupId" /> 3. 保存数据 添加一的一方的数据 添加多的一方的数据并将一的Object放入set()中 一对多单向关联(操作方式): 1. 在一的一方添加set集合,并设置get和set属性如 private Set users = new HashSet(0); 2.配置文件中使用<set>标签,如: <set name="users"> <key column="gid" /> <one-to-many class="com.org.bean_one2many.User" /> </set> 3. 保存数据(先save多的一方,在使用集合将对象add进去): User user1 = new User(); user1.setUname("xiaoling"); session.save(user1); Group group = new Group(); group.setGname("北大"); group.getUsers().add(user1); session.save(group); tx.commit(); 一对多双向关联 1. 一的一方添加set集合属性 private Set users = new HashSet(0); 配置文件: <set name="users"> <key column="gid" /> <one-to-many class="com.org.bean_one2many2.User" /> </set> 2. 多的一方添加一的一方的为属性,并设置get和set方式 private Group group ; 配置文件: <many-to-one name="group" class="com.org.bean_one2many2.Group" column="gid" /> 多对多关联 1. 在A方使用Set集合为属性,在B那边使用A作为属性。 2. 在A的一方配置配置文件 <set name="users"> <key column="uid"/> <one-to-many class="com.org.bean_many2many.User"/> </set> 在B的一方配置配置文件 <many-to-one name="group" class="com.org.bean_many2many.Group" column="groupId" /> ************************************************************** 级联 cascade删除数据: 使用cascade,其属性有all 、 save-update 、 delete 、 none。 一般使用save-update即可。 1. cascade=“delete” :删除数据时,如果外键在允许为空的情况下可以 执行操作,删除后多的一方为所关联的数据将会时Null, 2.一般情况下不使用该操作,其危险性较高。 inverse 属性 针对多对多的关联,如果其中某一方设置inverse为true,那么这一方及放弃 他们之间的关联关系。不会出现双方一起维护信息而引起的数据冗余。