.大配置
?方言
????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