Hiber
更新时间:2023-11-03 15:30:01 阅读量: 综合文库 文档下载
Hibernate 串讲
基础知识
① Hibernate是对象/关系映射(Object/Relation Mapping)的解决方案。 ② Hibernate架构 ● POJO类
● hibernate.cfg.xml ● *.hbm.xml ● Hibernate应用
二、 几个重要的类
● Configuration类 (负责管理Hibernate的配置信息) 当创建SessionFactory时,Configuration实例可以指定使用哪一个映射文挡。应用程序通常只是创建一个Configuration实例,并通过它创建一个SessionFactory实例。
● SessionFactory类 (负责创建Session实例)
它是线程安全的,可以被多线程调用以取得Session,而且构造SessionFactory很消耗资源,所以多数情况下一个应用中只初始化一个SessionFactory,为不同的线程提供Session。 ● Session类
Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session息息相关。Session不是线程安全的,多个执行线程共享一个Session,将会发生数据共享而发生混乱问题。为了解决此问题,可以采用ThreadLocal变量,使用它可以有效隔离执行所使用的数据,也就避开了Session的多线程之间的数据共享问题。
如何调用hibernate API? 1、创建Configuration对象。(解析配置文件) Configuration config = new Configuration();
2、通过Configuration创建Session Factory(线程安全的重量级组件)。
Config = config.configure(); //configure()方法会在CLASSPATH下寻找hibernate.cfg.xml SessionFactory = config.buildSessionFactory();
3、通过SessionFactory创建Session会话对象。 Session session = sessionFactory.openSession();
4、通过Session取得事务对象。
Transaction trans = session.beginTransaction();
5、通过session与数据库进行会话。 session.save(object o); //增 session.delete(object o); //删 session.update(object o); //改
session.get (Class clazz, Serializable id); //根据Id查找对象
session.createQuery(String sql); //自己拼HQL语言查找对象返回一个Query对象。
6、提交操作,结束事务。 Trans.commit();
7、关闭Session session.close();
注:第一步和第二步一般放在静态初始化代码块中执行。
三、Hibernate中自带ID的generator的含义:
1、identity:用于MySql数据库。特点:递增
注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。
2、sequence:用于Oracle数据库
3、native:跨数据库时使用,由底层方言产生。 Default.sequence为hibernate_sequence
注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。 如果Oracle中没有该序列,连Oracle数据库时会报错。
4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要 有初始值。
5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。
6、assigned:用户自定义id;
7、foreign:用于一对一关系共享主健时,两id值一样。
四、Hibernate类关系的处理:
1、One―to―One关系在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射one-to-one关系。
1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束。或者是两个表共享一个主健。
2、javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。
3、在hibernate中:
主健映射:都是one-to-one要用foreign生成策略。
外健映射:主表中用one-to-one,副表通过property-ref many-to-one
One-to-One PK主键映射 (详见代码) create table car_pk ( Table car_pk Id name serial manufacturer producedate id number(10,0) not null, name varchar2(15), serial varchar2(30), manufacturer varchar2(50), producedate date, primary key (id) ); create table engine_pk ( id number(10,0) not null, model varchar2(20), manufacturer varchar2(50), producedate date, primary key (id) ); alter table engine_pk add constraint fk_engine_car_pk foreign key (id) Table engine_pk Id model manufacturer producedate 特点:engine_pk 表的Id 与 car_pk表共享主键。 One-to-One FK外键映射 (详见代码) Table car_pk Id name serial manufacturer producedate Table engine_fk Id carid model manufacturer producedate 特点:engine_fk表多了carid外键字段来维护与car_fk 表的关系。
建表语句如下: create table engine_fk ( id number(10,0) not null, model varchar2(20) not null, manufacturer varchar2(50) not null, producedate date, carid number(10,0) unique, primary key (id) ); alter table engine_fk add constraint fk_engine_car_fk foreign key (carid) references car_fk(id); 2、Many-to-One关系在数据库中如何体现,在JavaBean中如何体现,在 Hibernate中如何映射many-to-on关系。
1、数据库中:一个表的主健对应另一个表的外健。 2、javaBean中:一个对象包含另一个对象的一个引用,另一个对象包含这个对象的一组(集合,用set)引用。
3、在hibernate中:用set.key指定具体列。
在Set一端一定要写inverse=“true”表示忽略集合一端的变化。
以Order类和Item类 的一对多关系为例子(详见代码): Order Item -id: Integer -id: Integer 1 * -owner: String -product: String -phone: String -amount: int -address: String -order: Order -items: Set
小结: 对象的关联关系有一对一、一对多、多对一和多对多,其中多对一和一对多关系比较常见。
一对一关系有两中方式:以主键关联和以外键关联。 一对多和多对一通常应设置为双向关联,并在“一”这一方设置inverse=\(比如一个班级对应多个学生,在班级这一边设置inverse=\)。设置了inverse=\这一端比较清闲,它把控制权交给了另一端。让“多”这一端有控制权。
多对多 可以借助中间表来保存两个实体之间的关系。
对象在Hibernate中的状态图:
对象3种状态: Transient(瞬时) Persistent(持久) Detached(托管) new 临时状态
garbege get()
load() save() delete() find() saveOrUpdate()
iterate()
etc. 持久化状态
evict() update() close()* saveOrUpdate clear()* lock() garbege 游离状态
组件映射:
Account类,Address类 (我们希望Address作为Account类的组件,且一个Account对象会对应一个Address对象)
Account中有属性:Address addr;
我们希望Address作为Account的属性而纯在, Account中属性定义中要包括Address
Address中属性定义不包括Account 没有主键id 没有映射文件 Account类的映射文件中有:
映射结果:Account&Address共一张表,Address没有单独表!
集合组件映射
例如:Account类,Address类 (我们希望Address作为Account类的组件,且一个Account对象会对应多个Address对象)
Account中有属性:Set addrs = new HashSet(); 组件类没有主键,简单的get/set方法 以及构造器
正在阅读:
Hiber11-03
2011年中国电线电缆行业100强排名03-04
山东省枣庄市2021届高三语文5月考前演练试题(含解析)07-23
日常计算机基础知识汇总08-25
运动会加油稿200字(2017版)02-20
万科地产置业顾问KPI08-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 国际金融与习题 大全哦~
- 建筑工程项目实施计划书(2014.05)
- 担保业务中应注意的风险点
- 发酵酱油蛋白质利用率的探讨
- 2014年安徽省芜湖一中高一自主招生(语文)试题及答案
- 生物化学题目
- 母猪产后常见的三种疾病防治
- 数据结构 课程设计报告(排序算法比较)
- CT书写报告的语言描述
- 2016数学建模国赛B题湖北赛区省一等奖论文详解 - 图文
- 教育学经典著作《爱弥儿》读后感
- 高级语言程序设计实验报告
- 渗透检测作业指导书
- 2009习题集
- 2016期货基础必考的易错点和三色标识笔记 - 图文
- 中考英语(河北专版)总复习精讲练习:第1部分 8年级(下) Units 12 5、河北中考考点精练(1)
- 固定资产练习题(含答案)汇总
- 夏商周的井田战车军制1.27 - 图文
- 中华人民共和国商务部关于原产于印度的进口磺胺甲恶唑反倾销调查的最终裁定
- 福建农林大学ASPNET实验三