`
xp9802
  • 浏览: 1187057 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate核心开发接口

阅读更多

Hibernate核心开发接口
AnnotationConfiguration / Configuration
hibernate.cfg.xml 如果改名了怎么办?   new AnnotationConfiguration().configure("修改后的名字").bulidSessionFactory();

SessionFactory        简单理解为 维护数据库连接池的东西,用于产生Session
全局只需一个SessionFactory,把它做成一个单例

getCurrentSession() 跟openSession()    
getCurrentSession 跟 openSession 不能混用,混用后getCurrentSessiong 跟 openSession 获得的不是同一个session
getCurrentSession -- i.如果上下文(可以设置,在cfg.xml下,current_session_context_class中设置)已经有了Session,就不用再创建了.
                       并且不需要close.当commit之后,Session就关闭了,再使用getCurrentSession之后就是一个新的Session了
                     ii.可以界定事务边界.
(当current_session_context_class用thread的时候,用connection,无异常commit,有异常rollback
 当处理分布式事务的时候,只有一个connection不能保证在同一个事务里,需要一个JTATransaction manager
 来管理,记录操作,进行回滚(XA driver) 此时使用JTA. 
 针对一个数据库为connection,多数据库,则为分布式事务,jta(java transaction api)
)
openSession --  创建一个新的Session,每次调用都创建一个新的Session
共同点:都可以save,commit.

Session 
管理一个数据库的任务单元
只用hibernate,要try-catch-finally,跟Spring一起则不用
1) save() 
    对象有三种状态,Transient,Persistent,Detached.
    刚创建的时候,为Transient,save之后为Persistent,当session close之后则为detached.
    1.有没有ID                     内存中一个对象,全都没有.如果没有ID,则一定为Transient
    2.ID在数据库中有没有        数据库中有,缓存中hashmap有,对象也还有.则为Persistent.
    3.ID在内存中有没有            数据库中有,缓存中没有.对象还有,则为Detached.
2)delete()
    delete之后会变成Transient状态,刚new的不能delete,只要有id号就可以删.
3)load()
    session.load(xxx.class,主键),返回值为object,可强制转换成需要的类型.
    load出来之后的对象为Persistent状态.当输入主键值不存在的时候,暂时不
    会报错.
4)get()
    与load方法使用方法一样,但是get方法是立刻发出sql语句,但是用load方法的时候,
并不是直接发出sql语句,它返回的是代理对象,要真正用的时候才发出sql语句
---- 什么是代理对象,动态代理?  这个需要理解. 
5)update()
    update之后变成Persistent状态,需commit才会写到数据库.
    i.由session生成了一个detached状态的对象,如t , 可以t.setName("99"),然后用新创session2,
直接session2.update(t);然后commit().
    ii.如果updat一个Transient状态的对象,不行.没有ID,不可update.如果Transient对象
被手动设置了一个id.如T.setId("6"),则可以.
    update的时候,会自动把没更新过的字段也更新一遍.
    如果一个对象为Persistent状态,不需update方法,直接set,commit的时候会自动更新.
    让其不会自动update的方法:
    (1)@Column(updatable=false) , 或xml 设置property.update=false;这种方法不用
    (2)在xml中 class.dynamic-update设成false;
    (3)跨session,设了dynamic-update,当Persistent状态时,改了谁就发谁,detached状态的时候
    就全部update.想不自动update,用merge()方法代替update()方法.其实merge()方法会先load出来
    然后变成Persistent状态,再做update.
    (4)用hql语句.
6)saveOrUpdate()
    根据状态来判断使用save或者update. 
7)clear()
    把缓存里的数据强制清除.get/load方法执行前都会去缓存中查找,存在则不用再从数据库中取出
8)flush()
    把缓存里的数据强制写入数据库,当session.getTransaction().commit()执行的时候,会自动执行flush();

SchemaExport
xml可以不设自动生成表,可以用该方法生成
1) create(true,true) 第一个参数为是否打印ddl语句,第二个是否写入数据库

分享到:
评论

相关推荐

    Hibernate教程03_Hibernate核心开发接口介绍

    http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码

    马士兵hibernate学习笔记(原版)

    6 Hibernate核心开发接口介绍(重点) ... 风格 1 先脉络,后细节 2 先操作,后原理 3 重Annotation,轻xml配置文件 ... 性能优化 1 注意session.clear()的运用,尤其在不断分页循环的时候 2 1+N问题 ...

    Hibernate笔记 马士兵

    第1课 课程内容 6 第2课 Hibernate UML图 6 第3课 风格 7 第4课 资源 7 第5课 环境准备 7 第6课 第一个示例Hibernate HelloWorld 7 第7课 建立Annotation版本的...第14课 Hibernate核心开发接口(重点) 29 ........

    hibernate笔记

    6 Hibernate核心开发接口介绍(重点) 5 7 对象的三种状态(了解) 5 8 关系映射(重点) 5 9 Hibernate査询(HQL) 5 10 在Struts基础上继续完善BBS200 5 11 性能优化(重点) 5 12 补充话题 5 风格 5 1 先脉络,后...

    J2EE企业级项目开发-3期(KC007) 5.3 探究Hibernate之核心接口文档.doc

    J2EE企业级项目开发-3期(KC007) 5.3 探究Hibernate之核心接口文档.doc 学习资料 复习资料 教学资源

    Hibernate框架 jar 架包 开发详解

    Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制

    hibernate学习笔记

    主要讲述了hibernate的核心开发接口,以及hibernate的关系映射

    Hibernate的五个核心接口介绍

    绍Hibernate的五个核心接口

    Java Web整合开发实战:基于Struts 2+Hibernate+Spring(PDF)

    Java Web整合开发实战--基于Struts 2+Hibernate+Spring....13章 探究Hibernate之核心接口 14章 Hibernate之项目实战 4篇 业务层框架Spring技术 15章 Spring快速上手 (百度网盘地址如果失效请联系我,我会补上的)

    Hibernate体系结构的概要图

    Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务...

    Hiberante中的五大核心接口.txt

    Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面...

    hibernate api

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以...这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

    真正的Hibernate3.2.6英文API

    现在最新的Hibernate是3.3.2,但是整个API没有重大变动,想成为专家级开发人员,就不能停留在入门的教程上,必须研究Hibernate各个核心接口的API 很不容易找到真正的API,网上有太多的入门教程,共享之。

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 SessionFactory(Connection工厂) 12.2.3 Session(提供Connection) 12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写...

    Java开发的一个简约后台管理系统源码.zip

    核心框架:Spring Boot 权限框架:SpringSecurity 模板引擎:Thymeleaf 持久层框架:Mybatis-Plus 日志管理:LogBack 工具类:Apache Commons、Hutool 视图框架:Spring MVC 工作流:Activiti6 定时器:Quartz ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 SessionFactory(Connection工厂) 12.2.3 Session(提供Connection) 12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 SessionFactory(Connection工厂) 12.2.3 Session(提供Connection) 12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    2.4.1 Hibernate的核心接口 39 2.4.2 事件处理接口 41 2.4.3 Hibernate映射类型接口 41 2.4.4 可供扩展的接口 42 2.5 小结 43 2.6 思考题 45 第3章 第一个Hibernate应用 47 本章通过简单的helloapp应用例子,...

    hibernate原理与配置快速入门

    在本文中,我向大家重点介绍Hibernate的核心API调用库,并讲解一下它的基本配置。 也许你听说过Hibernate 的大名,但可能一直不了解它,也许你一直渴望使用它进行开发,那 么本文正是你所需要的!在本文中,我...

    hibernate 学习笔记

    hibernate 学习笔记: 了解hibernate的基本概念 配置hbm.xml cfg.xml ...hibernate的核心类和接口 openSession()和getCurrentSession() 线程局部变量模式 transaction事务 在web项目中开发hibernate

Global site tag (gtag.js) - Google Analytics