11. 集合映射-Map

集合映射-Map

键值对映射模型

Map

表结构

items_map(父表)

CREATE TABLE items_map(
    id NUMBER(10) PRIMARY KEY,
    name VARCHAR2(20)
);

images_map(子表)

不设置主键,使用两个栏位作为联合主键

CREATE TABLE images_map(
    image_name VARCHAR2(20) NOT NULL,
    filename VARCHAR2(20) NOT NULL,
    items_id NUMBER(10) REFERENCES items_map(id),
    PRIMARY KEY(items_id, image_name)
);

类结构

可以看出,Map里存储的都是值类型的键值对。适时,key为image_name,filename为filename。

public class ItemsMap{
    private Long id;
    private String name;
    private Map<String, String> images = new HashMap<String, String>();
    ......
}

映射文件

map标签:配置子表

key标签:配置子表外键

map-key:配置map中的key元素对应的栏位

element:实际上就是map-value,配置map中的值,因为这里是值类型(String),所以我们使用element元素,如果我们要使用实体类型,则应该使用one-to-many或者one-to-one元素

<class name="ItemsMap" table="ITEMS_MAP">
    ...
    <map name="images" table="IMAGES_MAP" cascade="all" inverse="false">
        <key column="ITEMS_ID" type="long"/>
        <map-key type="string" column="IMAGE_NAME"/>
        <element column="FILENAME" type="string" not-null="true"/>
    </map>
</class>

集合映射小结

  • 对象模型用的是Set类型的集合,映射文件用的是<set>元素

  • 对象模型用的是List集合,如果想维护元素的顺序,单独向表中添加一列,可用<lists>元素。如果不希望维护元素的顺序,没有单独的一列,可以使用<bag>或者<idbag>元素。

  • 对象模型是Map集合,映射文件用的是<map>元素。

  • List集合在映射时单独多了一列是为了维护元素的顺序,可以有重复值。

猜你喜欢

转载自blog.csdn.net/sinat_37976731/article/details/80657966
今日推荐