1、马士兵hibernate学习资料大全马士兵hibernate学习笔记 课程内容 61 HelloWorld 62 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping 63 常见的0/R框架(了解) 64 hibernate基础配置(重点) 65 ID生成策略(重点 AUTO) 66 Hibernate核心开发接口介绍(重点) 67 对象的三种状态(了解) 68 关系映射(重点) 69 Hibernate査询(HQL) 610 在Struts基础上继续完善BBS200 611 性能优化(重点) 612 补充话题 6风格 61 先脉络,后细节 62 先
2、操作,后原理 63 重Annotation,轻xml配置文件 6资源 61 http:/www. hibernate.org 62 hibernate zh_CN文档 63 hibernate annotation references 6环境准备 61 下载hibernate-distribution-3.3.2.GA-dist 62 下载hibernate-annotations-31.4.0.GA 63 注意阅读hibernate compatibility matrix(hibernate 网站download) 64 下载slf4jl.5.8 7Hibernate HelloWorl
3、d 71 建立新java 项目,名为hibernate_0100_HelloWorld 72 学习建User-library-hibernate,并加入相应的jar包 73 引入mysql的JDBC驱动包 74 在mysql中建立对应的数据库以及表 75 建立hibernate 配置文件hibernate.cfg.xml 76 建立Student 类 77 建立Student 映射文件 Student.hbm.xml 78 将映射文件加入到hibernate.cfg.xml中 79 写测试类Main,在Main中对Student对象进行直接的存储测试 710 FAQ: 711 Note: 71
4、2 建立能力 8建立 Annotation 版本的 HelloWorld 81 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO); 82 创建Teacher 类 83 在hibernate lib 中加入annotation的jar包 84 参考Annotaion文档建立对应的注解 85 在hibernate.cfg.xml中建立映射mapping class:./ 86 参考文裆进行测试(注意文裆中缺少configure()的小bug) 87 FAQ: 不给提示
5、8What is and Why 0/R Mapping 81 JDBC操作数据库很繁琐 82 Sql语句编写并不是面向对象的 83 可以在对象和关系表之间建立关联来简化编程 84 0/R Mapping 简化编程 85 0/R Mapping跨越数据库平台 86 Hibernate_0200_OR_Mapping_Simulation 80/R Mapping Frameworks 81 hibernate 82 toplink 93 jdo 94 JPA 9Hibernate基础配置 91 对应项目:Hibernate_0300_BasicConfiguration 92 介绍MSQL的图
6、形化客户端 93 hibernate.cfg.xml: hbni2ddl.auto 94 搭建日志环境并配置显示DDL语句 95 搭建jUnit环境 96 hibernate.cfg.xml:show_sql 97 hibernate.cfg.xml:format_sql 98 表名和类名不同,对表名进行配置 99 字段名和属性相同 910 字段名和属性名不同 911 不需要psersistence的字段(不用列) 912 映射日期与时间类型,指定时间精度 913 映射枚举类型( 比较少用) 1014 字段映射的位置(field或者get方法) 1015 Lob 1016 课外:CLOBBLO
7、B类型的数据存取 1017 课外:Hibernate自定义数据类型 1018 hibernate 类型 10ID生成策略 101 对应项目:hibernate_0400_ID 102 注意: 103 xml生成id 104 注解方式:GeneratedValue 105 FAQ; 116 联合主键 11核心幵发接口介绍 131 hibernate_0500_CoreAPI 132 Hibernate API文档需要单独下载 133 Configuration 134 SessoinFactor 135 Session 136 SchemaExport (自动建表) 147 Query 接口 1
8、48 Note: 14三种对象状态 151 上一个 project 152 三种状态的区分关键在于 153 三种状态: 154 对这三种状态需要关注的问题是在该状态下如果进行数据库的操作会发生什么结果,比 如改变属性的 15关系映射(重要) 16对象之间的关系 161 这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于 162 简化问题: 163 对一 164 对多 165 组件映射 16一对一关联 171 一对一单向外键关联 172 一对一双向外键关联 173 一对一单向主键关联(不重要) 184 一对一双向主键关联(不重要) 185 联合主键 18组件
9、映射 181 项目:hibernate_1100_component 182 对象关系:一个对象是另外一个对象的一部分 183 数据库表:一张表 184 annotation: Embeddable Embbeded 185 xml: 使用HQL. EJBQL(JPQL 1.0) QBC(Query By Criteria) QBE(Query By Example) 272 总结:QL应该和导航关系结合,共同为査询提供服务。 27性能优化 271 注意session.clear()的运用,尤其在不断分页循环的时候 272 1+N问题 (典型的面试题) (详见hibernate_2800_Hi
10、bernate_1+N项目) 273 list和iterate不同之处(/主要为了面试 详见hibernate_2900_Hibernate_list_iterate) 274 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 275 事务并发处理(面试的意义更大) 28课程内容1 HelloWorlda) Xmlb) annotation2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping3 常见的0/R框架(了解)4 hibernate基础配置(重点)5 ID生成策略
11、(重点 AUTO) 6 Hibernate核心开发接口介绍(重点)7 对象的三种状态(了解)8 关系映射(重点)9 Hibernate査询(HQL) 10 在Struts基础上继续完善BBS20011 性能优化(重点)12 补充话题风格1 先脉络,后细节2 先操作,后原理3 重Annotation,轻xml配置文件a) JPAb) hibernate extension资源1 http:/www. hibernate.org2 hibernate zh_CN文档3 hibernate annotation references环境准备1 下载hibernate-distribution-3.3
12、.2.GA-dist2 下载hibernate-annotations-31.4.0.GA3 注意阅读hibernate compatibility matrix(hibernate 网站download)4 下载slf4jl.5.8Hibernate HelloWorld1 建立新java 项目,名为hibernate_0100_HelloWorld2 学习建User-library-hibernate,并加入相应的jar包a) 项目右键-buildpath-configure build path-add libraryb) 选择User-library,在其中新建 libraray,命名
13、为 hibernatec) 在该library中加入hibernate所需jar包i. hibernate coreii. /requirediii. slf-nop jar3 引入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.xmla) 从参考文档中copyb) 修改对应的数据库
14、连接c) 注释掉暂时用不上的内容6 建立Student 类7 建立Student 映射文件 Student.hbm.xmla) 参考文档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) 重
15、要的是:i. 要建立自己动手查一手文档的信心ii. 还有建立自己动手查一手文档的习惯!iii. 主动学习,砍弃被动接受灌输的习惯!12 建立能力a) 错误读完整b) 读昔误的关键行c) 排除法d) 比较法e) google建立 Annotation 版本的 HelloWorld1 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO);2 创建Teacher 类3 在hibernate lib 中加入annotation的jar包a) hibernate annotaio
16、n jarb) ejb3 persistence jarc) hibernate common-annotations.jard) 注意文裆中没有提到hibernate-common-annotations.jar 文件4 参考Annotaion文档建立对应的注解5 在hibernate.cfg.xml中建立映射mapping class:./6 参考文裆进行测试(注意文裆中缺少configure()的小bug) 7 FAQ: 不给提示a) 配置eclipse属性信息content assist-activation-加上What is and Why 0/R Mapping1 JDBC操作数
17、据库很繁琐2 Sql语句编写并不是面向对象的3 可以在对象和关系表之间建立关联来简化编程4 0/R Mapping 简化编程5 0/R Mapping跨越数据库平台6 Hibernate_0200_OR_Mapping_Simulation0/R Mapping Frameworks1 hibernate2 toplink3 jdo4 JPA 接口(hibernate和其他是他的实现)a) 意愿统一天下Hibernate基础配置1 对应项目:Hibernate_0300_BasicConfiguration2 介绍MSQL的图形化客户端3 hibernate.cfg.xml: hbmddl.a
18、uto:create、update。a) 先建表还是先建实体类先建表 一般先表后类4 搭建日志环境并配置显示DDL语句a) slf4j与log4j的关系:slf4j像是一个大管家,可以管理许多的日志框架,log4j是其中之一b) 加入slf4j-log4j.jar,加入 log4j 的 jar 包,去掉 slf4-nop.jarc) 从hibernate/project/etc 目录 copy log4j.propertiesd) 査询hibernate文裆,日志部分,调整日志的输出策略5 搭建jUnit环境a) 需要注意jUnit的Bug6 hibernate.cfg.xml:show_sq
19、l 是否输出SQL语句7 hibernate.cfg.xml:format_sql 格式化SQL语句,美化SQL语句 true8 表名和类名不同,对表名进行配置a) Annotation: Tableb) xml:自己査询9 字段名和属性相同a) 不用写column 与默认的Basic效果一样b) Xml中不用写 column10 字段名和属性名不同a) Annotation: Columnb) xml:自己査询11 不需要psersistence的字段(不用实例)a) Annotation:Transient 定义不写入数据库,属性透明b) xml不写12 映射日期与时间类型,指定时间精度a
20、) 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) x
21、ml:麻烦14 字段映射的位置(field或者get方法)a) best practice:保持 field(变量定义) 和 get set 方法的一致15 Lob16 课外:CLOBBLOB类型的数据存取17 课外:Hibernate自定义数据类型18 hibernate 类型ID生成策略1 对应项目:hibernate_0400_ID2 注意:a) 我们观察hibernate生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,比如index等)而是为了明白我们应该建立什么样的表和实体类映射3 xml生成ida) generator b) 常用四个:native identity s
22、equence uuid4 注解方式:GeneratedValuea) 自定义IDb) AUTO(直接写 GeneratedValue 相当如native) (GeneratedValue(strategy=GenerationType.AUTO)i. 默认:对 MySQL,使用auto_incrementii. 对 Oracle使用hibernate_sequence(名称固定)c) IDENTITY(GeneratedValue(strategy=GenerationType.IDENTITY)d) SEQUENCE(GeneratedValue(strategy=GenerationTy
23、pe.SEQUENCE)i. SequenceGenerator(可自定义在数据库生成指定的sequence名) Id/在GeneratedValue中增加 generator=teacherSEQGeneratedValue(strategy=GenerationType.SEQUENCE,generator=teacherSEQ)/teacherSEQ为SequenceGenerator的标识名/teacherSEQ_DB为指定到数据库生成的Sequence名SequenceGenerator(name=teacherSEQ, sequenceName=teacherSEQ_DB) pub
24、lic int getId() return id;e) TABLE (可以忘记)i. TableGeneratorTableGenerator(name=teacherID, /被调用的TABLE名字 table=teacherID_DB, /数据库建立的表名 pkColumnName=key_value, pkColumnValue=pk_value, valueColumnName=teacher, /pkColumnValue对应类名 allocationSize=1 /pkColumnValue对应类名)GeneratedValue(strategy=GenerationType.T
25、ABLE,generator= teacherID ) 注:如果使用注解方式的uuid 如下: IdGeneratedValue(generator=teacherUUID)GenericGenerator(name=teacherUUID, strategy=uuid) 1.通过注解方式生成一个generator(放在类名称上面) GenericGenerator(name=idGenerator, strategy=uuid) 2.主键生成器 GeneratedValue(generator=idGenerator)5 FAQ;a) 用Junit测试时Hibernate Session F
26、actory初始化异常不提示.疑似一个bugb) 用main来做测试6 联合主键a) Xml方式: composite-idi. 将联合主键的属性提取出来,重新编写一个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方法Overridepublic 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;Overridepublic int hashCode() return this.name.hashCod
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1