Hibernate教程02——类继承(单表继承)

Hibernate教程02——类继承(单表继承)

一、简介

单表继承,每棵类继承树使用一张表(所有的类使用一个表)



父类(Animal)和子类(Pig、Bird)只生成一张表,该表中包括了父类和子类的所有属性,

   因为类继承树肯定是对应多个类,要把多个类的信息存放在一张表中,必须有某种机制来区分哪些记录是属于哪个类的。这种机制就是,在表中添加一个字段,用这个字段的值来进行区分。

  关于鉴别值(Type)在存储的时候hibernate会自动存储,在加载的时候会根据鉴别值取得相关的对象

t_animal

Id

Name

Sex

Weight

Height

Type

1

小猪

True

200

 

P

2

小鸟

False

 

50

B

 

 

二、Annotation介绍

@Entity

 

//声明类继承使用整个类层次使用一张表实现

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

 

//区分不同类的标识符在数据库中的列描述(名称、类型、长度)

@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING, length = 30)  

 

//区分不同类的标识符

@DiscriminatorValue("Tree") 

 

 

三、建立父类Tree(使用和上面不一样的类进行举例)

@Entity

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING, length = 30)  

@DiscriminatorValue("Tree") 

public class Tree {

@Id

@GeneratedValue

@Column(name = "id")

private Long id;

private String name;

private String description;

 

@ManyToOne

private Tree parent;

 

@OneToMany

private List<Tree> children;

 

public Long getId() {

return id;

}

 

public void setId(Long id) {

this.id = id;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public String getDescription() {

return description;

}

 

public void setDescription(String description) {

this.description = description;

}

 

public Tree getParent() {

return parent;

}

 

public void setParent(Tree parent) {

this.parent = parent;

}

 

 

 

public List<Tree> getChildren() {

return children;

}

 

public void setChildren(List<Tree> children) {

this.children = children;

}

}


 

四、建立子类Department

@Entity

@DiscriminatorValue("Department") 

public class Department extends Tree {

 

private String leader;

private String secondLeader;

private String link;

private String remarkk;

public String getLeader() {

return leader;

}

public void setLeader(String leader) {

this.leader = leader;

}

public String getSecondLeader() {

return secondLeader;

}

public void setSecondLeader(String secondLeader) {

this.secondLeader = secondLeader;

}

public String getLink() {

return link;

}

public void setLink(String link) {

this.link = link;

}

public String getRemarkk() {

return remarkk;

}

public void setRemarkk(String remarkk) {

this.remarkk = remarkk;

}


五、建立子类menu

@Entity

@DiscriminatorValue("Menu") 

public class Menu extends Tree {

private String link;

private String classname;

public String getLink() {

return link;

}

public void setLink(String link) {

this.link = link;

}

public String getClassname() {

return classname;

}

public void setClassname(String classname) {

this.classname = classname;

}

}


六、建立测试类

@Test

public void test02(){

 Session session = HibernateUtil.getSessionfactory().getCurrentSession();

     session.beginTransaction();

 

     Department tree = new Department();

     tree.setName("信息中心");

     tree.setDescription("信息中心");

     tree.setLeader("刘备");

     session.save(tree);

     

     Department tree2 = new Department();

     tree2.setName("软件二室");

     tree2.setDescription("软件二室");

     tree2.setLeader("张飞");

     tree2.setParent(tree);

     session.save(tree2);

     

     tree2 = new Department();

     tree2.setName("软件二室");

     tree2.setDescription("软件二室");

     tree2.setLeader("关羽");

     tree2.setParent(tree);

     session.save(tree2);

     

     tree2 = new Department();

     tree2.setName("软件二室");

     tree2.setDescription("软件二室");

     tree2.setLeader("赵云");

     tree2.setParent(tree);

     session.save(tree2);

 

     session.getTransaction().commit();

     

     HibernateUtil.getSessionfactory().close();

}

 

@Test

public void test03(){

 Session session = HibernateUtil.getSessionfactory().getCurrentSession();

     session.beginTransaction();

 

     Menu tree = new Menu();

     tree.setName("系统管理");

     tree.setDescription("系统配置的一些管理");

     tree.setLink("sys/admin");

     session.save(tree);

     

     Menu tree2 = new Menu();

     tree2.setName("用户管理");

     tree2.setDescription("用户配置的一些管理");

     tree2.setLink("sys/user");

     tree2.setParent(tree);

     session.save(tree2);

     

     tree2 = new Menu();

     tree2.setName("角色管理");

     tree2.setDescription("角色配置的一些管理");

     tree2.setLink("sys/role");

     tree2.setParent(tree);

     session.save(tree2);

 

     session.getTransaction().commit();      

     HibernateUtil.getSessionfactory().close();
}


七、 数据库的数据显示



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了使用Hibernate实现Java和数据库表的映射,需要进行以下步骤: 1. 创建Java,该必须包含一个默认构造函数,并且每个属性都必须有getter和setter方法。 2. 在Java上使用Hibernate注释,以指示Hibernate如何将该映射到数据库表。可以使用注释来指定表名、列名、主键、外键等信息。 3. 配置Hibernate,包括设置数据库连接、指定Hibernate所需的驱动程序、数据库方言等。 4. 使用Hibernate API创建数据访问对象(DAO),该DAO将提供CRUD(创建、读取、更新、删除)操作,可以使用Hibernate提供的现成的DAO实现或自己实现。 5. 在应用程序中使用DAO访问数据库。 下面是一个使用Hibernate实现Java和数据库表映射的示例: ``` @Entity @Table(name = "students") public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "email") private String email; // getters and setters } // DAO interface public interface StudentDao { void save(Student student); void update(Student student); void delete(Student student); List<Student> getAll(); Student getById(Long id); } // DAO implementation @Repository public class StudentDaoImpl implements StudentDao { @Autowired private SessionFactory sessionFactory; @Override public void save(Student student) { sessionFactory.getCurrentSession().save(student); } @Override public void update(Student student) { sessionFactory.getCurrentSession().update(student); } @Override public void delete(Student student) { sessionFactory.getCurrentSession().delete(student); } @Override public List<Student> getAll() { return sessionFactory.getCurrentSession() .createQuery("FROM Student", Student.class) .getResultList(); } @Override public Student getById(Long id) { return sessionFactory.getCurrentSession().get(Student.class, id); } } // usage public class Main { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); StudentDao studentDao = context.getBean(StudentDao.class); // create student Student student = new Student(); student.setName("John Doe"); student.setEmail("[email protected]"); // save student studentDao.save(student); // update student student.setEmail("[email protected]"); studentDao.update(student); // get student by id Student retrievedStudent = studentDao.getById(student.getId()); System.out.println(retrievedStudent); // delete student studentDao.delete(retrievedStudent); } } ``` 在这个示例中,我们创建了一个名为Student的Java,并使用Hibernate注释将其映射到数据库表students。我们还创建了一个StudentDao接口和其实现StudentDaoImpl,该实现使用Hibernate API访问数据库。最后,在Main中,我们使用Spring容器获取StudentDao实例,并使用它执行CRUD操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值