一, 为啥用注解

Hibernate注解使得原本放在xml文件中的信息直接表现在类中

为什么要用注解呢,因为注解可以简洁快速地在编写代码的同时实现映射关系

注解的好处就是语言简洁,即插即用.  坏处就是和xml相比,分散到各个class文件中,不方便修改.

用注解,需要在hibernate.cfg.xml文件中添加使用了注解的实体类的标签

<mapping class="com.test.pojo.Person"/>

二,有哪些注解,咋用?

1.先看示例代码:

@Entity
@Table(name = "person_")
public class Person {
private int id;
private String name;
private int age; @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 = "age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

这是一个简单的使用了注解进行映射的类,可以看到其中的注解所代表的含义.

类注解:

(1)@Entity: 表示这是一个实体类,用于映射一个表

(2)@Table(name="person"): 表示这个类映射的表的名字为person

属性注解:

(1)@Id: 表示这个属性是表中的主键

(2)@GeneratedValue(strategy = GenerationType.IDENTITY)表示主键的自增长方式

strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO 
      GenerationType.AUTO 主键由程序控制 
      GenerationType.TABLE 使用一个特定的数据库表格来保存主键 
      GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型) 
      GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用) 
      generator 指定生成主键使用的生成器(可能是orcale中的序列)。

(3)@Column(name="id): 表示这个属性映射到表中的"id"字段

name 可选,列名(默认值是属性名) 
      unique 可选,是否在该列上设置唯一约束(默认值false) 
      nullable 可选,是否设置该列的值可以为空(默认值false) 
      insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true) 
      updatable 可选,该列是否作为生成的update语句中的一个列(默认值true) 
      columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植) 
      table 可选,定义对应的表(默认为主表) 
      length 可选,列长度(默认值255) 
      precision 可选,列十进制精度(decimal precision)(默认值0) 
      scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)

关系注解:

(1) @ManyToOne: 表示多对一关系,  (注解下是一个对象的getter)

@JoinColumn(name="tid") 表示, 这个关系在表中对应的字段为tid

@Entity
@Table(name = "person_")
public class Person {
private int id;
private String name;
private int age;
private Teacher teacher; @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 = "age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @ManyToOne
@JoinColumn(name="tid")
public Teacher getTeacher(){
return teacher;
} public void setTeacher(Teacher teacher){
this.teacher = teacher
}
}

(2)@OneToMany(fetch=FetchType.EAGER): 一对多关系, FetchType表示是否延迟加载  (注解下是一个集合的getter)

@JoinColumn: 表示映射字段

@Entity
@Table(name = "teacher_")
public class Teacher {
private int id;
private String name;
private Set<Person> persons; @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;
} @OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="tid")
public Set<Person> getPersons(){
return persons;
} public void setPersons(Set<Person> persons){
this.persons = persons;
}
}

(3)@ManyToMany: 多对多注解

@JoinTable: 多对多关系映射的表

    @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;
}

这两个注解需要在有多对多关系的类的集合的getter中都写上.

最新文章

  1. 面试iOS遇到这种笔试《操作评估》
  2. JAVA字符串格式化String.format()的使用
  3. linux协议栈部分资料
  4. eclipse 安装scons
  5. 【暑假】[实用数据结构]UVAlive 4670 Dominating Patterns
  6. sizeof _countof _tcslen的比较
  7. c++子类继承父类的覆盖问题
  8. Hive学习之三 《Hive的表的详解和应用案例详解》
  9. 云风:我所偏爱的C语言面向对象编程范式
  10. SEQ序号与ACK序号理解总结
  11. hdu4681 String DP(2013多校第8场)
  12. ios控制器生存周期
  13. Docker教程:docker machine的配置和命令
  14. Kafka文件存储机制及partition和offset
  15. mysql 状态锁 连接数
  16. POJ 1321 - 棋盘问题 - [经典DFS]
  17. 【tp5】ThinkCMF5框架,配置使其支持不同终端PC/WAP/Wechat能加载不同配置和视图
  18. MySQL--9存储引擎
  19. python添加Windows环境变量
  20. zabbix LLD 自定义脚本

热门文章

  1. gdb cheat sheet
  2. Python异常处理总结
  3. gVim编辑器 模板篇
  4. 在Winform开发框架中对附件文件进行集中归档处理
  5. 四十二、在线预览pdf文件
  6. C语言报错:error: expected ‘while’ at end of input } ^
  7. promise源码解析
  8. Python——代码汇总
  9. 【转载】利用window.performance.timing进行性能分析
  10. EXCEL计算根据当前时间和身份证号计算准确年龄