在hibernate中

来源:互联网 发布:阿里云如何升级配置 编辑:程序博客网 时间:2024/06/09 15:55

  在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式以后,发现使用annotation的方式可以更简介,所以这里就简单记录下通过annotation来配置各种映射关系,在hibernate4以后已经将annotation的jar包集成进来了,如果使用hibernate3的版本就需要引入annotation的jar包。

  一、单对象操作

  @Entity  --->  如果我们当前这个bean要设置成实体对象,就需要加上Entity这个注解

  @Table(name="t_user")  ---->  设置数据库的表名

  public class User

  {

  private int id;

  private String username;

  private String password;

  private Date born;

  private Date registerDate;

  @Column(name="register_date")  --->  Column中的name属性对应了数据库的该字段名字,里面还有其他属性,例如length,nullable等等

  public Date getRegisterDate()

  {

  return registerDate;

  }

  public void setRegisterDate(Date registerDate)

  {

  this.registerDate = registerDate;

  }

  @Id  --->  定义为数据库的主键ID  (建议不要在属性上引入注解,因为属性是private的,如果引入注解会破坏其封装特性,所以建议在getter方法上加入注解)

  @GeneratedValue  ---->  ID的生成策略为自动生成

  public int getId()

  {

  return id;

  }

  public void setId(int id)

  {

  this.id = id;

  }

  ............

  }

  最后只需要在hibernate.cfg.xml文件里面将该实体类加进去即可:

  这样我们就可以写测试类来进行我们的CRUD操作了。

  二、一对多的映射(one-to-many)

  这里我们定义了两个实体类,一个是ClassRoom,一个是Student,这两者是一对多的关联关系。

  ClassRoom类:

  @Entity

  @Table(name="t_classroom")

  public class ClassRoom

  {

  private int id;

  private String className;

  private Set students;

  public ClassRoom()

  {

  students = new HashSet();

  }

  public void addStudent(Student student)

  {

  students.add(student);

  }

  @Id

  @GeneratedValue

  public int getId()

  {

  return id;

  }

  public void setId(int id)

  {

  this.id = id;

  }

  public String getClassName()

  {

  return className;

  }

  public void setClassName(String className)

  {

  this.className = className;

  }

  @OneToMany(mappedBy="room")  --->  OneToMany指定了一对多的关系,mappedBy="room"指定了由多的那一方来维护关联关系,mappedBy指的是多的一方对1的这一方的依赖的属性 ,(注意:如果没有指定由谁来维护关联关系,则系统会给我们创建一张中间表)

  @LazyCollection(LazyCollectionOption.EXTRA)  --->  LazyCollection属性设置成EXTRA指定了当如果查询数据的个数时候,只会发出一条 count(*)的语句,提高性能

  public Set getStudents()

  {

  return students;

  }

  public void setStudents(Set students)

  {

  this.students = students;

  }

  }

  

复制代码

  Student类:

  @Entity

  @Table(name="t_student")

  public class Student

  {

  private int id;

  private String name;

  private int age;

  private ClassRoom room;

0 0
原创粉丝点击