分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Hibernate入门 (二)三种状态

发布时间:2023-09-06 01:13责任编辑:蔡小小关键词:Hibernate

.大配置
?方言
????property name="dialect" ?取值
?自动构建表结构
????property name="hbm2ddl" ?true
??connection_url: 连接字符串
??显示sql
?????show_sql ?
??格式化SQL ?
?????format_sql
2.Hibernate测试类中操作步骤
?7个步骤
???1.读取配置文件,形成config对象
???2.SessionFactory
???3.获取Session
???4.开启一个事务
???5.执行操作
???6.结束(提交或者回滚)
???7.关闭
3.小配置
??<class name="Dept" table="Dept">
??????<id property="deptno" column="deptno">
???????????主键生成策略 : 数据库
??????????<generator class="native"></generator>
??????</id>
??</class>
?
4.idea引入依赖(使用的Oralce的话)
??1.手工jar包注册到仓库中
?????1.有maven环境 ?
?????2.修改conf/settings.xml 中的路径,改成自己仓库的路径
?????3.注册命名 mvc insatll:install-file -Dgroupid
??2、直接物理引用
?5.按主键查询
???get
???load
???????
???区别1:load:代理对象
??????????get: ?永远返回的是原始对象本身
???
???区别2:如果load/get 加载的记录数据不存在,get返回null 。load抛出异常ObjectNotFoundException

?6.添加
???注意事项:需要事务环境
???session.save(dog);
?
?7.补充了两种获取session的方案
????openSession()
????getCurrentSession()--------------->你得在大配置中。
????<property name="current_session_context_class">thread</property>
????导致的结果,自己就不用手动的关闭连接了。
?--------------------------------------------------------------
?????????修改
????update()
????merge(): save() ?update() 有没有OID
????saveOrUpdate() ?修改

????saveOrUpdate()和merge()区别
????解析:区别 1:saveOrUpdate() 会改变入参进来对象的状态 merge不会
??????????区别 2: saveOrUpdate() 没有返回值 ?merge返回一个对象

?2.OID
?OID 是持久化类(Student)与数据表主键对应属性, 用来唯一区分持久化对象。
?3.删除

?4.PO ?VO ?DTO POJO JavaBean
??JavaBean=POJO ?和数据库无关的 ??PageUtil类,需要持久化不不需要
??PO=POJO+xml

?5.主键生成策略
?Increment :hibernate生成,弊端:多线程可能取到的是同一个id,但是导致其他线程保存失败
?identity: ??数据库生成 ,mysql支持,oracle不支持
?sequence: ??数据库生成,oracle支持
?native: ??数据库决定:mysql使用identity,oralce使用序列
?uuid ??????Hibernate生成 优点:不会重复,数据迁移比较好 ?要求:列的类型字符串
?assigned :程序员手动操作的。
?
?OID
?Hibernate中Java对象的三种状态
?get和load


?
?/**
* ?在 increment基础之上操作!
* hibernate中的三种状态 ???
*
* ?01.瞬时状态 ???????Student ?stu=new Student();
* ?新创建的对象,没有与session产生关联!
* ?02.持久状态 ???????session.save(stu)
* ?被session管理,存在session缓存中!当commit的时候,会提交到数据库!
* ?03.游离状态 ?????session.close(); ?????????stu
* ?曾经被session管理过,但是现在不存在session缓存中了!
*
*
* ?瞬时状态 和游离状态的区别在于:是否被session管理过! ?对象是否拥有OID(对象标识符)!
* ?
* ?对象有主键值id,那么就有OID,在操作的时候会执行update语句!
* ?没有主键值id,那么就没有OID,在操作的时候会执行insert语句!
* ?
* ?对象只要是没有OID,在执行update()肯定报错!在执行saveOrupdate的时候会执行Save()方法!
*
*/

???6.核心API
??????6.1 Configuration
????????InputStream x = ConfigHelper.getResourceAsStream("/hibernate.properties");
hibernate.hbm.xml配置文件

??????6.2 SessionFactory:重量级的,一个程序中一份就可以了。线程安全的。
????????????Creates Sessions. Usually an application has a single SessionFactory.
????Threads servicing client requests obtain Sessions from the factory.

?????????????创建会话。通常, 应用程序有一个单一的 SessionFactory。
?????服务客户端请求的线程从工厂获取会话。
??????????????SessionFactorys are immutable. The behaviour of a SessionFactory
??????is controlled by properties supplied at configuration time.
??????These properties are defined on Environment.

??????????????SessionFactorys 是不可变的。SessionFactory 的行为由配置时提供的属性控制。
??????这些属性是在环境中定义的。

??????线程安全的::方法中来用一个对象,不用考虑线程安全问题
????????????????????成员变量,发现他是一个接口,接口中都是方法

???????6.3 Session ?他也是一个接口,实现类是SessionImpl ,当中也是方法,但是他是线程非安全的。
???????????Session构建两种方式

???方式一:factory.openSession(); ?随机从连接池中获取到一个连接。

???????????factory.getCurrentSession(); 一定获取的是和当前线程绑定的session.

??????6.4 ?事务
?????????

7.刷新缓存(某一时刻点触发的动作)
?12: ??睡觉了 ????????????脱衣服
?28 ????结婚 ??????????????入洞房 ???脑洞打开,自己想。否则就不好玩了 ?(怎么入洞房)
tx.commit() ;刷新缓存 ??刷新缓存做什么 (做脏检查)

快照(Snapshot)是某个数据集在某一特定时刻的镜像,也称为即时拷贝,它是这个数据集的一个完整可用的副本

1.修改
?update
?merge()
?saveOrUpdate()

2.删除

3.PO DTO VO ?POJO JavaBean

4.主键生成策略
??native
??uuid
??assigned

5.在Hibernate中Java对象的三种状态
??瞬时态
??持久态
??游离态

瞬时态---->持久态 save() load() get()

持久态---->游离态 clear() close() evict()

游离态---->瞬时态 delete()

瞬时态和游离态?有没有OID
6.OID 持久化对象的唯一标志。OID一定是和底层数据表中记录的主键值绑定的。

7.Hibernate API
?Configuration 类

?SessionFactory 接口 SessionFactoryImpl

?Session 接口 ?????SessionImpl ???
????session:getCurrentSession()当前线程绑定 调度多次 ?内存地址一样,同一个对象
?????????????openSession() :每次获取到的session一定是新的。
?Transaction

Hibernate入门 (二)三种状态

原文地址:http://www.cnblogs.com/hualishu/p/7586202.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved