马士兵hibernate学习笔记.docx

上传人:b****7 文档编号:16783609 上传时间:2023-07-17 格式:DOCX 页数:50 大小:123.55KB
下载 相关 举报
马士兵hibernate学习笔记.docx_第1页
第1页 / 共50页
马士兵hibernate学习笔记.docx_第2页
第2页 / 共50页
马士兵hibernate学习笔记.docx_第3页
第3页 / 共50页
马士兵hibernate学习笔记.docx_第4页
第4页 / 共50页
马士兵hibernate学习笔记.docx_第5页
第5页 / 共50页
马士兵hibernate学习笔记.docx_第6页
第6页 / 共50页
马士兵hibernate学习笔记.docx_第7页
第7页 / 共50页
马士兵hibernate学习笔记.docx_第8页
第8页 / 共50页
马士兵hibernate学习笔记.docx_第9页
第9页 / 共50页
马士兵hibernate学习笔记.docx_第10页
第10页 / 共50页
马士兵hibernate学习笔记.docx_第11页
第11页 / 共50页
马士兵hibernate学习笔记.docx_第12页
第12页 / 共50页
马士兵hibernate学习笔记.docx_第13页
第13页 / 共50页
马士兵hibernate学习笔记.docx_第14页
第14页 / 共50页
马士兵hibernate学习笔记.docx_第15页
第15页 / 共50页
马士兵hibernate学习笔记.docx_第16页
第16页 / 共50页
马士兵hibernate学习笔记.docx_第17页
第17页 / 共50页
马士兵hibernate学习笔记.docx_第18页
第18页 / 共50页
马士兵hibernate学习笔记.docx_第19页
第19页 / 共50页
马士兵hibernate学习笔记.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

马士兵hibernate学习笔记.docx

《马士兵hibernate学习笔记.docx》由会员分享,可在线阅读,更多相关《马士兵hibernate学习笔记.docx(50页珍藏版)》请在冰点文库上搜索。

马士兵hibernate学习笔记.docx

马士兵hibernate学习笔记

马士兵hibernate学习笔记

 

课程内容 6课程内容

1 HelloWorld 6

2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping 6

3 常见的0/R框架(了解) 6

4 hibernate基础配置(重点) 6

5 ID生成策略(重点 AUTO) 6

6 Hibernate核心开发接口介绍(重点) 6

7 对象的三种状态(了解) 6

8 关系映射(重点) 6

9 Hibernate査询(HQL) 6

10 在Struts基础上继续完善BBS200 6

11 性能优化(重点) 6

12 补充话题 6

风格 6

1 先脉络,后细节 6

2 先操作,后原理 6

3 重Annotation,轻xml配置文件 6

资源 6

1 http:

//www. hibernate.org 6

2 hibernate zh_CN文档 6

3 hibernate annotation references 6

环境准备 6

1 下载hibernate-distribution-3.3.2.GA-dist 6

2 下载hibernate-annotations-3[1].4.0.GA 6

3 注意阅读hibernate compatibility matrix(hibernate 网站download) 6

4 下载slf4jl.5.8 7

Hibernate HelloWorld 7

1 建立新java 项目,名为hibernate_0100_HelloWorld 7

2 学习建User-library-hibernate,并加入相应的jar包 7

3 引入mysql的JDBC驱动包 7

4 在mysql中建立对应的数据库以及表 7

5 建立hibernate 配置文件hibernate.cfg.xml 7

6 建立Student 类 7

7 建立Student 映射文件 Student.hbm.xml 7

8 将映射文件加入到hibernate.cfg.xml中 7

9 写测试类Main,在Main中对Student对象进行直接的存储测试 7

10 FAQ:

 7

11 Note:

 7

12 建立能力 8

建立 Annotation 版本的 HelloWorld 8

1 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO)); 8

2 创建Teacher 类 8

3 在hibernate lib 中加入annotation的jar包 8

4 参考Annotaion文档建立对应的注解 8

5 在hibernate.cfg.xml中建立映射

.../〉 8

6 参考文裆进行测试(注意文裆中缺少configure()的小bug) 8

7 FAQ:

 @不给提示 8

What is and Why 0/R Mapping 8

1 JDBC操作数据库很繁琐 8

2 Sql语句编写并不是面向对象的 8

3 可以在对象和关系表之间建立关联来简化编程 8

4 0/R Mapping 简化编程 8

5 0/R Mapping跨越数据库平台 8

6 Hibernate_0200_OR_Mapping_Simulation 8

0/R Mapping Frameworks 8

1 hibernate 8

2 toplink 9

3 jdo 9

4 JPA 9

Hibernate基础配置 9

1 对应项目:

Hibernate_0300_BasicConfiguration 9

2 介绍MSQL的图形化客户端 9

3 hibernate.cfg.xml:

 hbni2ddl.auto 9

4 搭建日志环境并配置显示DDL语句 9

5 搭建jUnit环境 9

6 hibernate.cfg.xml:

show_sql 9

7 hibernate.cfg.xml:

format_sql 9

8 表名和类名不同,对表名进行配置 9

9 字段名和属性相同 9

10 字段名和属性名不同 9

11 不需要psersistence的字段(不用列) 9

12 映射日期与时间类型,指定时间精度 9

13 映射枚举类型( 比较少用) 10

14 字段映射的位置(field或者get方法) 10

15 @Lob 10

16 课外:

CLOBBLOB类型的数据存取 10

17 课外:

Hibernate自定义数据类型 10

18 hibernate 类型 10

ID生成策略 10

1 对应项目:

hibernate_0400_ID 10

2 注意:

 10

3 xml生成id 10

4 注解方式:

@GeneratedValue 10

5 FAQ; 11

6 联合主键 11

核心幵发接口介绍 13

1 hibernate_0500_CoreAPI 13

2 Hibernate API文档需要单独下载 13

3 Configuration 13

4 SessoinFactor 13

5 Session 13

6 SchemaExport (自动建表) 14

7 Query 接口 14

8 Note:

 14

三种对象状态 15

1 上一个 project 15

2 三种状态的区分关键在于 15

3 三种状态:

 15

4 对这三种状态需要关注的问题是在该状态下如果进行数据库的操作会发生什么结果,比 如改变属性的 15

关系映射(重要) 16

对象之间的关系 16

1 这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于 16

2 简化问题:

 16

3 —对一 16

4 —对多 16

5 组件映射 16

一对一关联 17

1 一对一单向外键关联 17

2 一对一双向外键关联 17

3 一对一单向主键关联(不重要) 18

4 一对一双向主键关联(不重要) 18

5 联合主键 18

组件映射 18

1 项目:

hibernate_1100_component 18

2 对象关系:

一个对象是另外一个对象的一部分 18

3 数据库表:

一张表 18

4 annotation:

 @ Embeddable @Embbeded 18

5 xml:

 使用

 19

多对一与一对多 19

1 多对一单向关联 19

2 一对多单向关联 20

3 一对多(多对一)双向关联 20

多对多 21

1 单向关联:

 21

2 双向关联:

 22

关联关系中的CRUD_Cascade_Fetch 22

1 hibernate_1700_one2many_many2one_bi_crud 22

2 设定cascade以设定在持久化时对于关联对象的操作(CUD,R归Fetch管) 22

3 cascade仅仅是帮我们省了编程的麻烦而已,不要把它的作用看的太大 22

4 铁律:

双向关系在程序中要设定双向关联 23

5 铁律:

双向mappedBy 23

6 fetch 23

7 Update时@ManyToOne()中的cascade参数关系 23

8 Delete时@ManyToOne()中的cascade关系 23

9 O/RMapping 编程模型 24

10 要想删除或者更新先做load,除了精确知道ID之外 24

11 如果想消除关联关系,先设定关系为null.再删除对应记录,如果不删记录,该记录变成垃圾数据 24

12 练习:

多对多的CRUD 24

关系映射总结 25

1 什么样的关系,设计什么样的表,进行什么样的映射 25

2 CRUD,按照自然的理解即可(动手测试) 25

集合映射(不太重要) 25

1 项目名称:

hibernate_1800_Collections_Mapping 25

2 Set 25

3 List (与Set差不多 多个@OrderBy) 25

4 Map 25

继承映射(不太重要) 25

1 三种方式 25

作业:

 25

1 学生课程、分数的设计(重要) 25

2 设计:

 26

3 树状结构的设计(至关重要) 26

Hibernate 查询(Query Language) 27

HQL vs EJBQL 27

1 NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)" 27

2 总结:

QL应该和导航关系结合,共同为査询提供服务。

 27

性能优化 27

1 注意session.clear()的运用,尤其在不断分页循环的时候 27

2 1+N问题 (典型的面试题) (详见hibernate_2800_Hibernate_1+N项目) 27

3 list和iterate不同之处(//主要为了面试  详见hibernate_2900_Hibernate_list_iterate) 27

4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 27

5 事务并发处理(面试的意义更大) 28

1 HelloWorld

a) Xml

b) annotation

2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping

3 常见的0/R框架(了解)

4 hibernate基础配置(重点)

5 ID生成策略(重点 AUTO) 

6 Hibernate核心开发接口介绍(重点)

7 对象的三种状态(了解)

8 关系映射(重点)

9 Hibernate査询(HQL) 

10 在Struts基础上继续完善BBS200

11 性能优化(重点)

12 补充话题

风格

1 先脉络,后细节

2 先操作,后原理

3 重Annotation,轻xml配置文件

a) JPA

b) hibernate – extension

资源

1 http:

//www. hibernate.org

2 hibernate zh_CN文档

3 hibernate annotation references

环境准备

1 下载hibernate-distribution-3.3.2.GA-dist

2 下载hibernate-annotations-3[1].4.0.GA

3 注意阅读hibernate compatibility matrix(hibernate 网站download)

4 下载slf4jl.5.8

Hibernate HelloWorld

1 建立新java 项目,名为hibernate_0100_HelloWorld

2 学习建User-library-hibernate,并加入相应的jar包

a) 项目右键-buildpath-configure build path-add library—

b) 选择User-library,在其中新建 libraray,命名为 hibernate

c) 在该library中加入hibernate所需jar包

i. hibernate core

ii. /required

iii. slf-nop jar

3 引入mysql的JDBC驱动包

4 在mysql中建立对应的数据库以及表

a) create database hibernate;

b) use hibernate;

c) create table Student (id int primary key, namevarchar(20), age int);

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) 参考文挡

10 FAQ:

a) 要调用 new Configuration().configure().buildSessionFactory(),而不是

要省略 configure,否则会出 hibernate dialect must be set 的异常

11 Note:

a) 请务必建立自己动手査文挡的能力

b) 重要的是:

i. 要建立自己动手查一手文档的信心

ii. 还有建立自己动手查一手文档的习惯!

iii. 主动学习,砍弃被动接受灌输的习惯!

12 建立能力

a) 错误读完整

b) 读—昔误的关键行

c) 排除法

d) 比较法

e) google

建立 Annotation 版本的 HelloWorld

1 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO));

2 创建Teacher 类

3 在hibernate lib 中加入annotation的jar包

a) hibernate annotaion jar

b) ejb3 persistence jar

c) hibernate common-annotations.jar

d) 注意文裆中没有提到hibernate-common-annotations.jar 文件

4 参考Annotaion文档建立对应的注解

5 在hibernate.cfg.xml中建立映射

.../〉

6 参考文裆进行测试(注意文裆中缺少configure()的小bug)

7 FAQ:

 @不给提示

a) 配置eclipse属性信息content assist-activation--加上@

What is and Why 0/R Mapping

1 JDBC操作数据库很繁琐

2 Sql语句编写并不是面向对象的

3 可以在对象和关系表之间建立关联来简化编程

4 0/R Mapping 简化编程

5 0/R Mapping跨越数据库平台

6 Hibernate_0200_OR_Mapping_Simulation

0/R Mapping Frameworks

1 hibernate

2 toplink

3 jdo

4 JPA

a) 意愿统一天下

Hibernate基础配置

1 对应项目:

Hibernate_0300_BasicConfiguration

2 介绍MSQL的图形化客户端

3 hibernate.cfg.xml:

 hbni2ddl.auto:

create、update。

a) 先建表还是先建实体类—先建表

4 搭建日志环境并配置显示DDL语句

a) slf4j与log4j的关系:

slf4j像是一个大管家,可以管理许多的日志框架,log4j是其中之一

b) 加入slf4j-log4j.jar,加入 log4j 的 jar 包,去掉 slf4-nop.jar

c) 从hibernate/project/etc 目录 copy log4j.properties

d) 査询hibernate文裆,日志部分,调整日志的输出策略

5 搭建jUnit环境

a) 需要注意jUnit的Bug

6 hibernate.cfg.xml:

show_sql  是否输出SQL语句

7 hibernate.cfg.xml:

format_sql 格式化SQL语句,美化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) best practice:

保持 field(变量定义) 和 get set 方法的一致

15 @Lob

16 课外:

CLOBBLOB类型的数据存取

17 课外:

Hibernate自定义数据类型

18 hibernate 类型

ID生成策略

1 对应项目:

hibernate_0400_ID

2 注意:

a)  我们观察hibernate生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,比如index等)而是为了明白我们应该建立什么样的表和实体类映射

3 xml生成id

a) generator

b) 常用四个:

native identity sequence uuid

4 注解方式:

@GeneratedValue

a) 自定义ID

b) AUTO(直接写 @GeneratedValue 相当如native) (@GeneratedValue(strategy=GenerationType.AUTO))

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") 

public int getId() {

return id;

}

e) TABLE (可以忘记)

i. @TableGenerator

@TableGenerator(

name="teacherID", //被调用的TABLE名字

table="teacherID_DB", //数据库建立的表名

pkColumnName="key_value",

pkColumnValue="pk_value",

valueColumnName="teacher", //pkColumnValue对应类名

allocationSize=1 //pkColumnValue对应类名

 

@GeneratedValue(strategy=GenerationType.TABLE,generator=" teacherID ")

 

注:

如果使用注解方式的uuid 如下:

@Id

@GeneratedValue(generator="teacherUUID")

@GenericGenerator(name="teacherUUID", strategy="uuid")

5 FAQ;

a) 用Junit测试时Hibernate Session Factory初始化异常不提示.疑似一个bug

b) 用main来做测试

6 联合主键

a) Xml方式:

 composite-id

i. 将联合主键的属性提取出来,重新编写一个pojo类(原pojo类中的id,name要删除 并新加入属性“StudentPK”)

      public class StudentPK implements Serializable {

private String id;

private String name;

… …

ii. 新建pojo类必须实现 java.io.Serializable 序列化接口

iii. 新pojo类要重写equals和hashCode方法

@Override

public boolean equals(Object o) {

if(o instanceof StudentPk) {

StudentPk pk = (StudentPk)o;

if(this.id == pk.getId() && this.name.equals(pk.getName())) {

  return true;

}

}

return false;

}

 

@Override

public int hashCode() {

return this.name.hashCode();

}

iv. 联合主键生成策略XML配置方法

    

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2