使用hibernate注解的目的—-为了简化繁琐的ORM映射文件(*.hbm)的配置
JPA与Hibernate的关系
- JPA全称 Java Persistence API; JPA注解是javaee的规范与标准。
- JPA 是标准的接口,hibernate是实现,但是hibernate功能更强大,是JPA 的超集。
- hibernate通过三个组件来实现与jpa的关系;分别为hibernate-annotation hibernate-entitymanager hibernate-core组件。
一般开发中,优先考虑用JPA注解,有利于程序的移植与扩展。
hibernate注解的分类:
类级别注解(@Entity实体类 @Table @Embeddable嵌入类)
- 属性级别注解
- 映射关系注解
hibernate.cfg.xml文档的回顾:
打开数据库的用户名,密码,驱动,数据库的URL地址,使用的方言,是否在结果中显示sql语句,是否格式化sql语句,是否创建,更新..表结构,与会话有关的配置。
类级别注解
@Entity 映射实体类, 对应数据库中的表。@Entity(name=”tablename”)(name 可选,对应数据库中的一个表,若表名与实体类名相同,则可以省略)
注意:使用@entity时,要指定实体类的主键属性
写完实体类后,要将它写入hibernate.cfg.xml中 语句为<mapping class="包名.类名">
@Table(name=”“,catalog=”” ,schema=”“)
与@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息
name:可选,映射表的名称,默认表名和实体名称一致,只有在不一致的情况下才要指定表名
catalog: 表示目录, 可选,表示Catalog名称,默认为空
schema: 表示模式,可选,表示Schema名称,默认空。
schema与catalog:
描述本图:一个数据库可以包含多个目录(catalog),一个目录可以包含多个模式(schema),一个模式包含多个数据库对像
不同数据库对schema和catalog的支持度不同]
mysql不支持catalog不用显示,schema默认为数据库名称
如图显示的结果,创建的表名前有hibernate表示模式
@Embeddable
表示非实体类,所以它不会映射成一张表,但可以嵌入到另一个实体类中作为属性而存在。
实例
本人也写有代码,在diyhibernate.demo.Student