




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1HelloWorldA) xmlB) annotation1 什么是O/RMapping以及为什么要有O/RMapping2 常见的O/R框架3 Hibernate基础配置4 Hibernate核心接口介绍5 对象的三种状态6 ID生成策略7 关系映射8 Hibernate查询(HQL)9 性能优化Hibernate HelloWorld1 建立新的java项目,名为:hibernate_HelloWorld2 学习建立User-library-hibernaet,并加入相应的jar包A) 项目右键build path-configure build path-add libraryB) 选择User-library,在其中新建library,命名为hibernateC) 在该library中加入hibernate所需jar包Hibernate coreRequiredSlf-non.jar3 引入mysql的JDBC驱动包4 在mysql中建立对应的数据库以及表A) create database hibernate;B) use hibernate;C) create table student(id int primary key,name varchar(2),age int);5 建立hibernate配置文件hibernate.cfg.xmlA) 从参考文档中copyB) 修改对应的数据库连接C) 注释掉暂时用不上的内容6 建立Student类7 建立Student映射文件Student.hbm.xmlA) 参考文档8 将映射文件加入到hibernate.cfg.xml中A) 参考文档9 写测试类Main,在Main中对Student对象进行直接的存储测试A) 参考文档10 FAQA) 要调用new Configuration().configure().buildSessionFactory(),而不是省略configure,否则会出hibernate dialect must be set异常建立Annotation版本的HelloWorld1 创建teacher表,create table teacher(id int primary key,name varchar(20), title varchar(10);2 创建Teacher类3 在hibernate lib中加入annotation的jar包A) hibernate annotation jarB) ejb3 persistence jarC) hibernate common annotations jarD) 注意文档中没有提到hibernate common annotations jar文件4 参考Annotation文档建立对应的注释5 在hibernate.cfg.xml中建立映射6 参考文档进行测试(注意文档中缺少configure()的小bug)7 FAQ:不给提示A) windowpreference content assistactivation加上What is and a Why O/R Mapping1 JDBC操作数据库很繁琐2 Sql语句编写并不是面向对象的3 可以在对象和关系表之间建立关联来简化编程4 O/R Mapping简化编程5 O/R Mapping跨越数据库平台Hibernate基础配置1对应项目:Hibernate _0300_Basic Configuration1 Hibernate.cfg.xml: hbm2dd.autoA)先建表还是先建实体类2搭建日志环境并配置显示DDL语句3. Hibernate.cfg.xml: show_sql4. Hibernate.cfg.xml: format_sql5表名和类名不同,对表名进行配置A) Annotation:TableB) Xml:自己查询6字段名和属性相同A) 默认为BasicB) Xml中不用写column7字段名和属性名不同A) Annotation:ColumnB) Xml:自己查询8不需要persistence的字段A) Annotation:TransientB) Xml不写9映射日期与时间类型,指定时间精度A) Annotation:TemporalB) Xml:指定type10映射枚举类型A) Annotation:EnumeratedB) Xml:麻烦11字段映射的位置(field或者get方法) A)best practice:保持field和get set方法的一致Hibernate映射类型java类型标准SQL类型integerjava.lang.Integerintegerlongjava.lang.Longbigintshortjava.lang.Shortsmallintfloatjava.lang.Floatfloatdoublejava.lang.Floatdoublebig_decimaljava.math.BigDecimalnumericcharacterjava.lang.Stringchar(1)stringjava.lang.Stringvarcharbytebyte或java.lang.Bytetinyintbooleanboolean或java.lang.Booleanbityes_noboolean或java.lang.Booleanchar(1)(Y/N)true_falseboolean或java.lang.Booleanchar(1)(Y/N)datejava.util.Date或java.sql.Datedatetimejava.util.Date或java.sql.Timetimetimestampjava.util.Date或java.sql.timestamptimestampcalendarjava.util.Calendartimestampcalendar_datejava.util.Calendardatebinarybytevarbinary或blobtextjava.lang.Stringclobserializablejava.io.Serializable实例varbinary或blobclobjava.sql.Clobclobblobjava.sql.Blobvarbinary或blobclassjava.lang.Classvarcharlocalejava.util.Localevarchartimezonejava.util.TimeZonevarcharcurrencyjava.util.CurrencyvarcharID 生成策略1 对应项目:hibernate_0400_ID 2 注意:A) 我们观察hibernate生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,比如index等)而是为了明白我们应该建立什么样的表和实体类映射3 Xml生成idA) generatorB) 常用四个:native identity sequence uuid4GeneratedValueA) 自定义IDB)AUTO 1)默认:对MySQL,使用auto_increment 2)对Oracle,使用hibernate_sequence(名称固定)C)IDENTITY(Teacher3)D)SEQUENCE(Teacher4) 1)SequenceGeneratorE)TABLE(Teacher5) 1)TableGenerator5联合主键A)IdClassi. Embeddable Idii. EmbeddeIDiii. Id IdClassB)xml:composite-id 1) 为什么要重写equals和hasCode 2)为什么要实现serializableB) Annotationi. Embeddble Idii. EmbeddedID(*)iii. Id IdClass(*) 核心开发接口介绍1 HibernateAPI文档需要单独下载2 ConfigurationA) AnnotationConfigurationB) 进行配置信息的管理C) 用来产生SessionFactory:维护数据库连接池D) 只需关注一个方法即:buildSessionFactory()3 SessionFactoryA) 用来产生和管理SessionB) 通常情况下每个应用只需要一个SessionFactoryC) 除非要访问多个数据库的情况D) 关注两个方法即:openSession:创建一个新的session getCurrentSession:获得当前的sesssion,没有则创建一个,在session没有提交前,多次调用getCurrentSession得到的都是同一个session, session一旦提交,再调用getCurrentSession得到的就是一个新session,这两个方法不能混用i. openSession每次都是新的,需要closeii. GetCurrentSession从上下文找,如果有,用旧的,如果没有,创建新的1 用途,界定事务边界2 事务提交自动close3 Current-session_context_class ( jta thread) (java transcation API)jA) Thread使用connectionB) Jta是针对分布式事务,由Application Server的支持(Tomcat不行)4 Session 等同于数据库的连接A) 管理一个数据库的任务单元B) 方法i. Save()ii. Deleteiii. Loadiv. Getv. Get与load的区别(重点 ) 1 不存在对应记录时表现不一样2 Load返回的是代理对象,等到真正用到对象的内容时才发出sql语句3 Get直接从数据库加载,不会延迟 Vi. update1 用来更新detached对象,更新完成后转为persistent状态2 更新transient对象会报错3 更新自己设定id的transient对象可以(前提是数据库有对应记录)4 P状态的对象只要设定不同字段就会发生更新 5 更新部分更改的字段A) xml设定property标签的upadte属性,annotation设定 Column的updatable属性,不过这种方式很少用,因为不灵活B) 使用xml中的dynamic-update,JPA1.0Annotation没有对应的属性,hibernate扩展? i. 同一个session可以,跨session不行,不过可以用merge() C)使用hql vii. saveOrUpdate viii. clear方法1 无论是load还是get,都会首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear方法可以强制清除session缓存 ix. flush() 方法1 可以强制进行从内存到数据库的同步5. SchemaExport6. NoteA) hibernate涉及很多非常非常细节的区别,但在实际应用中用得极少,请大家先享受写项目的乐趣,再来探讨这些细节问题i. 比如save和persist的区别ii. Merge、evict等方法iii. 比如refresh、lock等B) 建议学习的方法:动手实验关系映射对象之间的关系1. 这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于下列关系之一时,数据库表该如何映射,编程上该如何对待2. 简化问题 B) 怎么写AnnotaionC) 增删改查怎么写3. 一对一单向外键关联A) Annotation:one2one joinColumnB) Xml: many to one unique 4. 一对一双向外键关联A) Annotation:one2one (mappedBy)C) Xml: many to one unique one-to-one property-refD) 规律:凡是双向关联,必设mappedBy2 一对一单向主键关联(不重要)3 一对一双向主键关联(不重要)4 联合主键JoinColumns 组件映射A) 单向(主键,外键)B) 双向(主键,外键)C) 中间表l 多对一与一对多1 多对一单向关联A) 数据库表设计:在多方加外键i. 错误做法:在一方加冗余 PersonidPersonnameDreamid1Zhangsan11Zhangsan2 DreamidDreamdescr12B) Annotation:Many2OneC) Xml:many-to-one2. 一对多单向关联A) 类:在一的一方存在多方的集合B) 数据库表同上C) Annotation:One2ManyD) Xml:set one-to-many3. 一对多(多对一)双向关联l 多对多1. 单向关联: A) 例如:老师和学生的关系,老师需要知道自己教了哪些学生B) 数据库:中间表C) Many2ManyD) Xml:HQLEJB QLQBC(Query By Criteria)QBE(Query By Example)2、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年民航工程师航空器维修安全管理培训考试题库及答案
- 组织发展面试题库及答案
- 邹城幼儿面试题库及答案
- 安全证考试题及答案大全
- 安徽怀宁辅警笔试试题及答案
- 房地产信托受益权让与及回购担保服务合同
- 万科物业租赁合同范本:租户入住及退租管理协议
- 汽车抵押贷款合同示范
- 股东退股条件及企业品牌形象保密合同
- 互联网公司注销及知识产权清理合同
- 蜂鸟众包培训知识课件
- 新转型九年一贯制学校三年发展规划(2025年-2028年)
- 维护秩序靠规则(课件) 2025-2026学年八年级道德与法治上册(统编版2024)
- 期神丁鹏期货交易课件
- 反走私课件教学课件
- 大货车闯红灯安全培训课件
- 变电站SVG培训课件
- 2025秋教科版(2024)科学三年级上册教学设计(附目录)
- 2025年人教版三年级数学上册全册教案
- (2025秋新版)苏教版科学三年级上册全册教案
- 《中国人首次进入自己的空间站》导学案 部编语文八年级上册
评论
0/150
提交评论