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方法的将会成为持久层的状态!
注意:在对象模型和关系模型的配置文件中的
象,这个认为指定以后hibernate会自动通过配置文件来处理这种问题该怎么办。
当然还有其他的方法,都将会引发对象在这三个对象中的转换,下图讲座详细的描述,不过他们的性质用法还和我们上面讲的一样!要灵活应用啊!
--------------------------------------------------第六章------------------------------------------------
1、将公共的曾删改查写入HibernateUitl.java文件中让这个工具类更强大;
2、介绍了Hibernate中根据多条件查询,使查询的方法多样化了;
3、介绍HQL和Criteria
HQL和SQL的区别:【HQL是一种面向对象的查询语言】,与SQL不同,HQL中的对象名是区分大小写的(除了java类和属性其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;
HQL主要通过Query来操作,Query的创建方式:
Query q = session.createQuery(hql);
[1]from Person
[2]from User user where https://www.360docs.net/doc/102041098.html, =:name
[3]from User user where https://www.360docs.net/doc/102041098.html,=:name and user.birthday<:birthday
Criteria简介:
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:
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、在
的字段叫…name?的列上面了;如果你不写,hibernate将默认当前表中的外键对应着另一个表中
的主键上去了.
--------------------------主要讲:一对多的关联关系;---------------------------
--------------------------主要讲:一对一的关联关系;---------------------------
第一种一对一的模式
第一种情况:从表中的id既是主键又是外键是的一对一关系的配置文件
/**
*IdCard.hbm.xml部分代码:
*
person
"com.fit.domain.Person">
*Person.hbm.xml部分代码:
*
"com.fit.domain.IdCard">
**/
1、在一对一的关系中,两个类之间必须在【从对象】中通过setter方法将【主对象】保存到从表中。而【主对象】可以不用保存【从对象】!
2、这个情况下:通过【主表中】的记录来查询【从表中】的信息,必须在配置映射文件中实例代码如下:从表中的代码:
。。。。。
。。。。。。。
3、
a、在一对一的关系中,通过主对象查询从对象时,是通过一句sql来完成的,【其中用到了主外键的连接查询】;;;;
b、如果从【从对象】来查询【主对象】的一般会产生两条查询语句;
先条是:查询从表的;
再条是:通过主外键关联来查询的主表中的信息的;
第二种一对一的模式
第二种情况:从表中的id只是主键,而通过另一列来引入外键的一对一关系的配置
文件
Person.hbm.xml文件中的主要部分;
"com.fit.domain.IdCard">
-->
"person">
IdCard.hbm.xml文件中的主要部分;
person//默认将是person表的主键
-->
-->
4、一对一的关联方式还有另外一种关联方式;20_传智播客hibernate教程_一对一外键关.的映射与原理分析
--------------------------主要讲:多对多(teacher-student)---------------------------多对对这种关系,使用的比较少我们经常将其转化为一对多的关系,而Hibernate会为我们创建中间关联表,转换成两个一对多。而且在多对多的关系中一般不用更新语句!
--------------------------主要讲:组件映射(User-Name);---------------------------