1、12 建立能力 7建立 Annotation 版本的 HelloWorld 71 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO); 72 创建Teacher 类 73 在hibernate lib 中加入annotation的jar包 74 参考Annotaion文档建立对应的注解 75 在hibernate.cfg.xml中建立映射mapping class:./ 76 参考文裆进行测试(注意文裆中缺少configure()的小bug) 77 FAQ: 不给提示
2、 7What is and Why 0/R Mapping 71 JDBC操作数据库很繁琐 72 Sql语句编写并不是面向对象的 73 可以在对象和关系表之间建立关联来简化编程 74 0/R Mapping 简化编程 75 0/R Mapping跨越数据库平台 76 Hibernate_0200_OR_Mapping_Simulation 70/R Mapping Frameworks 71 hibernate 72 toplink 83 jdo 84 JPA 8Hibernate基础配置 81 对应项目:Hibernate_0300_BasicConfiguration 82 介绍MSQL的
3、图形化客户端 83 hibernate.cfg.xml: hbni2ddl.auto 84 搭建日志环境并配置显示DDL语句 85 搭建jUnit环境 86 hibernate.cfg.xml:show_sql 87 hibernate.cfg.xml:format_sql 88 表名和类名不同,对表名进行配置 89 字段名和属性相同 810 字段名和属性名不同 811 不需要psersistence的字段(不用列) 812 映射日期与时间类型,指定时间精度 813 映射枚举类型( 比较少用) 914 字段映射的位置(field或者get方法) 915 Lob 916 课外:CLOBBLOB类
4、型的数据存取 917 课外:Hibernate自定义数据类型 918 hibernate 类型 9ID生成策略 9hibernate_0400_ID 92 注意: 93 xml生成id 94 注解方式:GeneratedValue 95 FAQ; 106 联合主键 10核心幵发接口介绍 121 hibernate_0500_CoreAPI 122 Hibernate API文档需要单独下载 123 Configuration 124 SessoinFactor 125 Session 126 SchemaExport (自动建表) 137 Query 接口 138 Note: 13三种对象状态
5、 141 上一个 project 142 三种状态的区分关键在于 143 三种状态: 144 对这三种状态需要关注的问题是在该状态下如果进行数据库的操作会发生什么结果,比 如改变属性的 14关系映射(重要) 15对象之间的关系 151 这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于 152 简化问题: 153 对一 154 对多 155 组件映射 15一对一关联 161 一对一单向外键关联 162 一对一双向外键关联 163 一对一单向主键关联(不重要) 174 一对一双向主键关联(不重要) 175 联合主键 17组件映射 171 项目:hiberna
6、te_1100_component 172 对象关系:一个对象是另外一个对象的一部分 173 数据库表:一张表 174 annotation: Embeddable Embbeded 175 xml: 使用HQL. EJBQL(JPQL 1.0) QBC(Query By Criteria) QBE(Query By Example) 262 总结:QL应该和导航关系结合,共同为査询提供服务。性能优化 261 注意session.clear()的运用,尤其在不断分页循环的时候 262 1+N问题 (典型的面试题) (详见hibernate_2800_Hibernate_1+N项目) 263 l
7、ist和iterate不同之处(/主要为了面试 详见hibernate_2900_Hibernate_list_iterate) 264 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 265 事务并发处理(面试的意义更大) 27课程内容1 HelloWorlda) Xmlb) annotation2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping3 常见的0/R框架(了解)4 hibernate基础配置(重点)5 ID生成策略(重点 AUTO) 6 Hibernat
8、e核心开发接口介绍(重点)7 对象的三种状态(了解)8 关系映射(重点)9 Hibernate査询(HQL) 10 在Struts基础上继续完善BBS20011 性能优化(重点)12 补充话题风格1 先脉络,后细节2 先操作,后原理3 重Annotation,轻xml配置文件a) JPAb) hibernate extension资源/www. hibernate.org2 hibernate zh_CN文档3 hibernate annotation references环境准备1 下载hibernate-distribution-3.3.2.GA-dist2 下载hibernate-ann
9、otations-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,命名为 hibernatec) 在该library中加入h
10、ibernate所需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) 修改对应的数据库连接c) 注释掉暂时用不上的内容6 建立Student
11、 类7 建立Student 映射文件 Student.hbm.xmla) 参考文档8 将映射文件加入到hibernate.cfg.xml中9 写测试类Main,在Main中对Student对象进行直接的存储测试 a) 参考文挡a) 要调用 new Configuration().configure().buildSessionFactory(),而不是要省略 configure,否则会出 hibernate dialect must be set 的异常a) 请务必建立自己动手査文挡的能力b) 重要的是:i. 要建立自己动手查一手文档的信心ii. 还有建立自己动手查一手文档的习惯!iii. 主
12、动学习,砍弃被动接受灌输的习惯!12 建立能力a) 错误读完整b) 读昔误的关键行c) 排除法d) 比较法e) google建立 Annotation 版本的 HelloWorld2 创建Teacher 类3 在hibernate lib 中加入annotation的jar包a) hibernate annotaion jarb) ejb3 persistence jarc) hibernate common-annotations.jard) 注意文裆中没有提到hibernate-common-annotations.jar 文件4 参考Annotaion文档建立对应的注解./6 参考文裆进
13、行测试(注意文裆中缺少configure()的小bug) 不给提示a) 配置eclipse属性信息content assist-activation-加上What is and Why 0/R Mapping1 JDBC操作数据库很繁琐2 Sql语句编写并不是面向对象的3 可以在对象和关系表之间建立关联来简化编程4 0/R Mapping 简化编程5 0/R Mapping跨越数据库平台6 Hibernate_0200_OR_Mapping_Simulation0/R Mapping Frameworks1 hibernate2 toplink3 jdo4 JPAa) 意愿统一天下Hibern
14、ate基础配置Hibernate_0300_BasicConfiguration2 介绍MSQL的图形化客户端 hbni2ddl.autoa) 先建表还是先建实体类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)
15、 需要注意jUnit的Bugshow_sqlformat_sql property name=format_sqltrue8 表名和类名不同,对表名进行配置a) Annotation: Tableb) xml:自己査询9 字段名和属性相同a) 不用写column 与默认的Basic效果一样b) Xml中不用写 column10 字段名和属性名不同 Column11 不需要psersistence的字段(不用列)a) Annotation:Transientb) xml不写12 映射日期与时间类型,指定时间精度Temporal(参数) 参数有3种 只显示时间,只显示日期,时间日期都显示 /Tem
16、poral(TemporalType.DATE) 只显示日期 /Temporal(TemporalType.TIME) 只显示时间 /Temporal(TemporalType.TIMESTAMP) 显示日期与时间指定 type id name=id column=name type=time /class13 映射枚举类型( 比较少用)a) Enumerated Enumerated(EnumType.ORDINAL) 枚举类型按位置数,如:0,1,2 .存储 Enumerated(EnumType.STRING) 枚举类型按设定值存储麻烦14 字段映射的位置(field或者get方法)a)
17、 best practice:保持 field(变量定义) 和 get set 方法的一致15 LobCLOBBLOB类型的数据存取Hibernate自定义数据类型18 hibernate 类型ID生成策略hibernate_0400_IDa) 我们观察hibernate生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,比如index等)而是为了明白我们应该建立什么样的表和实体类映射3 xml生成ida) generator b) 常用四个:native identity sequence uuidGeneratedValuea) 自定义IDb) AUTO(直接写 Generated
18、Value 相当如native)i. 默认:对 MySQL,使用auto_incrementii. 对 Oracle使用hibernate_sequence(名称固定)c) IDENTITY(GeneratedValue(strategy=GenerationType.IDENTITY)d) SEQUENCE(GeneratedValue(strategy=GenerationType.SEQUENCE)i. SequenceGenerator(可自定义在数据库生成指定的sequence名) Id/在GeneratedValue中增加 generator=teacherSEQGenerated
19、Value(strategy=GenerationType.SEQUENCE,generator=)/为SequenceGenerator的标识名teacherSEQ_DB为指定到数据库生成的Sequence名SequenceGenerator(name=, sequenceName=) public int getId() return id;e) TABLE (可以忘记)i. TableGeneratorTableGenerator(name=teacherID, table=teacherID_DB pkColumnName=key_value pkColumnValue=pk_valu
20、e valueColumnName=teacher allocationSize=1) 注:如果使用注解方式的uuid 如下: IdGeneratedValue(generator=teacherUUIDGenericGenerator(name=, strategy=uuida) 用Junit测试时Hibernate Session Factory初始化异常不提示.疑似一个bugb) 用main来做测试6 联合主键a) Xml方式: composite-idi. 将联合主键的属性提取出来,重新编写一个pojo类(原pojo类中的id,name要删除 并新加入属性“StudentPK”) pu
21、blic 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;public int hashCode() return this.name.hashCode();iv. 联合主键生成策略XML配置方法hibernate-mappingcom.bjsxt.pojo.Studentcomposite-id name=studentPK class=com.bjsxt.pojo.StudentPKkey-property name=/key-property/composite-idagesexpr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1