001-List,数组,Set,Map属性的映射
hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">mysqladmin</property>
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping resource="sqlmap/News.hbm.xml"/>
<mapping resource="sqlmap/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Person.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.amazing.hibernate.domain"> <class name="Person" table="person">
<id name="id" type="integer" column="ID">
<generator class="identity"/>
</id>
<property name="name" type="string" column="name"/>
<property name="age" type="integer" column="age"/>
<list name="schools" table="school">
<key column="personId"/>
<list-index column="listIndex"/>
<element type="string" column="schoolName"/>
</list>
</class> </hibernate-mapping>
Person.java:
package com.amazing.hibernate.domain; import java.util.ArrayList;
import java.util.List; public class Person { private Integer id;
private String name;
private int age;
private List<String> schools = new ArrayList<String>(); public Integer getId() {
return id;
}
public void setId(Integer 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 List<String> getSchools() {
return schools;
}
public void setSchools(List<String> schools) {
this.schools = schools;
} }
TestList.java:
package com.amazing.hibernate.domain; import java.util.ArrayList;
import java.util.List; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class TestList { @Test
public void testListMapping(){
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
Session session = sf.getCurrentSession();
Transaction txt = session.beginTransaction(); Person p1 = new Person();
p1.setName("tom");
p1.setAge(24);
List<String> schools1 = new ArrayList<String>();
schools1.add("小学");
schools1.add("初中");
p1.setSchools(schools1);
session.save(p1); Person p2 = new Person();
p2.setName("jack");
p2.setAge(28);
List<String> schools2 = new ArrayList<String>();
schools2.add("高中");
schools2.add("大学");
p2.setSchools(schools2);
session.save(p2); txt.commit();
System.out.println("session.isOpen():"+session.isOpen());//false
System.out.println("sf.isClosed():"+sf.isClosed());//false
sf.close();
}
}

若schools为String数组类型,即private String[] schools.映射文件Person.hbm.xml只需要将list元素改为array即可。
若schools为Set类型,即private Set<String> schools.映射文件Person.hbm.xml稍作修改:
<set name="schools" table="school">
<key column="personId"/>
<element type="string" column="schoolName" not-null="true"/>
</set>

若Person类有一个Map属性,即private Map<String,Float> scores.映射文件Person.hbm.xml稍作修改:
<map name="scores" table="score">
<key column="personId" not-null="true"/>
<map-key column="subject" type="string"/>
<element column="grade" type="float"/>
</map>
package com.amazing.hibernate.domain; import java.util.HashMap;
import java.util.Map; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class TestDemo { @Test
public void testListMapping(){
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
Session session = sf.getCurrentSession();
Transaction txt = session.beginTransaction(); Person p = new Person();
p.setName("tom");
p.setAge(24);
Map<String,Float> scores = new HashMap<String,Float>();
scores.put("语文", 85f);
scores.put("数学", 92f);
p.setScores(scores);
session.save(p); txt.commit();
System.out.println("session.isOpen():"+session.isOpen());
System.out.println("sf.isClosed():"+sf.isClosed());
sf.close();
}
}

001-List,数组,Set,Map属性的映射的更多相关文章
- Hibernate学习---第六节:数组&list&map&set的映射配置
1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; import java.util.HashMap; import ja ...
- 数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤)
数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤) map()方法返回一个由原数组中每一个元素调用一个指定方法后返回的新数组 reduce()方法接受一个函数作 ...
- Hibernate映射Map属性2
Hibernate在映射Map属性时生成映射文件.需要注意的一些地方.下面是我的一个例子. Java类如下 public class NameAndNumber { private Integer i ...
- Hibernate映射Map属性
看到一篇Hibernate 映射Map属性的文章挺好的转载一下原地址:http://blog.sina.com.cn/s/blog_86f4502c0101fs1x.html Map集合属于有序集合, ...
- java bean、List、数组、map和Json的相互转化
工程 json包为 代码 package com.my.json; public class ChildBean { private String childName; private String ...
- 第9章 集合处理(数组、Map、Set)
目录 1. 数组 1.1 创建数组 1.2 在数组两端添加删除元素 1.3 在数组任意位置添加.删除元素 delete删除数组元素无效 使用splice方法增.删.改元素 1.4 数组的常用操作 数组 ...
- JavaScript中数组类型的属性和方法
除了Object,Array类型应该是ECMAScript中最常用的类型了. ECMAScript的数组虽然也是数据的有序列表,但还是与其他语言中的数组有很大的区别.比如ECMAScript数组每一项 ...
- javascript数组的实例属性(方法)
javascript的所有数组实例对象,除了可以给自己增删属性之外:都会从Array.prototype继承属性(方法).修改Array的原型会影响所有的数组实例. 数组实例的属性: Array.pr ...
- MyBatis传入参数为list、数组、map写法(转载)
MyBatis传入参数为list.数组.map写法 1.foreach简单介绍: foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有item ...
随机推荐
- 关于longPressGesture做一个长按连加的效果(原创)
关于longPressGesture做一个长按连加的效果 解释一下什么意思呢?就是一个button长按之后其数字的一直累加.朋友们可能看起来很简单,无非就是加一个长按手势(longPressGestu ...
- python 循环语句 函数 模块
python循环语句 while循环语法结构 当需要语句不断的重复执行时,可以使用while循环 while expression: while_suite 语句ehile_suite会被连续不断的循 ...
- Windows & Linux服务器如何禁用ping总结
有时候你ping一些服务器或网站,你会发现ping不通,这个是因为对方出于安全因素(security reason)或避免网络拥堵(avoid network congestion)等原因,禁用了 ...
- 第2章 PCI总线的桥与配置
在PCI体系结构中,含有两类桥片,一个是HOST主桥,另一个是PCI桥.在每一个PCI设备中(包括PCI桥)都含有一个配置空间.这个配置空间由HOST主桥管理,而PCI桥可以转发来自HOST主桥的配置 ...
- 1.5 PCI-X总线简介
PCI-X总线仍采用并行总线技术.PCI-X总线使用的大多数总线事务基于PCI总线,但是在实现细节上略有不同.PCI-X总线将工作频率提高到533MHz,并首先引入了PME(Power Managem ...
- JavaScript中的indexOf
JavaScript中的indexOf 1.JavaScript中利用indexOf拼接字符串 <%@ page language="java" import="j ...
- VxWorks6.6 pcPentium BSP 使用说明(一):基本概念
"VxWorks6.6 BSP 使用说明"将发布pcPentium和idp945两个系列的BSP的使用说明.每个系列约5篇文章.之后还将发布由这两个官方提供的BSP的实战移植方法. ...
- Linux显示隐藏文件
Linux显示隐藏文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -a . .dbus .local .xsession-errors.old .. ...
- Tornado模块
Tornado 一个轻量级的Web框架 简介 1.Tornado在设计之初就考虑到了性能因素,旨在解决C10K问题,这样的设计使得其成为一个拥有非常高性能的框架.此外,它还拥有处理安全性.用户验证.社 ...
- WPF基础篇之系统中141种颜色
WPF最大的特点就是酷炫的外观,在学习过程中经常看见各种渐变窗体.作为几乎没做过美工的程序员,我对各种颜色的argb值不熟,颜色的英文单词也只认识部分.为了不至于每次都用Colors点出颜色再随机挑选 ...