Hibernate学习入门教程(9)

照旧,先新建一个StudentMap.java实体类,将hobby属性使用map集合接口来存放:

package com.joe.entity;

import java.util.Map;

public class StudentMap {
   
    private int id;
    private String name;
    private int age;
    private Map<String,String> hobby;
   
    /**
    * 无参构造函数
    */
    public StudentMap(){
       
    }

public int getId() {
        return id;
    }

public void setId(int 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 Map<String, String> getHobby() {
        return hobby;
    }

public void setHobby(Map<String, String> hobby) {
        this.hobby = hobby;
    }
   
   
   

}

接下来就是配置对象关系映射文件了,在hibernate中可以使用<map>标签来配置,先了解一下<map>标签的常见属性及子元素吧:<map>元素用来映射java.util.Map类型的属性,常用的属性和子元素有:
1.name属性
2.table属性
3.<key>子元素
4.<map-key>子元素
5.<element>子元素

在java中,map集合接口存放数据是采用键值对的形式,因此<map-key>就是来map的键的,因此它也需要额外的列来保存键值。StudentMap.hbm.xml中的内容是:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
    <!-- 一个class标签对应一个实体类,name属性指定实体类名称,table属性指定关联的数据库表 -->
    <class table="stu_map_tab">
        <!-- 主键 -->
        <id column="stu_id">
            <!-- 提供ID自增的策略  native会根据数据库自行判断 -->
            <generator></generator>
        </id>
        <!-- 其他属性,name对应实体类的属性,column对应关系型数据库表的列 -->
        <property column="stu_name"></property>
        <property column="stu_age"></property>
       
        <map table="hobby_map_tab">
            <key column="student_id"></key>
            <map-key column="keycolumn" type="string"></map-key>
            <element type="string" column="hobby"></element>
        </map>
       
    </class>
</hibernate-mapping>

最后贴上StudentMapTest.java类的代码吧,这个测试和以前的几篇文章中的测试无异,就不在一个一个地展示了:

package com.joe.test;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;

import com.joe.entity.StudentMap;
import com.joe.util.HibernateUtils;

public class StudentMapTest {
   
    @Test
    public void createTable() {
        Configuration cfg = new Configuration().configure();
        SchemaExport se = new SchemaExport(cfg);
        se.create(true, true);
    }
   
   
   
    @Test
    public void save(){
        Transaction tx=null;
        Session session=null;
        try{
            session=HibernateUtils.getSession();
            tx=session.beginTransaction();
           
            StudentMap stu=new StudentMap();
            stu.setName("wangwu");
            stu.setAge(20);
           
            @SuppressWarnings({ "unchecked", "rawtypes" })
            Map<String,String> map=new HashMap();
            map.put("a", "run");
            map.put("b", "eat");
           
            stu.setHobby(map);
           
            session.save(stu);
           
           
            tx.commit();
        }catch(HibernateException he){
            if(tx!=null){
                tx.rollback();
            }
            he.printStackTrace();
        }finally{
            HibernateUtils.closeSession(session);
        }
    }
   
    @Test
    public void findAll(){
        Transaction tx=null;
        Session session=null;
        try{
            session=HibernateUtils.getSession();
            tx=session.beginTransaction();
           
            StudentMap stu=(StudentMap)session.get(StudentMap.class, 1);
            System.out.println(stu.getId()+stu.getName()+stu.getAge());
           
            Map<String,String > map=stu.getHobby();       
            System.out.println(map);
            tx.commit();
        }catch(HibernateException he){
            if(tx!=null){
                tx.rollback();
            }
            he.printStackTrace();
        }finally{
            HibernateUtils.closeSession(session);
        }
    }

}

hibernate对集合的操作就写到这儿了,其实还有很多没有写到的,如果有大神看过我的文章,希望多多指点。

Hibernate 的详细介绍请点这里
Hibernate 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3cf8c1f12802d07a93188f38178b012a.html