使用hibernate注解的目的
为了简化ORM映射文件(*.hbm)繁琐的配置。
注解需要做的是映射文件要做的。
JPA与Hibernate
Java Persistence API
Java持久化接口
JPA是标准接口,HIbernate是JPA的实现,但是功能是JAP的超集。
Hibernate注解分类
- 类级别注解
- @Entity
- @Table
- @Embeddable(嵌入类)
- 属性级别注解
- 映射关系注解
一,类级别注解
1. @Entity
1. 编写Entity
设置主键,打在getter上@Id
2. class添加注解@Entity
3. 在核心配置文件中配置
<!--映射文件--> <mapping class="Entity.Student"/>
2. @Table
@Tabel(name="")和@Entity(name="")
@Table's name attribute is the actual table name. @Entitiy's name is useful if you have two @Entity classes with the same name and you need a way to differentiate them when running queries.
3. @Embeddable
表示一个非Entity类可以嵌套到另一个Entity中,作为另一个Entity的属性。
package Entity; import javax.persistence.Embeddable; /** * Created by futao on 2017/9/27. */ /** * 嵌入类,不会生成表,可能在其他表作为属性存在 */ @Embeddable public class Gf { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package Entity; /** * Created by futao on 2017/9/26. */ import javax.persistence.Column; import javax.persistence.Entity; //JPA注解 import javax.persistence.Id; import javax.persistence.Table; import java.sql.Timestamp; /** * 学生实体类 */ @Entity @Table(name = "imooc_student1") public class Student { /** * 主键 */ @Column(name = "sid") private int sid; /** * 姓名 */ @Column(name = "sname") private String sname; /** * 性别 */ @Column(name = "gender") private String gender; /** * 生日 */ @Column(name = "birthday") private Timestamp birthday; /** * 专业 */ @Column(name = "major") private String major; /** * 地址 */ private String address; //组件属性 private Gf gf; @Id public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public Gf getGf() { return gf; } public void setGf(Gf gf) { this.gf = gf; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Timestamp getBirthday() { return birthday; } public void setBirthday(Timestamp birthday) { this.birthday = birthday; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
二,属性级别注解
添加方式
1.写在属性字段上面
2.写在getter上面
@Id
@SequenceGenerator
@GeneratedValue
@Column
@Embedded
@EmbeddedId
@Lob
@Version
@Basic
@Transient
1. @Id
可以给一个Entity设置两个主键,不过要实现Serializable接口
2. @GeneratedValue
3. @GeneratedValue
4. @Column
5. @Embedded,@EmbeddedId
打在被标记为@Embeddable的嵌入类的实例上,或者getter上
6. @Transient