Hibernate学习笔记_计算机-Java.pdf
《Hibernate学习笔记_计算机-Java.pdf》由会员分享,可在线阅读,更多相关《Hibernate学习笔记_计算机-Java.pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习必备 欢迎下载 1.MyEclipse 的使用 2.符号不给提示 a)可以使用快捷键 alt+/来进行提示 b)进行 选项设置 window-proferences-搜 content assist java 中的 c)提示 preference java editorcontent assist d)3.整行的复制、移动 a)复制整行:按 ctrl+alt+()来复制 当前焦点所在的行 b)移动整行:按 alt+()来移动 当前焦点所在的行 4.2.hibernate 调试 1.调试 bug:表名不能和 mappedBy=“”的名相同 2.如果使用 SchemaExport(cfg)它和
2、 SessionFactory 使用的 Configuration 一定不要是同一个 否则会出现 Duplicate collection role mapping 的错误 3.4.3.hibernate 经验 1.先建表 a)在公司中一般先建表 b)但是在建表的过程中不一定能和实体类中的对应关系对应上,所以可以通过实体类生成表,来看一下表应给怎么建,然后再去调整表,调整完表后,就可以调整实体类,并构建实体类 c)现在是做实验一般会让他自动生成,因为实验式不需要对表调优 2.4.PowerDisigner的使用 1.连接数据库 a)一般 powerDisigner 连接数据库使用 odbc,但
3、在 Powerdisigner 中没有MySQL 的 odbc 数据源 b)解决方法:使用 jdbc 进行连接 学习必备 欢迎下载 i.菜单的 Database-configure connections-connection profiles 设置 ii.截图(视频 35(27.56 秒视频截图)(设置截图)c)设置完成后 测试有可能出现错误 d)解决方法:把 mysql 的 jar 导入到系统的 classpath 下 2.方向工程 a)方向工程(reverse Engineer Database)b)作用:可以把数据库中的表的关系 反向再现 c)其他的设置问题可以看视频 35(30 分钟
4、视频)3.课程内容 1.HelloWord a)Xml 的配置 b)Annotation 的配置 2.Hibernate 原理模拟-什么是 O/R Mapping 以及为什么要有 O/R Mapping 3.常见的 O/R 框架(了解)4.Hibernate 基础配置(重点)5.Hibernate 核心接口介绍(重点)6.对象的三种状态(了解)7.ID 生成策略(重点掌握 auto)8.关系映射(重点)9.Hibernate 查询(HQL)10.在 Struts 基础上继续完善 BBS2009 11.性能优化(重点)12.补充话题 风格 1.先脉络,后细节 2.先操作,后原理 3.重 anno
5、tation,轻 xml 配置 a)JPA b)Hibernate-extension 环境配置 导入 hibernate-distribution下的 hibernate3.jar 导入 hibernate-distributionjpahibernate-jpa-2.0-api-1.0.0.Final.jar 导入 hibernate-distributionrequired下的所有 jar 整行按来复制当前焦点所在的行移动整行按来移动当前焦点所在的行调试调试表名不能和的名相同如果使用它和使用的一定不要是同一个否则会出现的错误经验先建表在公司中一般先建表但是在建表的过程中不一定能和实体类中
6、的并构建实体类现在是做实验一般会让他自动生成因为实验式不需要对表调优的使用连接数据库一般连接数据库使用但在中没有的数据源解方法使用进行连接学习必备欢迎下载菜单的设置截图视频秒视频截图设置截图设置完成后测试设置问题可以看视频分钟视频课程内容的配置的配置原理模拟什么是以及为什么要有常见的框架了解基础配置重点核心接口介绍重点对象的三种状态了解生成策略重点掌握关系映射重点查询在基础上继续完善性能优化重点补充话题学习必备 欢迎下载 配置 slf4j 的日志环境 导入 slf4jslf4j-nop-1.6.1.jar 配置 log4j 的日志环境 导入 apache-log4j-1.2.16log4j-1
7、.2.16.jar 并且要导入 slf4jslf4j-log4j12-1.6.1-sources.jar 配置 JUnit 导入 junit4.9b2junit-4.9b2.jar 注意 版本的兼容性 annotation entitymanager 课程内容列表 4.Hibernate 基础配置 1.对应项目:hibernate_0300_BasicConfiguration 2.Mysql 的图形化客户端 3.Hibernate.cfg.xml:hbm2ddl.auto a)先建表,然后再创建对象 优点:建表以后需要对表进行优化,如果是先建对象就没法对表进行优化啦 4.搭建日志环境并配置显
8、示ddl 语句 a)可以使用好几种日志架构 如:slf4j log4j apache-commons-logging b)使用 slf4j 导入 slf4j-api-1.6.1.jar 并导入 slf4j-nop-1.6.1.jar c)使用 log4j 导入 slf4j-api-1.6.1.ja、log4j-1.2.16.jar、slf4j-log4j12-1.6.1.jar 5.搭建 JUnit 环境 a)注意 JUnit 的 bug b)只需要导入 JUnit 下的一个 jar 包 junit-4.9b2.jar 6.Hibernate.cfg.xml:show_sql 7.Hibern
9、ate.cfg.xml:format_sql 8.表明和类名不同,对表名进行配置 a)Annotation:table b)Xml table 属性 9.字段名和属性相同 a)默认为basic b)Xml 中不用写 column 10.字段名和属性名不同 a)annotation:column b)Xml 用 column 属性 11.不需要 persistence 的字段 a)annotation:transient 整行按来复制当前焦点所在的行移动整行按来移动当前焦点所在的行调试调试表名不能和的名相同如果使用它和使用的一定不要是同一个否则会出现的错误经验先建表在公司中一般先建表但是在建表的
10、过程中不一定能和实体类中的并构建实体类现在是做实验一般会让他自动生成因为实验式不需要对表调优的使用连接数据库一般连接数据库使用但在中没有的数据源解方法使用进行连接学习必备欢迎下载菜单的设置截图视频秒视频截图设置截图设置完成后测试设置问题可以看视频分钟视频课程内容的配置的配置原理模拟什么是以及为什么要有常见的框架了解基础配置重点核心接口介绍重点对象的三种状态了解生成策略重点掌握关系映射重点查询在基础上继续完善性能优化重点补充话题学习必备 欢迎下载 b)Xml 不写 12.映射日期与时间类型,指定时间精度 a)annotation:temporal b)Xml 中使用 type=date、time
11、 等 13.映射枚举类型 a)Annotation:Enumerated b)Xml 麻烦 14.字段映射的位置(field 或者 get 方法)a)Best practice 保持 field 和 get set 方法的一致 15.Lob 16.课外:CLOB、BLOB 数据类型的存储 17.课外:hibernate 自定义数据类型 18.Hibernate 类型 5.ID 生成策略 1.对应项目:hibernate_0400_ID 2.注意:a)我们观察 hibernate 生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,如 index 等),而是为了明白我们建立什么样的表和实
12、体类映射 3.Xml 生成 Id a)Generator b)常用四个:native identity sequence uuid 4.GeneratedValude a)自定义 ID b)AUTO i.默认对 mysql 使用 auto_increment ii.对 oracle 使用 hibernate_sequence(名称固定)c)IDENTITY d)SEQUENCE i.SequenceGenerator e)TABLE i.TableGenerator 5.FAQ a)用junit 测试时HibernateSessionFactory 初始化异常不提示.疑似一个bug b)用 m
13、ain 来测试 6.联合主键 a)Xml:composite-id i.为什么要重写 equals()和 hashCode()方法,对象使用 equals()方法进行比较 来区分两个 pk 不同 同于数据库中的联合主键 两个联合起来是不同的 可以用 equals()的返回值来模拟 ii.为什么要实现 serializable 接口 因为当转存到虚拟内存中 的时候需要序列化对象。整行按来复制当前焦点所在的行移动整行按来移动当前焦点所在的行调试调试表名不能和的名相同如果使用它和使用的一定不要是同一个否则会出现的错误经验先建表在公司中一般先建表但是在建表的过程中不一定能和实体类中的并构建实体类现在是
14、做实验一般会让他自动生成因为实验式不需要对表调优的使用连接数据库一般连接数据库使用但在中没有的数据源解方法使用进行连接学习必备欢迎下载菜单的设置截图视频秒视频截图设置截图设置完成后测试设置问题可以看视频分钟视频课程内容的配置的配置原理模拟什么是以及为什么要有常见的框架了解基础配置重点核心接口介绍重点对象的三种状态了解生成策略重点掌握关系映射重点查询在基础上继续完善性能优化重点补充话题学习必备 欢迎下载 b)annotation i.Embedable Id ii.EmbeddedId iii.Id IdClass iv.(hibernate3.6 貌似和以前的版本有区别)6.核心开发接口介绍
15、1.Hibernate_0500_CoreAPI 2.HibernateAPI 文档需要单独下载 3.Configuration a)Configuration b)进行配置信息的管理 c)用来产生 SessionFactory d)可以在 configure()方法中指定 hibernate 配置文件 e)只需关注一个方法即:builtSesionFactory()4.SchemaExport a)用来在程序中生成建表语句,这时候不用在 hibernat.cfg.xml 配置.hbm2ddl 属性 b)使用 SchemaExport 的 create(,)方法 5.SessionFactor
16、y a)用来产生和管理 session b)通常情况下每个应用只需要一个 SessionFactory c)除非要访问多个数据库的情况 d)注意 getCurrentSession()和 openSession()的区别 getCurrentSession()表示从现有的上下文中找,如果有 Session 则取出用 如果没有则创建一个Session。在 调 用session.getTmit()之 前 无 论 用getCurrentSession()调用多少次 得到的都是同一个 session 但当 commit()之后,得到的就不是同一个 session 啦。openSession()永远是新
17、建一个Session。getCurrentSession()的作用可以在用户操作中 来实现同一个事务的处理,即在应用程序中界定事务边界 i.openSession()需要 close()ii.getCurrentSession()事务提交自动 cloase iii.openSession()和 getCurrentSession()不 能 混 用 如 果 先 用openSession()得到一个session 再用getCurrentSession()来获得session 这两个 session不是同一个 session 因为 session只是一个接口 openSession()返回的 se
18、ssion 的实现 和 getCurrentSession()返回的session的实现不同 iv.上下文的界定 1.Hibernate.current_session_context_class 有四个取值 jta thread managed custom.Class a)Jta(Java transaction api)分布式事务管理 用 jta 进行事务管理需要服务器的支持,tomcat 现在不支持 jboss 支持 整行按来复制当前焦点所在的行移动整行按来移动当前焦点所在的行调试调试表名不能和的名相同如果使用它和使用的一定不要是同一个否则会出现的错误经验先建表在公司中一般先建表但是在
19、建表的过程中不一定能和实体类中的并构建实体类现在是做实验一般会让他自动生成因为实验式不需要对表调优的使用连接数据库一般连接数据库使用但在中没有的数据源解方法使用进行连接学习必备欢迎下载菜单的设置截图视频秒视频截图设置截图设置完成后测试设置问题可以看视频分钟视频课程内容的配置的配置原理模拟什么是以及为什么要有常见的框架了解基础配置重点核心接口介绍重点对象的三种状态了解生成策略重点掌握关系映射重点查询在基础上继续完善性能优化重点补充话题学习必备 欢迎下载 tomcat 可以借助第三方类库 来提供支持 如 spring 的类库 b)Thread 表示从当前的线程中找 thread 使用 connec
20、tion 来管理事务 c)视频:27(7 分钟截图)e)视频:26(22 分钟截图)6.Session a)管理一个数据库的任务单元 b)方法(CRUD)i.Save()ii.Delete()iii.Load()iv.Get()v.Get()与 load()的区别 1.不存在对应记录时表现不一样 2.Load 返回的是代理对象,等到真正用到对象的内容时才发出 sql语句 3.Get 直接从数据库加载,不会延迟 vi.Update()1.用来更新 detached 的对象,更新完成后变为 persistent 对象。2.更新 transient 对象会报错。3.更新自己设置 id 的 trans
21、ient 对象可以(数据库中用对应记录)4.Persistent 状态的对象只要对字段进行设置就会更新(因为在事务提交之前,session 会检查缓存中的对象是否发生过修改,如果发生过修改,就会执行 update;但是它更新的仍是所有的字段,而不是,修改的字段)5.更新部分更改的字段 a)Xml 设定 property 标签的 update 属性,annotation 设定column 的 updatable属性,不过这种方式很少用,因为不灵活(一般不用)b)使用xml 中 dynamic-update,jpa 1.0 annotation 没有对应的属性,hibernate 扩展?(有一个,
22、可以一试(老师没做通))i.同一个 session可以,跨 session不行,不过可以用merge()(不重要)。ii.原理:同一个 session 的情况下,因为是 persistent 状态,对象在缓存中也有一个拷贝,对对象的某个字段进行设置后,在更新的时候,可以对对象的更改字段进行记录,做到只更新更改的字段;跨 session 时,开始是 对象不是在 persistent 状态,没法记录那个字段是否被修改啦,所以也是更新所有的字段。iii.Merge()的原理:merge 会检查那个字段更改啦,但是它确定更改的方法是,先进行一次 select 进行比对,然后再更新只更改的字段。c)使用
23、 HQL(EJBQL)语句(建议)6.整行按来复制当前焦点所在的行移动整行按来移动当前焦点所在的行调试调试表名不能和的名相同如果使用它和使用的一定不要是同一个否则会出现的错误经验先建表在公司中一般先建表但是在建表的过程中不一定能和实体类中的并构建实体类现在是做实验一般会让他自动生成因为实验式不需要对表调优的使用连接数据库一般连接数据库使用但在中没有的数据源解方法使用进行连接学习必备欢迎下载菜单的设置截图视频秒视频截图设置截图设置完成后测试设置问题可以看视频分钟视频课程内容的配置的配置原理模拟什么是以及为什么要有常见的框架了解基础配置重点核心接口介绍重点对象的三种状态了解生成策略重点掌握关系映射
24、重点查询在基础上继续完善性能优化重点补充话题学习必备 欢迎下载 vii.saveOrUpdate()(此方法相当复杂指的是:它会在一些情况下执行save 而在另一些情况下执行 update)viii.Find()已过时 ix.Clear()方法 1.无论是 get()还是 load()都会首先查找缓存(一级缓存),如果没有,才会到数据库去找,调用 clear()方法可以强制清除 session缓存 2.Load()在同一个 session 中,如果对同一个数据 load 两次 只会发出一条 select 语句(因为第二次数据在缓存中存在);但是在这两条语句中间 调用 clear 就会发出两条语
25、句 x.Flush()方法 1.可以强制进行从内存到数据库的同步 2.flushMode 属性 可以调用 session 的 setFlushMode()方法设置 session 的 flushMode;这个一般用不着,可以在性能调节是进行设置 xi.c)7.Query 接口 a)参考 hibernate 查询内容 b)D 8.Note:a)Hibernate 中涉及很多非常非常细节的区别,但在实际应用中应的极少,请大家先享受写项目的乐趣,再来探讨这些问题 i.比如 save()和 presist()的区别 ii.如 merge()和 evict()的区别 iii.比如 refresh()lo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate 学习 笔记 计算机 Java
限制150内