金博棋牌电脑 当前位置:首页>金博棋牌电脑>正文

金博棋牌电脑

发布时间:2018-11-22

原标题:Hibernate框架进阶(上篇)

“结束了,我们走吧。”刘皓握着孔雀舞的玉手两人一起离开了,现在游戏等人都已经全部获得六张拼图卡了,完全能一起进入决赛,这样的话马利克就完全找不到再次对他们下手的机会了。

房卡地方棋牌游戏

更何况如果刘皓说谎的话等阿蒂米斯她们醒过来的话不是穿帮了,到时候蒂可也会看不起刘皓吧,而且蒂可身为主神当然有着自己的眼光,她的观察和意念检查下确定刘皓说的是实话。
叶扬突然哈哈大笑起来,他说道:“我可没说和你们合作,我的家人朋友都在华夏,我闲着没事和你们合作啊,只是逗逗你而已,你还真当真了啊。”

看着唐三渐渐远离的背影,雪清河赞叹道:“老师,您说的对。他果然不像是一个只有十几岁的孩子。不但会隐藏自己的心思,而且言谈举止都很沉稳。真不愧是昊天宗的子弟。”

导读

前面一篇文章介绍了Hibernate框架的入门,主要是讲解Hibernate的环境搭建和简单测试,有兴趣的童鞋出门左转。本文在入门的基础上进行Hibernate的进阶讲解,分为上中下三篇,本篇为上篇,该篇主要以讲解hibernate原理为主。主要内容包括:
一、hibernate中的实体创建规则

二、hibernate主键生成策略(7种)

三、hibernate对象的三种状态

四、hibernate中的缓存

五、事务管理

六、Hibernate支持的三种数据库操作语法:HQL、Criteria、SQL

一、hibernate中的实体创建规则

hibernate中的实体类是需要与数据库中的表格进行建立映射关系的,所以我们在创建实体类时需要注意一些规则,如果你的实体类不符合这些规则可能就会无法映射成功。

1)持久化类提供无参构造函数

  一般如果没有创建有参构造函数,默认就可以了。

2)成员变量私有,提供共有的get/set方法访问。需提供属性。

3)持久化类的属性,应尽量适用封装数据类型。

  即数据类型是int尽量替换成Integer类型,long类型使用Long类型代替,依次类推。这样适用的好处是Integer、Long等这些封装型数据类型可以传入null值,而基本数据类型不能传入null。

4)持久化类需要提供oid,与数据库中的主键列对应。(即表格必须要有主键)

5)class之前不能使用final来修饰。

  这是由于final修饰的类不能被继承,而hibernate框架会使用cglib代理生成代理对象,而被代理对象的创建是通过继承来实现的。

二、hibernate主键生成策略(7种)

主键就是唯一存在能代表这条数据唯一性的字段或字段组合。就像你的身份证一样独一无二。上面的规则中说了在hibernate中的表必须指明主键,一般主键分为自然主键和代理主键,就像你的指纹是天生的,但又可以代表你这个人,这就是自然主键,而身份证是后天专门设计,这种主键就是代理主键。实际项目中,我们几乎都是使用代理主键,即自己设计的主键作为表中每一条数据的主键。在我们的数据库中也会为你自动生成主键,比如主键自增,这就是要下面要讲的主键生成策略之一,在hibernate中有7种主键生成策略。其实大部分我们不会使用到,所以除了几个常用的,其他作为了解即可。

1)identity(sql使用) : 主键自增。由MySQL数据库来维护主键值。录入时不需要指定主键。

2)sequence(Oracle使用):Oracle数据库中的主键生成策略。

3)increment(了解)::主键自增。由hibernate来维护。每次插入前会先查询表中id最大值。+1作为新主键值。(其实存在并发问题)

4)hilo(了解): 高低位算法。主键自增。由hibernate来维护。开发时不使用。

5)native(推荐):hilo+sequence+identity ,自动三选一策略。

6)uuid:产生随机字符串作为主键。主键类型必须为String 类型。

7)assigned:自然主键生成策略。hibernate不会管理主键值,由开发人员自己录入,若忘记手动录入会发生异常。

三、hibernate对象的三种状态

在Hibernate框架中,会将实体对像分为三种状态,分别为:瞬时状态、持久化状态和游离状态。当对象在持久化下,对对象进行操作就会将变化同步到数据库中,所以叫持久化状态。

1、每种状态都有不同的标志:

瞬时状态:该对象没有id,或说id=null。即该对象主键尚未赋值。

持久化状态:该对象主键已经赋值,且与处于session绑定状态。

游离状态:该对象主键已经赋值,但没有雨session进行绑定。

具体可参考下面的实例代码说明:

 1 package demo;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.Transaction;
 5 import org.junit.Test;
 6 
 7 import domain.User;
 8 import utils.HibernateUtils;
 9 
10 public class demo {
11     
12     @Test
13     public void test(){
14         //获得对话参数
15         Session session = HibernateUtils.openSession();
16         Transaction tx = session.beginTransaction();
17         //---------------------------
18         User user = new User();//创建实体对象
19         
20         session.save(user);//与会话对象session进行绑定
21         
22         user.setUname("小黄人");
23         //---------------------------
24         //关闭资源
25         tx.commit();
26         session.close();//关闭session意味着对象与session解绑
27     }
28 }

结论:hibernate的对象在持久化状态下才会自动持久化到数据库中,我们要面向对象操作数据库,必须保证对象处于持久化状态。

2、三种状态的相互装换

四、hibernate中的缓存

 缓存是一种提高效率的方法或者说机制,而hibernate中的缓存也是用来提高数据库效率的。

抚顺娱网棋牌 蓝洞澄清卢本伟开挂 南通热线游戏中心下载 四川熊猫麻将手机版v1 威趣棋牌游戏大厅 一木棋牌可以提现的 中顺游戏 最火可以兑换现金游戏

57380 74227 61318 91077 49889 7460383744 65342 45847

责任编辑:杜龙丁

随机推荐