Hibernate有两种方法来写映射文件,当运行Hibernate程序时,会先访问hibernate.cfg.xml配置文件读取配置文件中的信息连接数据库。然后访问映射文件的路径无论是通过注解的形式还是hbm.xml的形式。如果数据库中没有持久化类所对应的表,那么会自动生成表。
通过注解写持久化类
@Entity //告诉hibernate这是一个持久化类
@Table(name="表名")
public class User{
private int id;
private String name;
private String gender;
@Id //设置为主键
@Column(name="ID",nullable=false,precision=22,scale=0) //列名 如果不写默认就是属性名 nullable:不为空 precision有效数字 scale保留小数位
@GenericGenerator(name="gt",strategy="increment")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="gt") //设置自增长
public int getId(){
return id;
}
public void getId(int id){
this.id = id;
}
@Column
public String getName(){
return name;
}
public void setName(){
this.name = name;
}
}
这样一个简单的注解形式的持久化类就写完了,只要执行一下SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory()就能生成一张表.
Hibernate经常用到的是一对多的关系,一张表A的一条数据对应另一张表B的多条数据。A对应B就是一对多,这里A的主键为B的一个外键。一对多关系中一般会由一的那一方进行维护。举例Student Banji
@Entity
@Table(name="STUDENT")
public class Student{
private int id;
private String name;
private Banji banji;
@Id
@Column..
@GenericGenerator..
@GenericValue..
getId..
setId..
getName..
setName..
@ManyToOne(...)
@JoinColumn(name="CLASSID") //作为student的外键 列名为CLASSID
}
@Entity
@Table(name="BANJI")
public class Banji{
private int id;
private String name;
private Set<Student> students = new HashSet<Student>(0);
getId..
setId
getName
setName
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="banji") //mappedBy 由banji来进行维护
Set<Student> getStudents
void setStudents
}
一个简单的一对多的表关系就建立完成了