版权声明:博客知识产权来源命运的信徒,切勿侵权 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>