我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了!
第一步:写注释
格式为:?属性,表达的是本对象与?的?关系。
例:“department属性,本对象与Department的多对一”
第二步:拷模板
第三步:填空:
name属性:属性名(注释中的第1问号)
class属性:关联的实体类型(注释中的第2个问号)
column属性:
<many-to-one column="..">:一般可以写成属性名加Id后缀,如属性为department,则column值写成departmentId。
一对多中的<key column="..">:从关联的对方(对方是多对一)映射中把column值拷贝过来。
多对多中的<key column=“..”>:一般可以写成本对象的名加Id后缀,如本对象名为User,则写为userId。
多对多中的<many-to-many column=“..”>:一般可以写为关联对象的名称加Id后缀。
应用实例:
用户、角色、部门之间的关系映射
用户: ID 、名称
角色:ID、角色名、描述
部门:ID、部门名
关系:
用户和角色是多对多关系,用户和部门是多对一关系,部门自关联是多对一/一对多关系
测试代码:
实体类:(写实体类时候一定不要忘记给每个属性添加setter、getter方法,否则创建不了sessionFactory等对象)
User.java
1 package com.qcf.po; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Depart { 7 8 private int id; 9 private String name; 10 //用户 11 Set<User> users=new HashSet<User>(); 12 13 //子类部门 14 Set<Depart> departs=new HashSet<Depart>(); 15 16 //父类部门 17 private Depart depart; 18 19 20 public Set<User> getUsers() { 21 return users; 22 } 23 public void setUsers(Set<User> users) { 24 this.users = users; 25 } 26 public Set<Depart> getDeparts() { 27 return departs; 28 } 29 public void setDeparts(Set<Depart> departs) { 30 this.departs = departs; 31 } 32 public Depart getDepart() { 33 return depart; 34 } 35 public void setDepart(Depart depart) { 36 this.depart = depart; 37 } 38 public int getId() { 39 return id; 40 } 41 public void setId(int id) { 42 this.id = id; 43 } 44 public String getName() { 45 return name; 46 } 47 public void setName(String name) { 48 this.name = name; 49 } 50 public Depart(int id, String name) { 51 super(); 52 this.id = id; 53 this.name = name; 54 } 55 public Depart() { 56 super(); 57 } 58 59 60 }