hibernate知识.docx
- 文档编号:28599576
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:46
- 大小:45.88KB
hibernate知识.docx
《hibernate知识.docx》由会员分享,可在线阅读,更多相关《hibernate知识.docx(46页珍藏版)》请在冰豆网上搜索。
hibernate知识
课程内容
1 HelloWorld
a) Xml
b) annotation
2 Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping
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 hibernatezh_CN文档
3 hibernateannotationreferences
环境准备
1 下载hibernate-distribution-3.3.2.GA-dist
2 下载hibernate-annotations-3.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) 参考文挡
10 FAQ:
a) 要调用newConfiguration().configure().buildSessionFactory(),而不是
要省略configure,否则会出hibernatedialectmustbeset的异常
11 Note:
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) 7 FAQ: @不给提示 a) 配置eclipse属性信息contentassist-activation--加上@ WhatisandWhy0/RMapping 1 JDBC操作数据库很繁琐 2 Sql语句编写并不是面向对象的 3 可以在对象和关系表之间建立关联来简化编程 4 0/RMapping简化编程 5 0/RMapping跨越数据库平台 6 Hibernate_0200_OR_Mapping_Simulation 0/RMappingFrameworks 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目录copylog4j.properties d) 査询hibernate文裆,日志部分,调整日志的输出策略 5 搭建jUnit环境 a)需要注意jUnit的Bug 6 hibernate.cfg.xml: show_sql 是否输出SQL语句 7 hibernate.cfg.xml: format_sql 格式化SQL语句,美化SQL语句 --格式化显示输出sql--> 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自定义数据类型 18 hibernate类型 ID生成策略 1 对应项目: hibernate_0400_ID 2 注意: a) 我们观察hibernate生成表的结构并不是为了将来就用它生成,(可能还有自己的扩展,比如index等)而是为了明白我们应该建立什么样的表和实体类映射 3 xml生成id a) generator b) 常用四个: nativeidentitysequenceuuid 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") publicintgetId(){ returnid; } 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测试时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配置方法 b) Annotation i. 前三步与Xml方式前三步一样都要建立新pojo类都要实现Serializable接口重写equals和hashCode方法. ii. 方法1在新类前写@Embeddable,在原pojo类的新属性“TercherPK”的get方法前写@ld,如下 @Embeddable publicclassTeacherPKimplementsSerializable{ privateStringid; privateStringname; …… @Entity publicclassTeacher{ privateTeacherPKteacherPK; @Id publicTeacherPKgetTeacherPK(){ returnteacherPK; } …… iii. 方法2: @EmbeddedlD(*) 新pojo类无需加注解,只需在原pojo类新属性“TercherPK”的get方法前写@EmbeddedlD即可 iv. 方法3: @Id @IdClass(*) 新pojo类无需加注解,原pojo类的id,name属性保留不变,也无需新增“TercherPK”属性。 只在id,name的get方法前都加@Id,并在原pojo类前加“@IdClass(TeacherPK).class)”,如下 @Entity @IdClass(TeacherPK.class) publicclassTeacher{ privateStringid; privateStringname; @Id publicStringgetId(){ returnid; } @Id publicStringgetName(){ returnname; } ...... 核心幵发接口介绍 1 hibernate_0500_CoreAPI 2 HibernateAPI文档需要单独下载 3 Configuration a) AnnotationConfiguration b) 进行配置信息的管理 c) 用来产生SessionFactory d) 可以在configure方法中指定hibernate配置文件 e) 只气关注一个方法即: buildSessionFactory 4 SessoinFactor a) 用来产生和管理Session b) 通常情况下每个应用只需要一个SessionFactory c) 除非要访间多个数据库的情况 d) 关注两个方法即: openSessiongetCurrentsession i. opensession每次都是新的,需要close ii. getCurrentsession从上下文找,如果有,用旧的,如果没有,建新的 1. 用途,界定事务边界 2. 事务提交自动close 3. 上下文配置可参见xml文件中 4. current_session_context_class(jta、thread常用managed、custom.Class少用) a)thread使用connection但数据库连接管理事务 b)jta(全称javatransactionapi)-java分布式事务管理(多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- hibernate 知识