关于实体关系的映射,常用三种,多对一,一对多和多对多,模板如下。
实体映射的书写是有一定的技巧的,下面以一个权限的实体为例,与大家一起分享。
<span style="font-size:18px;">package cn.itcast.oa.domain;
import java.util.HashSet;
import java.util.Set;
/**
* 权限
* @author David
*
*/
public class Privilege {
private Long id;
private String url;
private String name; //权限名称
private Set<Role> roles = new HashSet<Role>();
private Privilege parent;//上级权限
private Set<Privilege> children = new HashSet<Privilege>();//下级权限
public Privilege() {
}
public Privilege(String url, String name, Privilege parent) {
super();
this.url = url;
this.name = name;
this.parent = parent;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
public Privilege getParent() {
return parent;
}
public void setParent(Privilege parent) {
this.parent = parent;
}
public Set<Privilege> getChildren() {
return children;
}
public void setChildren(Set<Privilege> children) {
this.children = children;
}
}
</span>
从上面代码可以看出,权限中有上级和下级,关系是一对多。
下面展示写代码的技巧。
1、写注释,
格式为?属性,表达的是本对象与?与?关系。
<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 -->
<!-- children属性,本类与Privilege(下级)的一对多 --></span>
2、拷模板
将上面对应的模板复制过来。
<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 -->
<many-to-one name="" class="" column=""></many-to-one>
<!-- children属性,本类与Privilege(下级)的一对多 -->
<set name="">
<key column=""></key>
<one-to-many class=""/>
</set></span>
3、填空
name属性:属性名(注释中的第1问号)
class属性:关联的实体类型(注释中的第2个问号)
column属性:<many-to-one column="..">:一般可以写成属性名加Id后缀,如属性为department,则column值写成departmentId.一对多种的<key column="..">:从关联的对方(对方是多对一)映射中把column值拷贝过来。
<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 -->
<many-to-one name="parent" class="Privilege" column="parentId"></many-to-one>
<!-- children属性,本类与Privilege(下级)的一对多 -->
<set name="children">
<key column="parentId"></key>
<one-to-many class="Privilege"/>
</set></span>
从实体代码中还可以看出, 实体Privilege和Role实体是多对多的关系。实体映射与上面同理,不再展示详细过程,只说不同之处。
多对多的关系在填空的时候遵守规则:多对多种的<key column="...">:一般可以写成本对象的名加Id后缀,如本对象名为User,则写成userId。多对多种的<many-to-many column="...">:一般可以写为关联对象的名称加Id后缀。
<span style="font-size:18px;"><!-- roles属性,本类与Role的多对多 -->
<set name="roles" table="itcast_role_privilege">
<key column="privilegeId"></key>
<many-to-many class="Role" column="roleId"></many-to-many>
</set></span>
到这里大家就对其的映射技巧有所了解了吧,多实践,将其熟练的运用,想忘都忘不了。