当前位置:文档之家› Hibernate知识的学习

Hibernate知识的学习

Hibernate知识的学习--------------------------------------------------第一章------------------------------------------------1、为什么用Hibernate呢?他属于ORM中的一种;用来解决对象与关系模型不匹配的;===用来解决对象与关系模型不匹配的{方法有两种:使用JDBC手工来操作;还有就是使用ORM来解决};学习Hibernate都要到那些包;Hibernate自动创建表;Hibernate测试类中应该怎样启动hibernate调用(主要是构造一个sessionFactory工厂,通过工厂来产生一个session对象,在通过session对象来对Hibernate操作数据库);--------------------------------------------------第二章------------------------------------------------ Hibernate的开发流程;(三点)Hibernate控制一个JavaBean时,应注意的JavaBean应该满足哪三点?--------------------------------------------------第三章------------------------------------------------做了一个简单的Hibernate的实例:其中编写了一个HibernateUtil.java文件来专门创建Session 对象的一个公共组件!Hibernate02实例中--------------------------------------------------第四章------------------------------------------------ Hibernate中Session是最核心的接口,现在我们来学习一下:通过session对象来完成增、删、改、查、的主要操作!1.session对象的常用方法:save():添加一个对象,对应到表也就是添加一个信息;delete():删除一个对象,对应到表也就是删除一条信息;update():修改数据库信息,注意一点,当数据库没有信息时,会报出异常;get():根据id查询信息,会立刻访问数据库;【查询数据库时可以不打开事务操作】;Load():根据id查询信息,(返回的是代理,不会立即访问数据库【所以先不产生sql语句,而是当你真正的使用通过Load方法从数据库中去到的记录对象时才输出sql语句】也就是使用了懒加载机制 .如果在使用了Load方法了后,千万不要试图判断去到的对象是否为空值,因为load在这里将会产生出一个对应表JavaBean实体类的子类来处理的,相当于一个代理类的意味;通过user.getClass().getName()来获取这个代理类名称);saveOrUpdate()和merge方法:根据id和version的值来确定是save或update),【调用merge你的对象还是托管的】。

【托管中用到了】refresh():将数据重新读取一次!Lock()方法:查出一条数据,再给数据加一道锁【即为:把对象变成持久对象,但不会同步对象状态】------------------------------------------------------------------------------------------- 注意:1、get和load方法获取数据库表中记录的区别;get():根据id查询信息,会立刻访问数据库;【查询数据库时可以不打开事务操作】;Load():根据id查询信息,(返回的是代理,不会立即访问数据库【所以先不产生sql语句,而是当你真正的使用通过Load方法从数据库中去到的记录对象时才输出sql语句】也就是使用了懒加载机制 .如果在使用了Load方法了后,千万不要试图判断去到的对象是否为空值,因为load在这里将会产生出一个对应表JavaBean实体类的子类来处理的,相当于一个代理类的意味;通过user.getClass().getName()来获取这个代理类名称);2、save和persist的区别:在没开启事务的情况下:save将数据插入到数据库表中后又将该事务回滚了,结果会产生sql语句,但表中没数据;而persist在没开事务的情况下,不会提交数据,即为:不会有sql语句生成!--------------------------------------------------第五章------------------------------------------------在Hibernate中的对象的状态:(三种)==============学习了这三种对象的状态之后,我们要强调几点:=============1、update()方法,一般用在要想更新处于脱管状态的对象的信息时,才会经常被用到!2、通过上面的分析:我们如果想要保存以对象时,不知这个对象处于瞬时还是脱管状态时,我们将会用好saveOrUpdate()方法【hibernate对根据当前对象的id属性有没有值来判端是瞬时『id 没值』还是脱管状态『id有值』和version的值来确定是save或update)】;注意merge方法和saveOrUpdate()方法的区别:即为:经过merge方法处理的对象结果还是脱管的,经过saveOrUpdate方法的将会成为持久层的状态!注意:在对象模型和关系模型的配置文件中的<id>标签中有一个属性unsave-value 属性:用来指明当id的值为人为指定的值时,表示为保存的对象,即为:是瞬时对象,这个认为指定以后hibernate会自动通过配置文件来处理这种问题该怎么办。

当然还有其他的方法,都将会引发对象在这三个对象中的转换,下图讲座详细的描述,不过他们的性质用法还和我们上面讲的一样!要灵活应用啊!--------------------------------------------------第六章------------------------------------------------1、将公共的曾删改查写入HibernateUitl.java文件中让这个工具类更强大;2、介绍了Hibernate中根据多条件查询,使查询的方法多样化了;3、介绍HQL和CriteriaHQL和SQL的区别:【HQL是一种面向对象的查询语言】,与SQL不同,HQL中的对象名是区分大小写的(除了java类和属性其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:Query q = session.createQuery(hql);[1]from Person[2]from User user where =:name[3]from User user where =:name and user.birthday<:birthdayCriteria简介:Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:Criteria crit = session.createCriteria(DomainClass.class);简单属性条件如:criteria.add(Restrictions.eq(propertyName,value)),criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))--------------------------------------------------第七章------------------------------------------------1、当我们在配置Hibernate-mapping文件时,如果我们的类名和数据库中的关键字相同时,则通过【反引号】[键盘中数字1的前面的字符]来解决;eg:<class name = "User" table = "`user`">2、这Hibernate.property文件【hibernate源包中etc文件夹中】中可以找到所有的hibernate主文件的配置项--------------------------------------------------第八章--------------------------------------------------------------------------------------------------第九章------------------------------------------------09_传智播客hibernate教程_Criteria查询方式------------------------------------第十四章(重点掌握)------------------------------------关联映射(这张主要讲:多对一的关联关系;)多对一(Employee-Department);(是最常见的一种关系)一对多(Department-Employee);一对一(Person-IdCard);(当有主表和从表之分)多对多(teacher-student);组件映射(User-Name);集合映射(set、list、map、bag);inverse和cascade(Employee-Department);--------------------------主要讲:多对一的关联关系;---------------------------1、在<mang-to-one>标签中propert-ref=“name“当前表中的外键对应到另外一个映射表中对应的字段叫…name‟的列上面了;如果你不写,hibernate将默认当前表中的外键对应着另一个表中的主键上去了.--------------------------主要讲:一对多的关联关系;-----------------------------------------------------主要讲:一对一的关联关系;---------------------------第一种一对一的模式第一种情况:从表中的id既是主键又是外键是的一对一关系的配置文件/***IdCard.hbm.xml部分代码:*<class name="com.fit.domain.IdCard" table="idCard" schema="dbo" catalog="pubs"><id name="id" type="ng.Integer"><column name="id" /><!-- //第一种情况:从表中的id既是主键又是外键是的一对一关系--><generator class="foreign"><param name="property">person</param></generator></id><property name="str" type="ng.String"><column name="str" length="15" /></property><!-- 从表对应主表constrained="true"表示从表的id既是主键又是外键是平【这个键值是根据person表的主键来的】--><one-to-one name="person" constrained="true" class ="com.fit.domain.Person"></one-to-one></class>*Person.hbm.xml部分代码:*<class name="com.fit.domain.Person" table="person" schema="dbo" catalog="pubs"><id name="id" type="ng.Integer"><column name="id" /><generator class="native" /></id><property name="name" type="ng.String"><column name="name" length="15" /></property><!-- 主表对应从表--><one-to-one name="idCard" class ="com.fit.domain.IdCard"></one-to-one></class>**/1、在一对一的关系中,两个类之间必须在【从对象】中通过setter方法将【主对象】保存到从表中。

相关主题