`

十二 集合映射之Map集合

 
阅读更多
十二 Map集合映射
Map是以键值对的形式存放数据的 

现在我们假设员工数据的name为唯一的 
现在我们来看映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="vo.util.bean">

	<class name="Employee">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name" unique="true"/>
		<many-to-one name="derpartment" column="depaer_id" not-null="true"/>
	</class>
	
</hibernate-mapping>

unique是定义其为唯一键的约束 

员工实体类

package vo.util.bean;
/**
 * 员工类
 * @author Administrator
 *
 */
public class Employee {
    private int id;
    private String name;
    private Department derpartment;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Department getDerpartment() {
		return derpartment;
	}
	public void setDerpartment(Department derpartment) {
		this.derpartment = derpartment;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "id="+this.id+" name="+this.name;
	}
	
}


现在我们来定义部门实体
package vo.util.bean;

import java.util.Map;


/**
 * 部门类
 * @author Administrator
 *
 */
public class Department {
  private int id;
  private String name;
  private Map<String,Employee> ems;
  
public Map<String, Employee> getEms() {
	return ems;
}

public void setEms(Map<String, Employee> ems) {
	this.ems = ems;
}

public int getId() {
	return id;
}

public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
}



这行是定义Map集合的 
private Map<String,Employee> ems;


映射文件 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="vo.util.bean">

	<class name="Department">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 配置一对多的映射关系  -->
		<!-- 
		<set name="ems">
		 -->
		<!-- 关联关系的外键  -->
		<!--  
		<key column="depaer_id"/>
		-->
		   <!-- 关联关系的实体类配置 -->
		   <!-- 
		  <one-to-many  class="Employee" />
		</set>
		
		 -->
        <map name="ems">
        <key column="depaer_id"/>
		 <map-key type="string" column="name"/>
		 <one-to-many class="Employee"/>
		 </map>
	</class>
	
</hibernate-mapping>

分析 发现这跟List并没有太大的区别 其实map节点的里面字段属性意义都是一样的
就<map-key 这个节点有特殊之处 这是指定其键的 因为Map是以键值对的形式存在的 
type是指定键的类型 当前指定为string类型 这个column是干什么用的呢?这个是指定
其键的值是以那个列为键的 当前是以员工的name这个列作为键存在的 

测试类

package vo.util.test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.Transaction;

import vo.util.HibernateUtil;
import vo.util.bean.Department;
import vo.util.bean.Employee;

public class OneToMany {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	
         add();
        query(1);
	}
    static Department add(){
    	Session session = null;
    	Transaction tx = null;
    	try{
    		session =HibernateUtil.getSession();
    		tx = session.beginTransaction();
    		//…你的代码save,delete,update,get…
    		Department dpart=new Department();
    		dpart.setName("政企事业部");
    		
    		Employee em1=new Employee();
    		em1.setName("员工李小仙");
    		em1.setDerpartment(dpart);
    		
    		Employee em2=new Employee();
    		em2.setName("员工张小三");
    		em2.setDerpartment(dpart);
    		
    		Map<String,Employee> ems=new HashMap<String, Employee>();
    	    ems.put(em1.getName(), em1);
    	    ems.put(em2.getName(), em2);
    	    
    	    dpart.setEms(ems);    
    		session.save(dpart);
    		session.save(em1);
    		session.save(em2);
    		
    		
    		tx.commit();
    		return dpart;
    	}finally{
    		if(session != null)session.close();
    	} 

    }
    
    static Department query(int id){
    	Session session=null;
    	
    	try{
    	   session=HibernateUtil.getSession();
    	   Department d=(Department)session.get(Department.class, id);
    	   
    	   System.out.println(d.getEms());
    	  
    		return d;
    	}finally{
    		if(session != null)session.close();
    	} 

    }
}


通过输出发现:输出是键值对的形式输出的 

end 完毕!

 

分享到:
评论

相关推荐

    hibernate map 集合映射

    在Hibernate的映射文件(.hbm.xml)中,我们通常使用`&lt;set&gt;`, `&lt;list&gt;`, `&lt;map&gt;`等标签来定义集合映射。每个标签都有对应的属性,例如: - `name`: 对象属性名。 - `table`: 所映射的数据库表名。 - `inverse`: ...

    Hibernate常见集合映射(Set,List_Array,Map,Bag)

    常见的集合映射类型有 Set、List、Array、Map 和 Bag 等,每种类型都有其特点和应用场景。 Set 集合映射 Set 集合是 Hibernate 中基础的集合类型,元素数据一般使用外键同主表关联。Set 集合非常适用于集合元素不...

    Hibernate集合映射与关联关系

    本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...

    hibernate set 集合映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象模型中的集合类,如List、Set、Map等。这允许我们在Java代码中操作对象集合,而Hibernate负责处理底层的SQL查询和数据存储。本文将深入探讨`...

    hibernate集合的映射

    这里的`&lt;map&gt;`元素定义了一个名为`preferences`的Map集合,`&lt;key&gt;`元素对应外键,`&lt;map-key&gt;`元素指定Map的键列和类型,`&lt;element&gt;`元素指定值列和类型。 总结: Hibernate集合映射是ORM的重要组成部分,它使得Java...

    Hibernate教程16_集合映射

    `&lt;map-key&gt;`用于映射集合中的键字段,通常在映射Map时使用。 5. **one-to-many** 和 **many-to-many**:这两个元素用于定义一对多和多对多关系。它们包含引用的实体类名和关联字段名。 6. **fetch**:这个属性用于...

    [原]Hibernate集合映射

    Hibernate支持多种集合映射类型,包括List、Set、Map、Bag、Array等。它们之间的区别主要在于元素的唯一性、顺序性和映射到数据库的实现方式。例如,List和Array维护元素的插入顺序,而Set不允许重复元素;Map则...

    java集合与映射(牛)

    Java集合框架主要包括两种类型的容器:集合(Collection)和映射(Map)。其中集合用于存储一组不重复的对象,而映射则用于存储键值对。 #### 二、集合(Collection) Java中的集合框架主要包括以下几种类型的集合...

    hibernate中的集合映射范例程序

    在这个“hibernate中的集合映射范例程序”中,我们将深入探讨如何在Hibernate中进行集合映射,以及不同集合类型的应用场景。 首先,集合映射是Hibernate中处理一对多、多对多关系的核心机制。它允许我们将一个实体...

    JAVA培训-HIBERNATE的集合映射.doc

    3. **Map**: Map集合用于存储键值对,`&lt;map&gt;`标签用来映射Map类型。它有`key`和`map-key`(或`index`)属性来分别指定键和值的映射列。 4. **Bag**: Bag是一个无序的集合,类似于Set,但允许重复元素。在Hibernate中...

    java中Map映射机制

    Java中的Map映射机制是Java集合框架的重要组成部分,它提供了键值对的存储方式,使得可以通过键来查找和操作对应的值。Map接口是所有映射类的基础,它定义了多种方法来实现对键值对的操作。 Map接口的核心方法包括...

    读取Excel文件将数据存入map集合

    ### 读取Excel文件将数据存入Map集合 在日常工作中,经常需要处理Excel文件,尤其是在数据统计、分析等场景中。本篇文章介绍了一个方法,该方法能够读取Excel文件并将其中的数据存储到Java中的`Map`集合里,便于...

    Map集合笔记

    Map集合是Java集合框架中的重要组成部分之一,主要用于存储键值对(key-value pairs)。它与Collection接口不同,Collection接口用于存储单个对象,而Map接口则是一次存储一对元素,即一个键和一个值。因此,Map集合...

    hibernate 集合映射

    Map集合由键值对组成,可以映射到具有两个外键关联的数据库表。在Hibernate中,使用`&lt;map&gt;`标签: ```xml &lt;map name="studentBooks" table="STUDENT_BOOKS"&gt; &lt;map-key column="BOOK_NAME" type="string"/&gt; ...

    Hibernate集合映射

    集合映射是Hibernate中一个非常关键的概念,它使得Java集合类如List、Set、Map等能够与数据库中的多对一、一对多、多对多关系对应起来。在这个主题中,我们将深入探讨Hibernate集合映射的各个方面。 首先,我们来看...

    java集合MAP三种遍历

    本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ### 一、Map简介 `Map`接口是Java集合框架的一部分,它提供了基于键值对的数据存储方式。常见的实现...

    Hibernate关联关系的CRUD和集合映射(annotation)

    本文将深入探讨Hibernate中的关联关系、CRUD操作以及集合映射(基于注解的方式)。关联关系是数据库设计中的核心概念,而Hibernate通过注解使得这种关系在代码中得以体现,简化了开发工作。 ### Hibernate关联关系 ...

    Java Map 集合类简介

    【Java Map 集合类简介】 在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别...

Global site tag (gtag.js) - Google Analytics