尚学堂hibernate学习笔记原版整理.docx
- 文档编号:8578155
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:41
- 大小:90.36KB
尚学堂hibernate学习笔记原版整理.docx
《尚学堂hibernate学习笔记原版整理.docx》由会员分享,可在线阅读,更多相关《尚学堂hibernate学习笔记原版整理.docx(41页珍藏版)》请在冰豆网上搜索。
尚学堂hibernate学习笔记原版整理
这个文件是我自己照着网上找到的马士兵老师的hibernate笔记截图版手打出来的
有颜色部分的文字是我学习的时候自己添加的笔记说明(红色的除外)
刨除去颜色部分就是和马士兵老师的原版文档一模一样了
希望能给好学的朋友一点帮助
目录
课程内容5
1HelloWorld5
2Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping5
3常见的0/R框架(了解)5
4hibernate基础配置(重点)5
5ID生成策略(重点AUTO)5
6Hibernate核心开发接口介绍(重点)5
7对象的三种状态(了解)5
8关系映射(重点)5
9Hibernate査询(HQL)5
10在Struts基础上继续完善BBS2005
11性能优化(重点)5
12补充话题5
风格5
1先脉络,后细节5
2先操作,后原理5
3重Annotation,轻xml配置文件5
资源5
1http:
//www.hibernate.org5
2hibernatezh_CN文档5
3hibernateannotationreferences5
环境准备5
1下载hibernate-distribution-3.3.2.GA-dist5
2下载hibernate-annotations-3[1].4.0.GA5
3注意阅读hibernatecompatibilitymatrix(hibernate网站download)5
4下载slf4jl.5.86
HibernateHelloWorld6
1建立新java项目,名为hibernate_0100_HelloWorld6
2学习建User-library-hibernate,并加入相应的jar包6
3引入mysql的JDBC驱动包6
4在mysql中建立对应的数据库以及表6
5建立hibernate配置文件hibernate.cfg.xml6
6建立Student类6
7建立Student映射文件Student.hbm.xml6
8将映射文件加入到hibernate.cfg.xml中6
9写测试类Main,在Main中对Student对象进行直接的存储测试6
10FAQ:
6
11Note:
6
12建立能力7
建立Annotation版本的HelloWorld7
1创建teacher表,createtableteacher(idintprimarykey,namevarhcar(20),titlevarchar(lO));7
2创建Teacher类7
3在hibernatelib中加入annotation的jar包7
4参考Annotaion文档建立对应的注解7
5在hibernate.cfg.xml中建立映射 .../〉7 6参考文裆进行测试(注意文裆中缺少configure()的小bug)7 7FAQ: @不给提示7 WhatisandWhy0/RMapping7 1JDBC操作数据库很繁琐7 2Sql语句编写并不是面向对象的7 3可以在对象和关系表之间建立关联来简化编程7 40/RMapping简化编程7 50/RMapping跨越数据库平台7 6Hibernate_0200_OR_Mapping_Simulation7 0/RMappingFrameworks7 1hibernate7 2toplink8 3jdo8 4JPA8 Hibernate基础配置8 1对应项目: Hibernate_0300_BasicConfiguration8 2介绍MSQL的图形化客户端8 3hibernate.cfg.xml: hbni2ddl.auto8 4搭建日志环境并配置显示DDL语句8 5搭建jUnit环境8 6hibernate.cfg.xml: show_sql8 7hibernate.cfg.xml: format_sql8 8表名和类名不同,对表名进行配置8 9字段名和属性相同8 10字段名和属性名不同8 11不需要psersistence的字段(不用列)8 12映射日期与时间类型,指定时间精度8 13映射枚举类型(比较少用)9 14字段映射的位置(field或者get方法)9 15@Lob9 16课外: CLOBBLOB类型的数据存取9 17课外: Hibernate自定义数据类型9 18hibernate类型9 ID生成策略9 1对应项目: hibernate_0400_ID9 2注意: 9 3xml生成id9 4注解方式: @GeneratedValue9 5FAQ;10 6联合主键10 核心幵发接口介绍12 1hibernate_0500_CoreAPI12 2HibernateAPI文档需要单独下载12 3Configuration12 4SessoinFactor12 5Session12 6SchemaExport(自动建表)13 7Query接口13 8Note: 13 三种对象状态14 1上一个project14 2三种状态的区分关键在于14 3三种状态: 14 4对这三种状态需要关注的问题是在该状态下如果进行数据库的操作会发生什么结果,比如改变属性的14 关系映射(重要)15 对象之间的关系15 1这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于15 2简化问题: 15 3—对一15 4—对多15 5组件映射15 一对一关联16 1一对一单向外键关联16 2一对一双向外键关联16 3一对一单向主键关联(不重要)17 4一对一双向主键关联(不重要)17 5联合主键17 组件映射17 1项目: hibernate_1100_component17 2对象关系: 一个对象是另外一个对象的一部分17 3数据库表: 一张表17 4annotation: @Embeddable@Embbeded17 5xml: 使用 18 多对一与一对多18 1多对一单向关联18 2一对多单向关联19 3一对多(多对一)双向关联19 多对多20 1单向关联: 20 2双向关联: 20 关联关系中的CRUD_Cascade_Fetch21 1hibernate_1700_one2many_many2one_bi_crud21 2设定cascade以设定在持久化时对于关联对象的操作(CUD,R归Fetch管)21 3cascade仅仅是帮我们省了编程的麻烦而已,不要把它的作用看的太大21 4铁律: 双向关系在程序中要设定双向关联21 5铁律: 双向mappedBy21 6fetch21 7Update时@ManyToOne()中的cascade参数关系22 8Delete时@ManyToOne()中的cascade关系22 9O/RMapping编程模型23 10要想删除或者更新先做load,除了精确知道ID之外23 11如果想消除关联关系,先设定关系为null.再删除对应记录,如果不删记录,该记录变成垃圾数据23 12练习: 多对多的CRUD23 关系映射总结24 1什么样的关系,设计什么样的表,进行什么样的映射24 2CRUD,按照自然的理解即可(动手测试)24 集合映射(不太重要)24 1项目名称: hibernate_1800_Collections_Mapping24 2Set24 3List(与Set差不多多个@OrderBy)24 4Map24 继承映射(不太重要)24 1三种方式24 作业: 24 1学生课程、分数的设计(重要)24 2设计: 24 3树状结构的设计(至关重要)25 Hibernate查询(QueryLanguage)26 HQLvsEJBQL26 1NativeSQL>HQL.>EJBQL(JPQL1.0)>QBC(QueryByCriteria)>QBE(QueryByExample)"26 2总结: QL应该和导航关系结合,共同为査询提供服务。 26 性能优化26 1注意session.clear()的运用,尤其在不断分页循环的时候26 21+N问题(典型的面试题)(详见hibernate_2800_Hibernate_1+N项目)26 3list和iterate不同之处(//主要为了面试详见hibernate_2900_Hibernate_list_iterate)26 4一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache)26 5事务并发处理(面试的意义更大)27 课程内容 1HelloWorld a)Xml b)annotation 2Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping 3常见的0/R框架(了解) 4hibernate基础配置(重点) 5ID生成策略(重点AUTO) 6Hibernate核心开发接口介绍(重点) 7对象的三种状态(了解) 8关系映射(重点) 9Hibernate査询(HQL) 10在Struts基础上继续完善BBS200 11性能优化(重点) 12补充话题 风格 1先脉络,后细节 2先操作,后原理 3重Annotation,轻xml配置文件 a)JPA b)hibernate–extension 资源 1http: //www.hibernate.org 2hibernatezh_CN文档 3hibernateannotationreferences 环境准备 1下载hibernate-distribution-3.3.2.GA-dist 2下载hibernate-annotations-3[1].4.0.GA 3注意阅读hibernatecompatibilitymatrix(hibernate网站download) 4下载slf4jl.5.8 HibernateHelloWorld 1建立新java项目,名为hibernate_0100_HelloWorld 2学习建User-library-hibernate,并加入相应的jar包 a)项目右键-buildpath-configurebuildpath-addlibrary— b)选择User-library,在其中新建libraray,命名为hibernate c)在该library中加入hibernate所需jar包 i.hibernatecore ii./required iii.slf-nopjar 3引入mysql的JDBC驱动包 4在mysql中建立对应的数据库以及表 a)createdatabasehibernate; b)usehibernate; c)createtableStudent(idintprimarykey,namevarchar(20),ageint); 5建立hibernate配置文件hibernate.cfg.xml a)从参考文档中copy b)修改对应的数据库连接 c)注释掉暂时用不上的内容 6建立Student类 7建立Student映射文件Student.hbm.xml a)参考文档 8将映射文件加入到hibernate.cfg.xml中 a)参考文档 9写测试类Main,在Main中对Student对象进行直接的存储测试 a)参考文挡 10FAQ: a)要调用newConfiguration().configure().buildSessionFactory(),而不是 要省略configure,否则会出hibernatedialectmustbeset的异常 11Note: a)请务必建立自己动手査文挡的能力 b)重要的是: i.要建立自己动手查一手文档的信心 ii.还有建立自己动手查一手文档的习惯! iii.主动学习,砍弃被动接受灌输的习惯! 12建立能力 a)错误读完整 b)读—昔误的关键行 c)排除法 d)比较法 e)google 建立Annotation版本的HelloWorld 1创建teacher表,createtableteacher(idintprimarykey,namevarhcar(20),titlevarchar(lO)); 2创建Teacher类 3在hibernatelib中加入annotation的jar包 a)hibernateannotaionjar b)ejb3persistencejar c)hibernatecommon-annotations.jar d)注意文裆中没有提到hibernate-common-annotations.jar文件 4参考Annotaion文档建立对应的注解 5在hibernate.cfg.xml中建立映射 .../〉 6参考文裆进行测试(注意文裆中缺少configure()的小bug) 7FAQ: @不给提示 a)配置eclipse属性信息contentassist-activation--加上@ WhatisandWhy0/RMapping 1JDBC操作数据库很繁琐 2Sql语句编写并不是面向对象的 3可以在对象和关系表之间建立关联来简化编程 40/RMapping简化编程 50/RMapping跨越数据库平台 6Hibernate_0200_OR_Mapping_Simulation 0/RMappingFrameworks 1hibernate 2toplink 3jdo 4JPA a)意愿统一天下 Hibernate基础配置 1对应项目: Hibernate_0300_BasicConfiguration 2介绍MSQL的图形化客户端 3hibernate.cfg.xml: hbni2ddl.auto a)先建表还是先建实体类 4搭建日志环境并配置显示DDL语句 a)slf4j与log4j的关系: slf4j像是一个大管家,可以管理许多的日志框架,log4j是其中之一 b)加入slf4j-log4j.jar,加入log4j的jar包,去掉slf4-nop.jar c)从hibernate/project/etc目录copylog4j.properties d)査询hibernate文裆,日志部分,调整日志的输出策略 5搭建jUnit环境 a)需要注意jUnit的Bug 6hibernate.cfg.xml: show_sql 7hibernate.cfg.xml: format_sql --格式化显示输出sql--> 8表名和类名不同,对表名进行配置 a)Annotation: @Table b)xml: 自己査询 9字段名和属性相同 a)不用写@column与默认的@Basic效果一样 b)Xml中不用写column 10字段名和属性名不同 a)Annotation: @Column b)xml: 自己査询 11不需要psersistence的字段(不用列) a)Annotation: @Transient b)xml不写 12映射日期与时间类型,指定时间精度 a)Annotation: @Temporal(参数)参数有3种只显示时间,只显示日期,时间日期都显示 //@Temporal(TemporalType.DATE)只显示日期 //@Temporal(TemporalType.TIME)只显示时间 //@Temporal(TemporalType.TIMESTAMP)显示日期与时间 b)xml: 指定type 13映射枚举类型(比较少用) a)@Enumerated @Enumerated(EnumType.ORDINAL)枚举类型按位置数,如: 0,1,2...存储 @Enumerated(EnumType.STRING)枚举类型按设定值存储 b)xml: 麻烦 14字段映射的位置(field或者get方法) a)bestpractice: 保持field(变量定义)和getset方法的一致 15@Lob 16课外: CLOBBLOB类型的数据存取 17课外: Hibernate自定义数据类型 18hibernate类型 ID生成策略 1对应项目: hibernate_0400_ID 2注意: a)我们观察hibernate生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,比如index等)而是为了明白我们应该建立什么样的表和实体类映射 3xml生成id a)generator b)常用四个: nativeidentitysequenceuuid 4注解方式: @GeneratedValue a)自定义ID b)AUTO(直接写@GeneratedValue相当如native) i.默认: 对MySQL,使用auto_increment ii.对Oracle使用hibernate_sequence(名称固定) c)IDENTITY(@GeneratedValue(strategy=GenerationType.IDENTITY)) d)SEQUENCE(@GeneratedValue(strategy=GenerationType.SEQUENCE)) i.@SequenceGenerator(可自定义在数据库生成指定的sequence名) @Id //在@GeneratedValue中增加generator="teacherSEQ" @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherSEQ") //"teacherSEQ"为@SequenceGenerator的标识名 //"teacherSEQ_DB"为指定到数据库生成的Sequence名 @SequenceGenerator(name="teacherSEQ",sequenceName="teacherSEQ_DB") publicintgetId(){ returnid; } e)TABLE(可以忘记) i.@TableGenerator @TableGenerator(name="teacherID", table="teacherID_DB", pkColumnName="key_value", pkColumnValue="pk_value", valueColumnName="teacher", allocationSize=1) 注: 如果使用注解方式的uuid如下: @Id @GeneratedValue(generator="teacherUUID") @GenericGenerator(name="teacherUUID",strategy="uuid") 5FAQ; a)用Junit测试时HibernateSessionFactory初始化异常不提示.疑似一个bug b)用main来做测试 6联合主键 a)Xml方式: composite-id i.将联合主键的属性提取出来,重新编写一个pojo类(原pojo类中的id,name要删除并新加入属性“StudentPK”) publicclassStudentPKimplementsSerializable{ privateStringid; privateStringname; …… ii.新建pojo类必须实现java.io.Serializable序列化接口 iii.新pojo类要重写equals和hashCode方法 @Override publicbooleanequals(Objecto){ if(oinstanceofStudentPk){ StudentPkpk=(StudentPk)o; if(this.id==pk.getId()&&this.name.equals(pk.getName())){ returntrue; } } returnfalse; } @Override publicinthashCode(){ returnthis.name.hashCode(); } iv.联合主键生成策略XML配置方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学堂 hibernate 学习 笔记 原版 整理