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属性的映射的更多相关文章

  1. Hibernate学习---第六节:数组&list&map&set的映射配置

    1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; import java.util.HashMap; import ja ...

  2. 数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤)

    数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤) map()方法返回一个由原数组中每一个元素调用一个指定方法后返回的新数组 reduce()方法接受一个函数作 ...

  3. Hibernate映射Map属性2

    Hibernate在映射Map属性时生成映射文件.需要注意的一些地方.下面是我的一个例子. Java类如下 public class NameAndNumber { private Integer i ...

  4. Hibernate映射Map属性

    看到一篇Hibernate 映射Map属性的文章挺好的转载一下原地址:http://blog.sina.com.cn/s/blog_86f4502c0101fs1x.html Map集合属于有序集合, ...

  5. java bean、List、数组、map和Json的相互转化

    工程 json包为  代码 package com.my.json; public class ChildBean { private String childName; private String ...

  6. 第9章 集合处理(数组、Map、Set)

    目录 1. 数组 1.1 创建数组 1.2 在数组两端添加删除元素 1.3 在数组任意位置添加.删除元素 delete删除数组元素无效 使用splice方法增.删.改元素 1.4 数组的常用操作 数组 ...

  7. JavaScript中数组类型的属性和方法

    除了Object,Array类型应该是ECMAScript中最常用的类型了. ECMAScript的数组虽然也是数据的有序列表,但还是与其他语言中的数组有很大的区别.比如ECMAScript数组每一项 ...

  8. javascript数组的实例属性(方法)

    javascript的所有数组实例对象,除了可以给自己增删属性之外:都会从Array.prototype继承属性(方法).修改Array的原型会影响所有的数组实例. 数组实例的属性: Array.pr ...

  9. MyBatis传入参数为list、数组、map写法(转载)

    MyBatis传入参数为list.数组.map写法 1.foreach简单介绍: foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有item ...

随机推荐

  1. alsa声卡分析alsa-utils调用过程

    如何分析tinyplay 播放音频和tinymix的过程?需要相应的工具来支持追查: 一.利用strace工具分析tinyplay和tinymix: strace -o tinyplay.log ti ...

  2. Android线上Bug热修复分析

    针对app线上修复技术,目前有好几种解决方案,开源界往往一个方案会有好几种实现.重复的实现会有造轮子之嫌,但分析解决方案在技术上的探索和衍变,这轮子还是值得去推动的 关于Hot Fix技术 Hot F ...

  3. MinGW下简单编译FFmpeg

    2009.03.21补充:ffmpeg-0.5正式发布,地址为:[url]http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2[/url].修改了第7步, ...

  4. vue cli创建的项目 当你后期使用了ES6语法,如何解决浏览器兼容问题

    最近开发了一个项目,开发过程中,由于需要使用了async await ,于是发现,只有少数的浏览器支持,极大多数的浏览器是不支持这玩意的,在网上各种找解决方案,基本都是失败,最后总结了两个方案之后,尝 ...

  5. Tea HDU - 5881

    Tea is good. Tea is life. Tea is everything. The balance of tea is a journey of pursuing balance of ...

  6. 如何用python和苹果Turicreate学习框架来识别图像?

    大多数人听到深度学习,都会望而却步,因为会觉得很难,在这个人工智能飞速进步的时代,我也来抓一下时代的尾巴~ 两周前,我开始接触到python和Turicreate框架,经过不懈的努力,终于有所收获,特 ...

  7. 【BZOJ4736】温暖会指引我们前行(Link-Cut Tree)

    [BZOJ4736]温暖会指引我们前行(Link-Cut Tree) ##题面 神TM题面是UOJ的 题解 LCT傻逼维护最大生成树 不会的可以去做一做魔法森林 #include<iostrea ...

  8. Cow Contest POJ - 3660

    题意 有n(1<=n<=100)个学生参加编程比赛. 给出m条实力信息.(1<=M<=4500) 其中每一条的格式为 A B (1<=A<=N,1<=B< ...

  9. [BZOJ3293] [Cqoi2011] 分金币 (贪心)

    Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...

  10. 未来已来,腾讯AI计算网络

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:由鹅厂网事发表在云+社区 "鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流 ...