尚学堂hibernate学习笔记原版整理.docx

上传人:b****6 文档编号:5865483 上传时间:2023-01-01 格式:DOCX 页数:41 大小:90.57KB
下载 相关 举报
尚学堂hibernate学习笔记原版整理.docx_第1页
第1页 / 共41页
尚学堂hibernate学习笔记原版整理.docx_第2页
第2页 / 共41页
尚学堂hibernate学习笔记原版整理.docx_第3页
第3页 / 共41页
尚学堂hibernate学习笔记原版整理.docx_第4页
第4页 / 共41页
尚学堂hibernate学习笔记原版整理.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

尚学堂hibernate学习笔记原版整理.docx

《尚学堂hibernate学习笔记原版整理.docx》由会员分享,可在线阅读,更多相关《尚学堂hibernate学习笔记原版整理.docx(41页珍藏版)》请在冰豆网上搜索。

尚学堂hibernate学习笔记原版整理.docx

尚学堂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-->

true

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)常用四个:

native(int)identity(int)sequence(int)uuid(String)

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配置方法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1