Hiberante集合映射的一个入门示例

Hiberante的集合映射可以很方便的将两个表关联起来,并且进行存储和查询操作。

入门示例如下:

首先要有三张表,artist(乐手表)、music(歌曲表)、artist_music(乐手-歌手表)。

我用的是SQL SERVER数据库,建表语句如下:

create table artist

(

artistid int identity(1,1) primary key,

artistname varchar(50)

)

create table music

(

musicid int identity(1,1) primary key,

musicname varchar(50)

)

另外的artist_music表则是包含两个字段,一个为artistid,另一个为musicid。

接下来,就可以创建artist和music对应的class文件。由于乐手与他演唱过的歌曲相对应,故artist中有music的一个集合(Set)。

如下:

package com.learn.hibernate.model;
import java.util.HashSet;
import java.util.Set;
public class Artist {

	private int artistid;
	private String artistname;
	private Set music=new HashSet(0);
	
	public Integer getArtistid()
	{
		return this.artistid;
	}
	public void setArtistid(Integer id)
	{
		this.artistid=id;
	}
	public void setArtistname(String name)
	{
		this.artistname=name;
	}
	public String getArtistname()
	{
		return this.artistname;
	}
	public void setMusic(Set music)
	{
		this.music=music;
	}
	public Set getMusic()
	{
		return this.music;
	}
}


 

package com.learn.hibernate.model;
import java.util.HashSet;
import java.util.Set;
public class Music {

	private int musicid;
	private String musicname;
	private Set artist=new HashSet(0);
	
	public Integer getMusicid()
	{
		return this.musicid;
	}
	public void setMusicid(Integer id)
	{
		this.musicid=id;
	}
	public String getMusicname()
	{
		return this.musicname;
	}
	public void setMusicname(String musicname)
	{
		this.musicname=musicname;
	}
	public void setArtist(Set artist)
	{
		this.artist=artist;
	}
	public Set getArtist()
	{
		return this.artist;
	}
}


再就是配置**.hbm.xml文件,其中artist.hbm.xml中要包含对music set的配置。

artist.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">
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="com.learn.hibernate.model.Artist" table="artist">
<meta attribute="sync-DAO">false</meta>
<id name="artistid" type="int">
<generator class="identity"/>
</id>
<property name="artistname"/>
<set name="music" table="artist_music">
<key column="artistid"/>
<many-to-many class="com.learn.hibernate.model.Music" column="musicid"></many-to-many>
</set>
</class>
</hibernate-mapping>


music.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">
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="com.learn.hibernate.model.Music" table="music">
<meta attribute="sync-DAO">false</meta>
<id name="musicid" type="int">
     <generator class="identity"/>
</id>
<property name="musicname"/>
</class>
</hibernate-mapping>

接下来,就可以写测试文件了。(记得先在hibernate.cfg.xml中写上mapping的配置!)

import org.hibernate.*;
import com.learn.hibernate.model.Artist;
import com.learn.hibernate.model.Music;
import java.util.*;
public class SetTest {

	//为歌手和歌手的曲目进行存储
	public void saveInfo()
	{
		Set music=new HashSet(0);
		
		Music music1=new Music();
		music1.setMusicname("十七岁");
		Music music2=new Music();
		music2.setMusicname("冰雨");
		Music music3=new Music();
		music3.setMusicname("牧笛");
		
		music.add(music1);
		music.add(music2);
		music.add(music3);
		
		Artist artist=new Artist();
		artist.setArtistname("刘德华");
		artist.setMusic(music);
		
		SessionFactory sessionFactory=SessionFactoryUtil.getSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction tran=session.beginTransaction();
		session.save(music1);
		session.save(music2);
		session.save(music3);
		session.save(artist);
		tran.commit();
		session.close();
		sessionFactory.close();
		System.out.println("保存数据成功!");
	}
	public static void main(String[] args)
	{
		SetTest setTest=new SetTest();
		setTest.saveInfo();
	}
}


运行之后,三张表中就插入了对应的数据。非常的简便。

另外一个,对存储好了的数据进行查询。也是非常方便的:

import org.hibernate.*;
import com.learn.hibernate.model.Artist;
import com.learn.hibernate.model.Music;
import java.util.*;
public class SetTest {

	//对集合映射进行查询
	public void queryMusic(String artistname)
	{
		SessionFactory sessionFactory=SessionFactoryUtil.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Query query=session.createQuery("from Artist where artistname=:artistname");
		query.setString("artistname",artistname);
		List<Artist> list=query.list();
		if(list.size()>0)
		{
			Artist artist=list.get(0);
			System.out.println(artist.getArtistname()+"唱过的歌为:");
			Set music=artist.getMusic();
			Iterator itar=music.iterator();
			while(itar.hasNext())
			{
				Music music_tmp=(Music) itar.next();
				System.out.println(music_tmp.getMusicname());
			}
		}
	}
	public static void main(String[] args)
	{
		SetTest setTest=new SetTest();
		setTest.queryMusic("刘德华");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值