1.类之间的关系
2.Person类,Student类,Teacher类
public class Person {
private int id;
private String name;
private int age;
}
====================
public class Student extends Person{
private String work;
}
=================
public class Teacher extends Person{
private int salary;
}
3.映射文件
Person.hbm.xml文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id" column="id">
<generator class="assigned"></generator>
</id>
<property name="name"/>
<property name="age"/>
<joined-subclass name="Teacher">
<key column="id"/>
<property name="salary"/>
</joined-subclass>
<joined-subclass name="Student">
<key column="id"/>
<property name="work"/>
</joined-subclass>
</class>
</hibernate-mapping>
4.测试代码
package cn.siggy.test;
import java.sql.SQLException;
import javax.sql.rowset.serial.SerialException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
import cn.siggy.pojo.Person;
import cn.siggy.pojo.Student;
import cn.siggy.pojo.Teacher;
import cn.siggy.util.HibernateUtil;
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 testSave() throws HibernateException, SerialException, SQLException{
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build());
Session session = null;
Transaction tx = null;
try{
session = factory.openSession();
tx = session.beginTransaction();
Teacher teacher = new Teacher();
teacher.setId(1);
teacher.setName("siggy");
teacher.setAge(26);
teacher.setSalary(5000);
Student student = new Student();
student.setId(2);
student.setName("小明");
student.setAge(22);
student.setWork("hello world");
Student student1 = new Student();
student1.setId(3);
student1.setName("小强");
student1.setAge(20);
student1.setWork("struts2");
session.save(student);
session.save(student1);
session.save(teacher);
tx.commit();
}catch (HibernateException e) {
if(tx!=null)
tx.rollback();
e.printStackTrace();
throw e;
}finally{
HibernateUtil.closeSession();
}
}
@Test
public void testGet(){
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Person person = (Person)session.get(Person.class, 2);
System.out.println(person.getName());
if(person instanceof Student){
Student stu = (Student)person;
System.out.println(stu.getWork());
}
tx.commit();
}catch (HibernateException e) {
if(tx!=null)
tx.rollback();
e.printStackTrace();
throw e;
}finally{
HibernateUtil.closeSession();
}
}
@Test
public void testLoad(){
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Person person = (Person)session.load(Person.class, 2);
System.out.println(person.getName());
if(person instanceof Student){
Student stu = (Student)person;
System.out.println(stu.getWork());
}
tx.commit();
}catch (HibernateException e) {
if(tx!=null)
tx.rollback();
e.printStackTrace();
throw e;
}finally{
HibernateUtil.closeSession();
}
}
}
5.测试结果
1.执行testSave()方法: