1. 整体思路
在java的pojo类中存在集合类的对象,那么集合中的元素必须要有一个地方存储,这个地方显然就是另外一张表。而且必须和这张集合表相关联,所以集合表中必然会存在一个字段和pojo映射表中主键关联。
2. Set映射
2.1 pojo中属性
private Set<String> addressSet = new HashSet<String>();
2.2 映射文件
<set name="addressSet" table="user_address_set">
<key column="userId"/>
<element type="string" column="address"/>
</set>
说明:
1) 因为属性是Set类型,所以使用set标签
2) 需要设置集合表,表名在table中设置
3) key用来指定和主表主键相关联的字段
4)element标签用来指定集合中的值用哪个字段存储,必须指定类型
2.3 生成的表
3. List映射
3.1 pojo中属性
private List<String> addrList = new ArrayList<String>();
3.2 映射文件
<list name="addrList" table="user_addr_list">
<key column="userId"/>
<index column="idx"/>
<element column="address" type="string"/>
</list>
说明:
1) 因为属性是List类型,所以使用list标签
2) 需要设置集合表,表名在table中设置
3) key用来指定和主表主键相关联的字段
4)element标签用来指定集合中的值用哪个字段存储,必须指定类型
5)因为List有序,需要保存顺序,所以必须要添加index字段,用index标签来指定下标的字段
3.3 生成的表
4. Map映射
4.1 pojo中的属性
private Map<String,String> addrMap = new HashMap<String, String>();
4.2 映射文件
<map name="addrMap" table="addr_map">
<key column="userId"/>
<map-key column="postCode" type="string"/>
<element type="string" column="addr"></element>
</map>
说明:
1) 因为属性是Map类型,所以使用map标签
2) 需要设置集合表,表名在table中设置
3) key用来指定和主表主键相关联的字段
4)element标签用来指定集合中的值用哪个字段存储,必须指定类型
5)map-key用来指定Map中的key对应的字段
4.3 生成的表
4. bag映射
4.1 说明
因为:Set——无序、无重复 List——有序、有重复,所以需要一个无序、有重复的集合来存储数据
4.2 pojo中属性
private List<String> addrBag = new ArrayList<String>();
因为java中没有bag集合类型,所以使用List来代替
4.3 映射文件
<bag name="addrBag" table="addr_bag">
<key column="uid"/>
<element type="string" column="addr"/>
</bag>
说明:因为bag无序,所以映射文件基本和set一致
4.4 生成的表
5. 总结
1)不管使用什么集合,都需要另外一张表来存储集合中数据
2)使用什么集合,标签就为那种集合的名称(如List对应标签就为list)
3)因为集合表一定需要与主表关联,所以集合标签中一定有一个key,用来指定集合表中和主表关联的字段
4)element元素用来存储集合中数据,需要指定类型