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();
}
}
所有代码实例结果在此不做展示,可自己运行查看。