Hibernate映射之数组属性

版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/88970078

我们都映射过基础的类型如String int类型,但是对于数组类型String [] 怎么映射呢?


action类如下

package cn.com.bean;
import org.springframework.stereotype.Repository;
@Repository(value = "goods")
public class Goods {
//good_id商品id 、good_name商品名称、goods_img商品图片 good_price 商品价格 、 描述 good_discripe、
//商品种类goods_kind 所属商家 goods_seller
private int good_id;
private String good_name;
private String good_price;
private String good_discripe;
private String goods_kind;
private String goods_seller;
private String[] goods_imgs;
public int getGood_id() {
	return good_id;
}
public void setGood_id(int good_id) {
	this.good_id = good_id;
}
public String getGood_name() {
	return good_name;
}
public void setGood_name(String good_name) {
	this.good_name = good_name;
}
public String getGood_price() {
	return good_price;
}
public void setGood_price(String good_price) {
	this.good_price = good_price;
}
public String getGood_discripe() {
	return good_discripe;
}
public void setGood_discripe(String good_discripe) {
	this.good_discripe = good_discripe;
}
public String getGoods_kind() {
	return goods_kind;
}
public void setGoods_kind(String goods_kind) {
	this.goods_kind = goods_kind;
}
public String getGoods_seller() {
	return goods_seller;
}
public void setGoods_seller(String goods_seller) {
	this.goods_seller = goods_seller;
}
public String[] getGoods_imgs() {
	return goods_imgs;
}
public void setGoods_imgs(String[] goods_imgs) {
	this.goods_imgs = goods_imgs;
}


}

Goods.hbm.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!-- 实体类和表的映射 -->
<class name="cn.com.bean.Goods" table="goods" catalog="app" >
<id name="good_id" column="good_id"  type="java.lang.Integer">
<generator class="identity"></generator>
</id>
<property name="good_name" type="java.lang.String" length="255"></property>
<property name="good_price" type="java.lang.String" length="255"></property>
<property name="good_discripe" type="java.lang.String" length="255"></property>
<property name="goods_kind" type="java.lang.String" length="255"></property>
<property name="goods_seller" type="java.lang.String" length="255"></property>
<!-- 映射数组属性 数组属性存于gimg表中 -->
<array name="goods_imgs" table="gimg">
<!-- 映射集合属性表的外键列,关联goods表的主键 -->
			<key column="good_id" not-null="true"/>
<!-- 映射集合属性表的集合索引列 -->
			<list-index column="orders"/>
			<!-- 映射保存集合元素的数据列 -->
			<element type="string" column="img"/>
		</array>
</class>
</hibernate-mapping>

插入数据到Goods表中

package cn.com.service;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import cn.com.bean.Goods;
@Repository(value = "publishGoods")
@Scope("prototype")
public class PublishGoods {
	@Autowired
	private SessionFactory sf;
	@Transactional
	public void publishgoods(){
		//打开线程安全的session对象
		Session session = sf.getCurrentSession();
		//创建对象
		Goods g=new Goods();
		g.setGood_id(1);
		g.setGood_name("土地");
		g.setGood_price("999");
		g.setGoods_kind("土地");
		g.setGoods_seller("田圩村");
		g.setGood_discripe("南方土地,气候湿润,适合种植蔬菜");
		String [] img=new String[3];
		img[0]="/img1.jpg";
		img[1]="/img2.jpg";
		img[2]="/img3.jpg";
		g.setGoods_imgs(img);
		session.save(g);
	}
}

测试入口

package cn.com.listen;
import org.hibernate.internal.SessionFactoryImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.com.service.PublishGoods;
public class Test {
public static void main(String[] args) {
	ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
	PublishGoods session=(PublishGoods) ioc.getBean("publishGoods");
	session.publishgoods();
}
}

表数据如下

有没有注意到没有goods_img,我也不知道怎么回事,但是后来百度,大家都是这样的

查询部分

package cn.com.service;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import cn.com.bean.Goods;
import cn.com.bean.Posted;
@Repository(value = "publishGoods")
@Scope("prototype")
public class PublishGoods {
	@Autowired
	private SessionFactory sf;
	@Transactional
	public String queryGoods(){
		//打开线程安全的session对象
				Session session = sf.getCurrentSession();
				String sql = "from Goods";
				Query query = session.createQuery(sql);
				List<Goods> list = query.list();
				for (Goods goods : list) {
					System.out.println(goods.getGood_name());
					String [] img=goods.getGoods_imgs();
					for (String i : img) {
						System.out.println(i);
					}
				}
		         return null;
	}
}

 补充知识  list、set和map集合属性的映射

hibernate映射基本类型的集合数据。list、set、map
package cn.com.tjn;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Box {
	private Long id;
	private Set<String> set;
	private List<Integer> list;
	private Map<String, String> map;
	public Set<String> getSet() {
		return set;
	}
 
	public void setSet(Set<String> set) {
		this.set = set;
	}
 
	public List<Integer> getList() {
		return list;
	}
 
	public void setList(List<Integer> list) {
		this.list = list;
	}
 
	public Map<String, String> getMap() {
		return map;
	}
 
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
 
 
	public Long getId() {
		return id;
	}
 
	public void setId(Long id) {
		this.id = id;
	}
 
}
 

映射文件如下

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
 <hibernate-mapping package="cn.com.tjn">
	<class name="Box" table="t_box">
		<id name="id" type="long">
			<generator class="native"/>
		</id>
		<set name="set" table="t_set" >
			<key column="box_id"/>
			<element type="string" column="username" />
		</set>
		<list name="list" table="t_list" >
			<key column="box_id"/>
			<list-index column="orders"/>
			<element type="int" column="numbers"/>
		</list>
		<map name="map" table="t_map">
			<key column="box_id"/>
			<index  type="string" column="name"/>
			<element type="string" column="value"/>
		</map>
		
	</class>
</hibernate-mapping>

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/88970078
今日推荐