java hibernate标签_hibernate是通过什么标签实现实体类和表的映射的

展开全部

10.1 实体类的映射

从Java的角度讲,实体类就是普通的Java封装类(有人32313133353236313431303231363533e4b893e5b19e31333361306339称为POJO有人称为VO)。仅从实体类中的代码信息,Hibernate并不能得知该实体类对应哪个数据表,因此还需要以某种方式配置一下。常用的方式有*.hbm.xml文件配置与@注解配置两种。

hbm.xml文件就是普通的xml文件,hbm为Hibernate Mapping的缩写,这样从文件名上就能判断该文件为Hibernate实体类配置文件。在JPA出现之前,Hibernate都使用hbm.xml文件配置。JPA出现后,推荐使用JPA的@注解配置,因为对于所有的ORM框架,@注解都是通用的。

10.1.1 使用@注解配置实体类

实体类一般有ID、普通属性、集合属性等,分别对应数据库的主键、普通列、外键。@注解配置中,实体类用@Entity注解,用@Table指定对应的数据表,用@Id配置主键,用@Column配置普通属性,用@OneToMany、@ManyToOne、@OneToOne、@ManyToMany配置实体间关系等。实体类之间的关于在后面的章节中会做详细介绍。下面编写一个UsersVo类,在该类中使用@注解配置实体类的映射,UsersVo类的代码如下:

package com.cn.vo;

import javax.persistence.*;

@Entity // 注解Entity表示该类纳入Hibernate管理,能够被持久化

@Table(name = "users") // 指定该实体类对应的数据库表名

public class UsersVo {

// Fields

@Id // 指定该列为主键。

// 这个注解用来表示主键类型, auto为数据库自增长类型

@GeneratedValue(strategy = GenerationType.AUTO)

private int id;

@Column(name = "name") //指定变量对应的数据库表的列为"name"

private String name;

@Column(name = "age")//指定变量对应的数据库表的列为"age"

private int age;

@Column(name = "tel")//指定变量对应的数据库表的列为"tel"

private String tel;

@Column(name = "address")//指定变量对应的数据库表的列为"address"

private String address;

// Constructors

public UsersVo() {

}

public UsersVo(int id) {

this.id = id;

}

public UsersVo(int id, String name, int age, String tel,

String address) {

this.id = id;

this.name = name;

this.age = age;

this.tel = tel;

this.address = address;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

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 getTel() {

return tel;

}

public void setTel(String tel) {

this.tel = tel;

}

}

上述代码中,所有的@注解都是javax.persistence.*下的,而不是org.hibernate.*下的。javax.persistence.*下的注解为JPA规范规定的注解,用于标注实体类与数据库的映射关系,而org.hibernate.*下的注解仅用于补充,当某个功能JPA暂时不支持而Hibernate支持时使用。

10.1.2 使用XML文件配置实体类映射

多个实体类可以配置在一个XML文件中。Hibernate推荐XML映射文件和实体类同名,便于阅读和维护,比如UsersVo.java文件对应UsersVo. hbm.xml文件。XML文件一般以“.hbm.xml”结尾,便于辨认,也可以直接用“.xml”结尾。例如UsersVo类的映射文件可取名为“UsersVo.hbm.xml”或者“UsersVo.xml”。使用XML文件配置实体类映射的时候,实体类和普通的实体类一样,和数据库的映射关系放在XML文件中,UsersVo. hbm.xml文件代码如下:

/p>

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

代码中的DOCTYPE指定的dtd文件位于hibernate.jar中。dtd文件为XML格式验证文件,Hibernate使用该dtd来验证该XML文件格式是否正确。如果hibernate.jar或者classpath中不存在该dtd文件,Hibernate会到指定的URL下载该文件。

在上述的映射文件中,中的name表示实体类的路径和名称。table="”用来指定数据库表格 catalog表示连接的数据库 lazy表示延迟加载,用来声明表的主键,中的属性name="id"表示实体类的属性id。数据库对应的字段名放在中,中的name表示表中的字段名,表示数据库表的主键类型为默认的类型,默认的类型是不自动增长类型,在中映射表中的其他字段,中的name属性值表示实体类的属性,type表示实体类属性的类型。表字段的映射放在中,name的值是字段名,length表示字段长度。

10.1.3 在hibernate.cfg.xml文件中配置实体类映射

实体类还需要配置到hibernate.cfg.xml中,以便Hibernate初始化实体类与数据库表的映射关系。如果只配置了映射关系,而没有配置到hibernate.cfg.xml中,Hibernate是无法解析实体类的,因为Hibernate无法自行判断哪些是实体类。

如果实体类是使用@注解配置的,需要用配置,而如果是用XML文件配置的,需要用配置XML配置文件。hibernate.cfg.xml文件中配置实体类映射的示例代码如下:

10.1.4 配置主键映射

实体类最好有主键列,并有对应的getter、setter方法,这是Hibernate推荐的。主键尽量使用可以为null值的类型,例如Integer、Long、String等,而不要使用int、long等。因为如果主键为null,则表示该实体类还没有保存到数据库,是一个临时状态(Transient),而int、long等原始类型则不具备该功能。

1. 使用@注解配置主键

Hibernate中用@Id声明该列为主键列,同时用@Column声明该列的列名。当列名与属性名相同时,@Column配置可省略。@GeneratedValue用于指定主键的生成策略。Hibernate支持多种逐渐生成规则,例如自增长、由某个表决定、由Sequence决定等等。如果不配置@GeneratedValue,则必须手动设置ID值。

@Id

@Column(name = "id")

// 设置主键类型, auto表示主键是自增长类型

@GeneratedValue(strategy = GenerationType.AUTO)

private Integer id;

2. XML文件中配置主键

如果使用XML配置,主键用配置,name指定实体类的主键属性,column指定数据表中的主键列名。使用嵌套的配置主键生成策略,native表示使用数据库自己的策略,在MySQL中就是自增长类型,如果不用自动增长类型,则可以用assigned,例如:

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值