Hibernate的Annotation(注解)
【简单的配置】
User.java
package com.xing.annotation.entity;
import javax.persistence.*;
import java.util.Date;
/**
* @Entity:让当前的类被数据库所管理(注意这里导入的jar包不是Hibernate的包)
* @Table:设置在数据库中要创建的对应表的名称
*
* */
@Entity
@Table(name="t_user")
public class User {
private int id;
private String userName;
private String passWord;
private String nickName;
private Date born;
/**
* @Id:设置当前表的Id
* @GeneratedValue:表示设置当前字段为该表的唯一主键,并且为自增
* */
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
/**
* @Column:设置当前字段在数据库表中的名称
* */
@Column(name = "user_name")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Date getBorn() {
return born;
}
public void setBorn(Date born) {
this.born = born;
}
}
【将映射文件加入Hibernate.cfg.xml配置文件】
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置数据库连接驱动-->
<property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 配置打印sql -->
<property name="show_sql">true</property>
<!-- 配置 自动完成类到数据表的转换-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 加入实体类的映射文件-->
<mapping class="com.xing.annotation.entity.User"></mapping>
</session-factory>
</hibernate-configuration>
【实现简单的Many-To-One配置】
many:Student.java
package com.xing.annotation.entity;
import javax.persistence.*;
@Entity
@Table(name="t_student")
public class Student {
private int id ;
private String name ;
private String no ;
private ClassRoom classRoom ;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
/**
* @JoinColumn:在多的一方设置一的一方在数据库中的外键名称
* @ManyToOne(fetch = FetchType.LAZY) 设置它的延迟加载
* */
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "class_id")
public ClassRoom getClassRoom() {
return classRoom;
}
public void setClassRoom(ClassRoom classRoom) {
this.classRoom = classRoom;
}
}
one:ClassRoom.java
package com.xing.annotation.entity;
import com.xing.entity.*;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name="t_class_room")
public class ClassRoom {
private int id;
private String name ;
private int grade;
private Set<Student> students ;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
/**
* @OneToMany(mappedBy="classRoom"):设置由当前对象在对方的属性名称来维护关系,如果不加mappedBy它就不能知道由谁
* 来维护关系,它就会加一个中间表
* */
@OneToMany(mappedBy = "classRoom")
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
【实现简单的one-to-one】
Person.java
package com.xing.annotation.entity;
import javax.persistence.*;
@Entity
@Table(name = "t_person")
public class Person {
private int id ;
private String name ;
private IDCard card ;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne(mappedBy = "person")
public IDCard getCard() {
return card;
}
public void setCard(IDCard card) {
this.card = card;
}
}
IDCard.java
package com.xing.annotation.entity;
import javax.persistence.*;
/**
* Created by Administrator on 2016/8/3.
*/
@Entity
@Table(name="t_id_card")
public class IDCard {
private int id;
private String no ;
private Person person ;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
@OneToOne
@JoinColumn(name = "p_id")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
one-to-one:只要注意设置那方维护关系,那么将外键加载那一方,不维护关系的那一方,设置one-to-one的时候要设置mappedBy让有外键的一方来维护关系
【简单配置Many-to-many】
Admin.java
package com.xing.annotation.entity;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table
public class Admin {
private int id;
private String name;
private Set<Role> roles ;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 由我在对方的属性来维护关系
* */
@ManyToMany(mappedBy = "admins")
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
Role.java
package com.xing.annotation.entity;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name = "t_role")
public class Role {
private int id;
private String name ;
private Set<Admin> admins ;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @JoinTable:加入中间表,joinColumns:加入我在对方的外键名称,inverseJoinColumns:加入对方在我的外键名称
* */
@ManyToMany
@JoinTable(name = "t_admin_role",joinColumns = {@JoinColumn(name="rid")},inverseJoinColumns = {@JoinColumn(name = "aid")})
public Set<Admin> getAdmins() {
return admins;
}
public void setAdmins(Set<Admin> admins) {
this.admins = admins;
}
}
这里设置role来维护关系