how2j.cn


示例 1 : 什么是HIBERNATE   
示例 2 : POJO是什么   
示例 3 : HIBERNATE 开发流程   
示例 4 : one-many怎么配置   
示例 5 : many-one怎么配置   
示例 6 : many-many 怎么配置   
示例 7 : get与load的区别   
示例 8 : 常见查询3种方式   
示例 9 : 三种状态   
示例 10 : openSession与getCurrentSession的区别   
示例 11 : 1级缓存   
示例 12 : 2级缓存如何配置   

示例 1 :

什么是HIBERNATE

HIBERNATE 是一种轻量级的ORM的实现,是对JDBC的一种封装。
ORM是意思是 对象与关系数据库之间的映射 Object Relation Database Mapping.
示例 2 :

POJO是什么

POJO的全称是plain old java object
相当于JAVA BEAN,又叫做实体类 entity bean
示例 3 :

HIBERNATE 开发流程

一个完整的hibernate 开发流程包含如下这些步骤
1. 配置Hibernate.cfg.xml
里面包含数据库连接信息,哪些HBM,是否使用2级缓存,是否显示SQL,方言等等
2. 配置 hbm 文件
大概是哪个类对应哪张表,属性对应什么字段,各种关系映射,比如ONE-MANY,MANY-ONE,MANY-MANY
3.使用HIBNERATE
通过Configuration拿到SessionFactory, 接着拿到Session,然后进行一系列数据库相关的业务操作
示例 4 :

one-many怎么配置

以Category和Product的一对多为举例
1. Category中要有一个set的products
2. 在Category.hbm.xml中要有一对多映射
<set name="products" lazy="false">
<key column="cid" not-null="false" />
<one-to-many class="Product" />
</set>
详细参考Hibernate 实现一对多
示例 5 :

many-one怎么配置

还是以Product和Category为例
1. Product中要有一个category属性
2. 在Product.hbm.xml中 进行many-to-one配置

<many-to-one name="category" class="Category" column="cid" />


详细参考 Hibernate 实现多对一
示例 6 :

many-many 怎么配置

以User和Product为例子
1. User中有products属性
2. Product中有users属性
3. 使用如下进行配置

<set name="products" table="user_product" lazy="false">
<key column="uid" />
<many-to-many column="pid" class="Product" />
</set>


详细请参考 Hibernate 实现多对多
示例 7 :

get与load的区别

通过id获取Product对象有两种方式,分别是get和load
他们的区别分别在于
1. 延迟加载
2. 对于id不存在的时候的处理

详细请参考 Hibernate GET和LOAD的区别
示例 8 :

常见查询3种方式

这三种分别是HQL,Criteria标准SQL
示例 9 :

三种状态

实体类对象在Hibernate中有3种状态
分别是瞬时,持久和脱管

瞬时 指的是没有和hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,这个对象也就消失了
持久 指得是一个对象和hibernate发生联系,有对应的session,并且在数据库中有对应的一条记录
脱管 指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的session已经关闭了

代码演示参考 Hibernate 对象的三种状态 瞬时 持久 脱管
示例 10 :

openSession与getCurrentSession的区别

Hibetnate有两种方式获得session,分别是:
OpenSession和getCurrentSession
他们的区别在于
1. 获取的是否是同一个session对象
OpenSession每次都会得到一个新的Session对象
getCurrentSession在同一个线程中,每次都是获取想同的Session对象,但是在不同的线程中获取的是不同的Session对象
2. 事务提交的必要性
openSession只有在增加,删除,修改的时候需要事务,查询时不需要的
getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后,session就自动关闭,不能够再进行关闭

代码演示 参考 Hibernate OpenSession与GetCurrentSession的区别
示例 11 :

1级缓存

hibernate默认是开启一级缓存的,一级缓存存放在session上

代码演示参考 什么是Hibernate的一级缓存
示例 12 :

2级缓存如何配置

Hibernate的一级缓存是在Session上,二级缓存是在SessionFactory上

配置方式:
要在hibernate.cfg.xml中开启

<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>


实例参考 : 如何进行Hibernate的ehcache二级缓存配置



问答区域    
2017-10-30 可以下载不?
763087866
如题




1 个答案

how2j 答案时间:2017-10-31
啊?下载什么啊?




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-04-13 超链单词拼写问题
一朵时光
示例1 中 “ HIBERANTE ” 的超链单词拼写 应该是 “ HIBERNATE ” ~ 感谢楼主




2 个答案

一朵时光 答案时间:2017-04-14
原谅程序猿的强迫症,曾经被拼写坑过 .. or2

how2j 答案时间:2017-04-14
哈哈,你看的好认真,谢谢指正




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-03-14 看到最精彩的部分了




提问之前请登陆
关于 面试题-框架-hibernate 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 661682521
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图