Hibernate从入门到精通(3)- 集合的使用(List、Set、Map)

来源:互联网 发布:白金数据 豆瓣 书 编辑:程序博客网 时间:2024/04/29 00:25

Hibernate使用集合类

List集合:有序无名,每个元素都有对应的下标。常用的方法有add(E e),get(int index),contains(Object o)
Set集合:一个不包含重复元素的 collection。常用的方法有add(E e),contains(Object o),iterator()。Set集合没有get方法
Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。常用方法:put(K key,V value),get(K key),keySet(),EntrySet()。
Map的几种取值方式:
 

基于映射文件

Admin.java:
package com.edu.entity;import java.io.Serializable;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;public class Admin implements Serializable {private static final long serialVersionUID = 1L;private Integer adminId;private String adminName;private Set<String> emails = new HashSet<>();private List<String> tel = new ArrayList<>();private Map<String, String> card = new HashMap<String, String>();<span style="white-space:pre"></span>//getter setter}

Admin.hbm.xml:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2015-10-28 19:11:12 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping>    <class name="com.edu.entity.Admin" table="ADMIN">        <id name="adminId" type="java.lang.Integer">            <column name="ADMIN_ID" />            <generator class="sequence" >            <param name="sequence">seq_admin_id</param>            </generator>        </id>        <property name="adminName" type="java.lang.String">            <column name="ADMIN_NAME" />        </property>        <!-- Hibernate按照主控方对象的状态的变化来同步更新数据库        inverse 默认是false即自己维持关联,自己是主控方        lazytrueSession缓存中没有该值        fetchSQL语句查询方法(内连接,子查询)        cascade级联操作         -->        <set name="emails" table="ADMIN_EMAILS" inverse="false" lazy="true" >            <key>                <column name="ADMIN_ID" />            </key>            <element type="java.lang.String">                <column name="EMAIL" />            </element>        </set>        <list name="tel" inverse="false" table="ADMIN_TEL" lazy="true">            <key>                <column name="ADMIN_ID" />            </key>            <list-index>            <column name="tel_index"></column>            </list-index>            <element type="java.lang.String">                <column name="TEL" />            </element>        </list>        <map name="card" table="ADMIN_CARD" lazy="true">            <key>                <column name="ADMIN_ID" />            </key>            <map-key type="java.lang.String">            <column name="CARD_NO"></column>            </map-key>            <element type="java.lang.String">                <column name="CARD_PWD" />            </element>        </map>    </class></hibernate-mapping>

可以看到Set比List少一个<list-index>,其他都相同,Map多一个<map-key>值.(*注意Set集合里的元素不能重复).

基于注解(Annotation)
StudentInfo.java:
package com.edu.entity;import java.io.Serializable;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import javax.persistence.CollectionTable;import javax.persistence.Column;import javax.persistence.ElementCollection;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.MapKeyColumn;import javax.persistence.OrderColumn;import javax.persistence.SequenceGenerator;import javax.persistence.Table;<strong>@Entity@Table(name="student_info")</strong>public class StudentInfo implements Serializable {private static final long serialVersionUID = 1L;//序列生成@Id@SequenceGenerator(name="sequenceGenerator",sequenceName="seq_student_info_id",allocationSize=1)@GeneratedValue(generator="sequenceGenerator",strategy=GenerationType.SEQUENCE)@Column(name="stu_id")private Integer stuId;private String stuName;private String stuSex;@ElementCollection(fetch=FetchType.EAGER)@CollectionTable(name="tels_list")//排序@OrderColumn(name="tels_index")@Column(name="tel_info")private List<String> telsList = new ArrayList<>();@ElementCollection(fetch=FetchType.EAGER)@CollectionTable(name="images_set")@Column(name="image_info")private Set<String> imagesSet = new HashSet<>();@ElementCollection(fetch=FetchType.EAGER)@CollectionTable(name="card_map")//map-key@MapKeyColumn(name="card_no")@Column(name="card_pwd")private Map<String, String> cardMap = new HashMap<>();}







1 0
原创粉丝点击