hibernate的list映射和map映射

List映射

Grade类

public class Grade {
	private int id;
	private String name;
	private List<Student> students=new ArrayList<Student>();
	//省略get/set方法
}
Student类

public class Student {
	private int id;
	private String name;
	private int age;
	//省略get/set方法
}
Grade.hbm.xml配置文件

<hibernate-mapping package="com.test.pojo">
	<class name="Grade">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name" />
		<list name="students">
		 <key column="grade_id" not-null="true"></key>
		 <!-- 在多的一端产生一列用来表示顺序,如果不指明列名默认为idx
		      值由hibernate来维护
		  -->
		 <list-index column="sort"/>
		 <one-to-many class="Student"/>
		</list>
	</class>
</hibernate-mapping>
Student.hbm.xml配置文件

<hibernate-mapping package="com.test.pojo">
	<class name="Student">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name" />
		<property name="age"/>
	</class>
</hibernate-mapping>

测试类

public class HibernateTest {
	@Test
	public void testCreateDB(){
		Configuration cfg=new Configuration().configure();
		SchemaExport se=new SchemaExport(cfg);
		//第一个参数表示是否生成ddl脚本,第二个参数表示是否执行到数据库中
		se.create(true, true);
	}
	/**
	 * 保存数据
	 */
	@Test
	public void save(){
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateUtil.getSession();
			tx=session.beginTransaction();
			Grade grade=new Grade();
			grade.setName("大一");
			Student stu=new Student();
			stu.setName("张三");
			stu.setAge(20);
			Student stu1=new Student();
			stu1.setName("李四");
			stu1.setAge(20);
			Student stu2=new Student();
			stu2.setName("王五");
			stu2.setAge(20);
			grade.getStudents().add(stu);
			grade.getStudents().add(stu1);
			grade.getStudents().add(stu2);
			session.save(grade);
			session.save(stu);
			session.save(stu1);
			session.save(stu2);
			tx.commit();
		}catch(Exception e){
			if(tx!=null)
				tx.rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession();
		}
	}
	@Test
	public void testGet(){
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateUtil.getSession();
			tx=session.beginTransaction();
			//取数据
			Grade grade=(Grade) session.get(Grade.class,1);
			System.out.println("grade_name:"+grade.getName());
			Iterator<Student> it=grade.getStudents().iterator();
			while(it.hasNext()){
				Student student=(Student)it.next();
				System.out.println("student_name:"+student.getName());
			}
			tx.commit();
		}catch(Exception e){
			tx.rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession();
		}
	}
}

Map映射

只展示与List映射不同之处

Grade类

public class Grade {
	private int id;
	private String name;
	private Map<String,Student> students=new HashMap<String,Student>();
	//省略get/set方法
}

Grade.hbm.xml配置文件

<hibernate-mapping package="com.test.pojo">
	<class name="Grade">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name" />
		<map name="students" cascade="all">
		<!-- key表示外键 -->
		 <key column="grade_id" />
		 <!-- map-key是映射为map集合时,对应key值,建议为唯一的 -->
		 <map-key type="String" column="name"/>
		 <one-to-many class="Student"/>
		</map>
	</class>
</hibernate-mapping>

测试类(保存数据和获取数据代码)

@Test
	public void save(){
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateUtil.getSession();
			tx=session.beginTransaction();
			Grade grade=new Grade();
			grade.setName("大一");
			Student stu=new Student();
			stu.setName("张三");
			stu.setAge(20);
			Student stu1=new Student();
			stu1.setName("李四");
			stu1.setAge(20);
			Student stu2=new Student();
			stu2.setName("王五");
			stu2.setAge(20);
			grade.getStudents().put(stu.getName(), stu);
			grade.getStudents().put(stu1.getName(), stu1);
			grade.getStudents().put(stu2.getName(), stu2);
			session.save(grade);
			session.save(stu);
			session.save(stu1);
			session.save(stu2);
			tx.commit();
		}catch(Exception e){
			if(tx!=null)
				tx.rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession();
		}
	}
	@Test
	public void testGet(){
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateUtil.getSession();
			tx=session.beginTransaction();
			//取数据
			Grade grade=(Grade) session.get(Grade.class,1);
			System.out.println("grade_name:"+grade.getName());
			Map<String,Student> map=grade.getStudents();
			System.out.println(map.get("张三").getAge());
			tx.commit();
		}catch(Exception e){
			tx.rollback();
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession();
		}
	}

所有代码实例结果在此不做展示,可自己运行查看。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值