目录
1.注解步骤
2.类的注解
3.属性的注解
4.关系的注解
5.注解与XML
一、注解步骤
以实体类Product为例。
1.在Product.java上添加注解
package com.how2java.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "product_")
public class Product {
int id;
String name;
float price;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "price")
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
2.在hibernate.cfg.xml中写明类的路径
<mapping class="com.how2java.pojo.Product" />
二、类的注解
在类声明前面有两个注解:
@Entity 表示这是一个实体类,用于映射表
@Table(name = "product_") 表示这是一个类,映射到的表名:product_
@Entity
@Table(name = "product_")
public class Product {
int id;
String name;
float price;
}
三、属性的注解
属性注解是配置在属性对应的getter方法上的。
@Id //表示这是主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //表示自增长方式使用mysql自带的
@Column(name = "id") //表示映射到字段id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
四、关系的注解
1.多对一注解
①修改hibernate.cfg.xml 中Product和Category的映射
<mapping class="com.how2java.pojo.Product" />
<mapping class="com.how2java.pojo.Category" />
②把Category的id和name字段改为支持注解
注意:getName上并没有加上@Column(name="name"),也可以达到映射的效果。 因为getName方法默认会被认为是字段映射。除非加上了@Transient才表示不进行映射。
@Entity
@Table(name = "category_")
public class Category {
int id;
String name;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
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;
}
}
③把Product的getCategory进行多对一映射
@ManyToOne //表示多对一关系
@JoinColumn(name="cid") //表示关系字段是cid
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
2.一对多注解
在上一步的基础上增加如下注解:
给getProducts方法加上一对多注解
@OneToMany(fetch=FetchType.EAGER) //表示一对多,fetch=FetchType.EAGER 表示不进行延迟加载(FetchType.LAZY表示要进行延迟加载)
@JoinColumn(name="cid") //表示映射字段
public Set<Product> getProducts() {
return products;
}
3.多对多注解
①像上两步那样,为Product,User,Category 加上类和属性注解
②加上多对一注解ManyToOne
③加上一对多注解OneToMany
④ManyToMany
为Product的getUsers加上注解
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(
name="user_product",
joinColumns=@JoinColumn(name="pid"),
inverseJoinColumns=@JoinColumn(name="uid")
)
public Set<User> getUsers() {
return users;
}
为User的getProducts加上注解
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(
name="user_product",
joinColumns=@JoinColumn(name="uid"),
inverseJoinColumns=@JoinColumn(name="pid")
)
public Set<Product> getProducts() {
return products;
}
⑤hibernate.cfg.xml中的映射
<mapping class="com.how2java.pojo.Product" />
<mapping class="com.how2java.pojo.Category" />
<mapping class="com.how2java.pojo.User" />
网友评论