照旧,先新建一个StudentMap.java实体类,将hobby属性使用map集合接口来存放:

package com.joe.entity;

import java.util.Map;

public class StudentMap {

    private int id;
private String name;
private int age;
private Map<String,String> hobby; /**
* 无参构造函数
*/
public StudentMap(){ } 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 int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Map<String, String> getHobby() {
return hobby;
} public void setHobby(Map<String, String> hobby) {
this.hobby = hobby;
} }

接下来就是配置对象关系映射文件了,在hibernate中可以使用<map>标签来配置,先了解一下<map>标签的常见属性及子元素吧:<map>元素用来映射java.util.Map类型的属性,常用的属性和子元素有:

  1. name属性
  2. table属性
  3. <key>子元素
  4. <map-key>子元素
  5. <element>子元素

在java中,map集合接口存放数据是采用键值对的形式,因此<map-key>就是来map的键的,因此它也需要额外的列来保存键值。StudentMap.hbm.xml中的内容是:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!-- 一个class标签对应一个实体类,name属性指定实体类名称,table属性指定关联的数据库表 -->
<class name="com.joe.entity.StudentMap" table="stu_map_tab">
<!-- 主键 -->
<id name="id" column="stu_id">
<!-- 提供ID自增的策略 native会根据数据库自行判断 -->
<generator class="native"></generator>
</id>
<!-- 其他属性,name对应实体类的属性,column对应关系型数据库表的列 -->
<property name="name" column="stu_name"></property>
<property name="age" column="stu_age"></property> <map name="hobby" table="hobby_map_tab">
<key column="student_id"></key>
<map-key column="keycolumn" type="string"></map-key>
<element type="string" column="hobby"></element>
</map> </class>
</hibernate-mapping>

最后贴上StudentMapTest.java类的代码吧,这个测试和以前的几篇文章中的测试无异,就不在一个一个地展示了:

package com.joe.test;

import java.util.HashMap;
import java.util.Map; import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test; import com.joe.entity.StudentMap;
import com.joe.util.HibernateUtils; public class StudentMapTest { @Test
public void createTable() {
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
se.create(true, true);
} @Test
public void save(){
Transaction tx=null;
Session session=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction(); StudentMap stu=new StudentMap();
stu.setName("wangwu");
stu.setAge(20); @SuppressWarnings({ "unchecked", "rawtypes" })
Map<String,String> map=new HashMap();
map.put("a", "run");
map.put("b", "eat"); stu.setHobby(map); session.save(stu); tx.commit();
}catch(HibernateException he){
if(tx!=null){
tx.rollback();
}
he.printStackTrace();
}finally{
HibernateUtils.closeSession(session);
}
} @Test
public void findAll(){
Transaction tx=null;
Session session=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction(); StudentMap stu=(StudentMap)session.get(StudentMap.class, 1);
System.out.println(stu.getId()+stu.getName()+stu.getAge()); Map<String,String > map=stu.getHobby();
System.out.println(map);
tx.commit();
}catch(HibernateException he){
if(tx!=null){
tx.rollback();
}
he.printStackTrace();
}finally{
HibernateUtils.closeSession(session);
}
} }

hibernate对集合的操作就写到这儿了,其实还有很多没有写到的,如果有大神看过我的文章,希望多多指点,最后,关于java集合的学习,我在园子里看到有园友写过一个系列,感觉写得非常好,建议大家看看,Java 集合系列目录(Category)

hibernate学习系列-----(9)hibernate对集合属性的操作之Map集合篇的更多相关文章

  1. hibernate学习系列-----(6)hibernate对集合属性的操作之Set集合篇

    先说一段废话吧,本打算每天把所学的知识总结为博客的,但是昨天为什么没有写呢?没有学习吗?No,那是为什么?贪玩,对,这位同学说对了,老实说昨天感觉身体不怎么舒服,大家都知道,这其实就是为自己懒找借口, ...

  2. hibernate学习系列-----(7)hibernate对集合属性的操作之List集合篇

    今天要写的内容其实不多,本打算将hibernate对集合的操作的内容直接归结为一篇的,但想一想,还是分开写的比较好,毕竟前面的已经发布出去来了,废话不多说,开始吧! 依旧新建一个StudentList ...

  3. hibernate学习系列-----(8)hibernate对集合属性的操作之Collectioon集合篇

    度过短暂的周末,又到了周一,继续轻松而愉快的学习,紧承以前的学习,继续了解hibernate对集合的操作学习之旅! 在上一篇中,就已经提前说过,这一篇的内容以及下一篇的内容会有很多相似之处,这里就不再 ...

  4. Hibernate对集合属性的操作---基础学习

    1:Set集合属性操作 1).Hibernate3以后支持大部分重要的JDK集合接口映射,Set集合接口的配置:  >在xxx.hbm.xml文件中使用<set>标签 2).< ...

  5. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...

  6. Hibernate学习一:Hibernate注解CascadeType

    http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hi ...

  7. redis:order set有序集合类型的操作(有序集合)

    1. order set有序集合类型的操作(有序集合) 有序集合是在无序集合的基础上加了一个排序的依据,这个排序依据叫score,因此声明一个集合为有序集合的时候要加上score(作为排序的依据) 1 ...

  8. redis:set集合类型的操作(无序集合)

    1. set集合类型的操作(无序集合) 集合具有无序性(没有顺序).确定性(描述是确定的).唯一性(没有重复的元素) 1.1. sadd key member [member ...] 语法:sadd ...

  9. map集合修改其中元素 去除Map集合中所有具有相同值的元素 Properties长久保存的流操作 两种用map记录单词或字母个数的方法

    package com.swift.lianxi; import java.util.HashMap; import java.util.Iterator; import java.util.Map; ...

随机推荐

  1. ios iphone ipad上iframe的宽度会扩大的解决办法

    这个问题,我从网上查了下,好像是属于ios的bug,android,windows都没有问题. 解决办法,就是在iframe加载完成后,设置 iframe里面body的宽度为多少PX. $(" ...

  2. 使用Python获取计算机名,ip地址,mac地址等等

    获取计算机名 # 获取计算机名,常用的方法有三种 import os import socket # method one name = socket.gethostname() print(name ...

  3. MySql 分页关键字(limit)

    mysql分页关键字: limit m,n --m:表示从哪一行开始查,n:查询多少条 oracle分页关键字:: rownum SqlServer:top(2005以下版本)  row_number ...

  4. HDU 2087 剪花布条【在字符串中不可重叠地寻找子串数量】

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?  Input输入中含有一些数据,分别是成对出现的花布条和 ...

  5. python3爬虫爬取猫眼电影TOP100(含详细爬取思路)

    待爬取的网页地址为https://maoyan.com/board/4,本次以requests.BeautifulSoup css selector为路线进行爬取,最终目的是把影片排名.图片.名称.演 ...

  6. luoguP2296 寻找道路

    因为是出边与终点直接或间接相连,所以将边反向,从终边开始,将所有终边能到达的点都打上标记因为是最短路,所以不需要处理重边和自环,于是再跑最短路就好题目关键:路径上的所有点的出边所指向的点都直接或间接与 ...

  7. Codeforces 855C - Helga Hufflepuff's Cup

    855C - Helga Hufflepuff's Cup 题意 要求构建一棵树,树上至多可以存在 \(x\) 个权值为 \(k\) 的重要点,且与重要点连边的点的权值必须小于 \(k\),问有多少种 ...

  8. RabbitMQ (七) 订阅者模式之主题模式 ( topic )

    主题模式和路由模式很像 路由模式是精确匹配 主题模式是模糊匹配 依然先通过管理后台添加一个交换机. 生产者 public class Producer { private const string E ...

  9. 谜题15:令人晕头转向的Hello

    下面的程序是对一个老生常谈的例子做出了稍许的变化之后的版本.那么,它会打印出什么呢? /** * Generated by the IBM IDL-to-Java compiler, version ...

  10. 【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家

    既然题目中的要求满足二维偏序,那么我们很自然地想到将所有东西(草和牛)都读进来之后,对一维(美味度)排序,然后在另一维(价值)中取当前最小的. 于是,Splay.mutiset.权值分块什么的都支持查 ...