Hibernate继承(1)单表继承

代码:

package bean;

import java.util.Date;

public class Person {

    private Integer id;
    private String name;
    private int password;
    private Date birthday;

    public Person()
    {

    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", password=" + password
                + ", birthday=" + birthday + "]";
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

}
package bean;

public class Student extends Person{

	private int classId;
	private String className;
	private int course;
	@Override
	public String toString() {
		return "Student [classId=" + classId + ", className=" + className
				+ ", course=" + course + ", getId()=" + getId()
				+ ", getName()=" + getName() + ", getPassword()="
				+ getPassword() + ", getBirthday()=" + getBirthday() + "]";
	}
	public int getClassId() {
		return classId;
	}
	public void setClassId(int classId) {
		this.classId = classId;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	public int getCourse() {
		return course;
	}
	public void setCourse(int course) {
		this.course = course;
	}

}

  

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<!-- 单表继承关系  配置实现
    因为是多个子类都存储在 同一张表中,为了区分不同的子类,单表继承策略使用了一个 辨别列(discriminator)
    注意:discriminator 辨别列一定要定义在 id 后面,紧跟id配置
    type="string" 指定辨别列类型  column="type_id" 辨别列名称

    通过subclass引入 子类

 -->
<hibernate-mapping package="bean">
    <class name="Person" table="t_person" >
        <id name="id"><generator class="identity"/></id>
        <discriminator type="string" column="type_id"/>
        <property name="name"/>
        <property name="password"/>
        <property name="birthday"/>

        <subclass name="Student">
            <property name="classId"/>
            <property name="className"/>
            <property name="course"/>
        </subclass>

    </class>

</hibernate-mapping>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- 显示执行SQL语句 -->
        <property name="show_sql">true</property>
         <!-- 格式化SQL语句 -->
        <property name="format_sql">false</property>
        <!-- 驱动 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 数据库url-->
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate_db</property>
        <!-- 访问数据库用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 访问数据库密码 -->
        <property name="hibernate.connection.password">root</property>
        <!-- 方言(为了更好的操作具体的数据库)
            如果使用的mysql数据版本在5.5之后的话,方言通常建议使用MySQL5InnoDBDialect
            MySQLDialect 不支持事务
            MySQLInnoDBDialect 支持事务
         -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 自动创建表结构配置
            create-drop 在程序启动的时候创建对应数据库表结构,当SessionFatory关闭的时候会将创建的表结构删除
            create 在每次程序启动的时候先删除上次创建的数据库表结构,然后再创建对应新数据库表结构。
            update 在每次启动的时候会追加修改的表结构,但是不会影响原来的数据 (通常用这个)
            validate 在每次启动的时候会验证并修改的表结构。
         -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- 引入对应的需要持久化类的配置文件 -->
        <mapping resource="bean/Person.hbm.xml"/>

    </session-factory>
</hibernate-configuration>
package Test;

import bean.Person;
import bean.Student;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateTest {
    SessionFactory  sessionFactory =null;
    Session session =null;
    Transaction tx = null;
    /**
     * 初始化测试数据
     * @throws Exception
     */

    public void setUp() throws Exception {
        System.out.println("------setUp---初始化测试资源-----");
        Configuration config = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        sessionFactory = config.buildSessionFactory(sr);
        session = sessionFactory.openSession();
    }

    public void testAdd(){
        Person p = new Person();
        p.setName("tom");
        p.setPassword(123456);
        p.setBirthday(new java.util.Date());

        tx = session.beginTransaction();

        session.persist(p);
        tx.commit();
    }

    public void testAdd2(){
        Student stu = new Student();
        stu.setName("stu");
        stu.setPassword(123456);
        stu.setBirthday(new java.util.Date());
        stu.setClassId(1206);
        stu.setClassName("J1206");
        stu.setCourse(90);
        tx = session.beginTransaction();

        session.persist(stu);
        tx.commit();
    }

    public void testGet(){

        Person p = (Person)session.get(Person.class, 1);

        System.out.println(p);

    }

    public void testGet2(){

        Student stu = (Student)session.get(Student.class, 2);

        System.out.println(stu);

    }

    /**
     * 释放测试数据
     * @throws Exception
     */

    public void tearDown() throws Exception {
        System.out.println("------tearDown---释放测试数据---");
        session.close();
        sessionFactory.close();
    }

    public static void main(String [] args) throws Exception
    {
        HibernateTest h = new HibernateTest();
        h.setUp();
        h.testAdd2();
        h.tearDown();
    }

}
时间: 2024-11-23 20:59:43

Hibernate继承(1)单表继承的相关文章

Hibernate初探之单表映射

http://www.imooc.com/video/7816 1.什么是ORM?为什么使用Hibernate? 对象关系映射:为了少写和底层数据库相关的sql语句,方便程序的维护.修改,提高跨平台性和可扩展性.Hibernate是Java领域内的一款技术成熟稳定的ORM框架 2.Hibernate开发的基本步骤? (1)编写配置文档hibernate.cfg.xml (2)编写实体类.注意:每一个实体类都要与数据库中的一张表一一对应,实体类的编写要遵循JavaBean的要求. (3)生成对应实

Hibernate初探之单表映射——创建对象-关系映射文件

编写一个Hibernate例子 第三步:创建对象-关系映射文件 以下是具体实现步骤: 找到我们要持久化的学生类Sudents 生成对象-关系映射文档Students.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourcefor

hibernate课程 初探单表映射2-6 session详解(下)

本节主要内容: 1 介绍了getCurrentSession和opensession的区别 2 demo:通过打印比较两个session是否相同,验证两个session是否是同一session 3 demo:通过打印hashcode验证不关闭session,容易连接池溢出. 1 getCurrentSession和opensession的区别 a getCurrentSession每次获取的都是同一连接,opensession每次获取的是不同的连接. b getCurrentSession不需要

hibernate课程 初探单表映射3-5 hibernate增删改查

本节简介: 1 增删改查写法 2 查询load和查询get方法的区别 3 demo 1 增删改查写法 增加 session.save() 修改 session.update() 删除 session.delete() 查询 session.get()/session.load() 2 查询load和查询get方法的区别 a get 不考虑缓存情况下,get会在调用之后立即向数据库发送sql语句,返回持久化对象.load 是调用后返回代理对象,该代理对象只保存实体对象id,只有使用对象非主键属性才

Hibernate初探之单表映射——通过Hibernate API编写访问数据库的代码

编写一个Hibernate例子 第五步:通过Hibernate API编写访问数据库的代码 初始化方法要实现以下功能: 原文地址:https://www.cnblogs.com/songsongblue/p/9523201.html

Hibernate初探之单表映射——创建持久化类

编写第一个Hibernate例子 第二步:创建持久化类(持久化类的设计原则要遵循javabeans的设计原则) javabeans的设计原则: 1.公有的类2.提供公有的不带参数的默认的构造方法3.属性私有 4.属性setter/getter封装 新建一个Students类(持久化类) import java.util.Date; //学生类 public class Students { // 1.公有的类 // 2.提供公有的不带参数的默认的构造方法 // 3.属性私有 // 4.属性set

hibernate课程 初探单表映射3-3 对象类型

本节简介: 1 简介对象类型(重点是音视频blob类型) 2 demo(对图片的写入数据库与读取) 1 简介对象类型 映射类型 java类型 标准sql类型 mysql类型 oracle类型 binary byte[] varchar blob blob text(大文本类型) java.lang.String clob text   clob clob(大文本类型)    java.sql.Clob clob text clob blob(二进制数据类型)  java.sql.Blob blo

Hibernate学习---第八节:继承关系的映射配置

1.单表继承 (1).实体类,代码如下: package learn.hibernate.bean; import java.util.Date; /** * 持久化类设计 * 注意: * 持久化类通常建议要有一个持久化标识符(ID) * 持久化标识符通常建议使用封装类(例如:Integer 因为基本类型存在默认值) * 持久化类通常建议手动添加一个无参构造函数 (因为有些操作是通过放射机制进行的) * 属性通常建议提供 getter/setter 方法 * 持久化类不能使用 final 修饰

算法-javascript自实现继承extend(单次继承原型对象和单次继承构造函数)

# 自实现继承(单次继承构造函数)  //父类的构造函数   function Father(name,age){    this.name=name    this.age=age   }      //父类的原型对象   Father.prototype={    constructor:Father,    say:function(){     console.log('i am '+this.name+' ,'+this.age+' years old')    }   }