使用annotation 的作用
使用了annotation 后可以自动不用写 *.hbm.xml 的配置文件。方便省事。
使用annotation 的相关 jar 文件
在使用annotation 时要用到的 jar 文件:
相关文件 |
对应的jar 文件 |
hibernate-annotations-3.4.0.GA.zip |
hibernate-annotations.jar、 lib/ejb3-persistence.jar 、 lib/hibernate-commons-annotations.jar 、 lib/slf4j-api.jar |
hibernate-distribution-3.3.2.GA-dist.zip |
hibernate3.jar、 lib/required/*.jar |
数据库连接 |
mysql-connector-java-5.1.10-bin.jar |
使用annotation 的一个简单实例
要让一个对象(类)使用annotation 应该在一个类的头部加上: @Entity, 如
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; // 加了Entity 才会使用到 annotation , table 意为创建的表名为: t_student @Entity @Table (name= "t_student" ) public class Student { private Integer id ; private String name ; // 让该字段为id ,即设置其为主键,自动增加 @Id @GeneratedValue(strategy=GenerationType.AUTO) //修改字段的长度 为5 @Column (length=5) public Integer get Id () { return i d ; } // 设置字段名为name, 修改字段的长度 为20 @Column (name= "name" ,length=20) public String get N ame() { return name ; } public void set Id ( Integer id ) { this . id = id ; } public void set Name (String name ) { this . name = name ; } }
|
以上便写好了一个简单的对象,将会创建一张名为:t_student 的数据表,有一个主键 id 和一个 name 这样两个字段。要使这样一个对象能自动的生成一张数据表还应该在 src 目录下的 hibernate.cfg.xml 配置文件中加入:
< mapping class = "org.zsl.exam.model.Student" /> <!-- 包名加对象名 -->
Hibernate.cfg.xml配置文件
Hibernate.cfg.xml配置文件内容如下:
<? xml version = '1.0' encoding = 'utf-8' ?> <! DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
< hibernate-configuration > < session-factory >
<!-- Database connection settings --> < property name = "connection.driver_class" > com.mysql.jdbc.Driver </ property > < property name = "connection.url" > jdbc:mysql://localhost:3306/exam </ property > < property name = "connection.username" > exam </ property > < property name = "connection.password" > exam123 </ property > < property name = "connection.useUnicode" > true </ property > < property name = "connection.characterEncoding" > UTF-8 </ property >
<!-- 数据库方言,这里为MySQL 的数据库 --> < property name = "dialect" > org.hibernate.dialect.MySQLDialect </ property >
<!-- Disable the second-level cache --> < property name = "cache.provider_class" > org.hibernate.cache.NoCacheProvider </ property >
<!-- 是否显示sql 语句 --> < property name = "show_sql" > true </ property > <!-- 自动更新数据库 --> < property name = "hbm2ddl.auto" > update </ property > < mapping class = "org.zsl.exam.model.Student" /> </ session-factory > </ hibernate-configuration > |
Hibernate annotation的一对多
在多的那方加入:
………… private Teacher teacher ; //说明是多对一 @ManyToOne //在本表里加入外键的字段名为: tea_id @ JoinColumn (name= "tea_id" ) public Teacher getTeacher() { return teacher ; } ………… |
在一的那方加入:
………… private Set<Student> students ; //说明是一对多,mappedBy指的是在多方对象里指明外键的属性名 //targetEntity表示多方对象 @OneToMany (mappedBy= "teacher" ,targetEntity=Student. class ) public Set<Student> getStudents() { return students ; } ………… |
Annotation的继承
要使一个对象的annotation 被其它对象所继承很简单,只用在父类的头部加上:
@MappedSuperclass
如:
@MappedSuperclass public class BaseEntity {
private Integer id ;
@Id @GeneratedValue (strategy=GenerationType. AUTO ) @Column (length=5) public Integer getId() { return id ; }
public void setId(Integer id) { this . id = id; } } |
这样只要继承了BaseEntity 的子类都会具有一个主键 id