Hibernate知识的学习

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方法的将会成为持久层的状态!

注意:在对象模型和关系模型的配置文件中的标签中有一个属性unsave-value 属性:用来指明当id的值为人为指定的值时,表示为保存的对象,即为:是瞬时对

象,这个认为指定以后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、在标签中propert-ref=“name“当前表中的外键对应到另外一个映射表中对应

的字段叫…name?的列上面了;如果你不写,hibernate将默认当前表中的外键对应着另一个表中

的主键上去了.

--------------------------主要讲:一对多的关联关系;---------------------------

--------------------------主要讲:一对一的关联关系;---------------------------

第一种一对一的模式

第一种情况:从表中的id既是主键又是外键是的一对一关系的配置文件

/**

*IdCard.hbm.xml部分代码:

*

person

"com.fit.domain.Person">

*Person.hbm.xml部分代码:

*

"com.fit.domain.IdCard">

**/

1、在一对一的关系中,两个类之间必须在【从对象】中通过setter方法将【主对象】保存到从表中。而【主对象】可以不用保存【从对象】!

2、这个情况下:通过【主表中】的记录来查询【从表中】的信息,必须在配置映射文件中实例代码如下:从表中的代码:

。。。。。

//表示在使用hibernate自动创建表时,会在从表中id自动加入主外键的约束;如果是自己键的表则在书写sql语句时,就应该自己加上主外键约束。那么这段代码也可写成:

。。。。。。。

3、

a、在一对一的关系中,通过主对象查询从对象时,是通过一句sql来完成的,【其中用到了主外键的连接查询】;;;;

b、如果从【从对象】来查询【主对象】的一般会产生两条查询语句;

先条是:查询从表的;

再条是:通过主外键关联来查询的主表中的信息的;

第二种一对一的模式

第二种情况:从表中的id只是主键,而通过另一列来引入外键的一对一关系的配置

文件

Person.hbm.xml文件中的主要部分;

"com.fit.domain.IdCard">

-->

"person">

IdCard.hbm.xml文件中的主要部分;

person//默认将是person表的主键

-->

通过多对一的模式解决了这个问题!这里unique="true"一定要用!

-->

4、一对一的关联方式还有另外一种关联方式;20_传智播客hibernate教程_一对一外键关.的映射与原理分析

--------------------------主要讲:多对多(teacher-student)---------------------------多对对这种关系,使用的比较少我们经常将其转化为一对多的关系,而Hibernate会为我们创建中间关联表,转换成两个一对多。而且在多对多的关系中一般不用更新语句!

--------------------------主要讲:组件映射(User-Name);---------------------------

相关主题
相关文档
最新文档