Hibernate 学习笔记(四)-- 实体层设计之Table per subclass

关于如何配置请参看:Hibernate 学习笔记(一)--用MyEclipse 6.5+MySQL 5.0的环境跑起来

准备:建表

用MySQL在名为STMS数据库中建表

Titem

Tbook

Tdvd

 src/org.lxh.hibernate3.TItem.java

 1 package  org.lxh.hibernate3;
 2 /**  
 3  *  @author  ∪∩BUG E-mail: [email protected]
 4  *  @version  Aug 31, 2008 3:27:51 PM 
 5  * @父类
 6   */

 7 public   class  TItem  {
 8
 9      private  String id;
10      private  String name;
11      private  String manufacturer;
12
13      public  String getId()  {
14          return  id;
15     }

16
17      public   void  setId(String id)  {
18          this .id  =  id;
19     }

20
21      public  String getName()  {
22          return  name;
23     }

24
25      public   void  setName(String name)  {
26          this .name  =  name;
27     }

28
29      public  String getManufacturer()  {
30          return  manufacturer;
31     }

32
33      public   void  setManufacturer(String manufacturer)  {
34          this .manufacturer  =  manufacturer;
35     }

36
37 }

38


 src/org.lxh.hibernate3.TBook.java

 1 package  org.lxh.hibernate3;
 2
 3 /**
 4  *  @author  ∪∩BUG E-mail: [email protected]
 5  *  @version  Aug 31, 2008 3:31:47 PM @ 继承父类TItem
 6   */

 7 public   class  TBook  extends  TItem  {
 8
 9      private   int  pageCount;
10
11      public   int  getPageCount()  {
12          return  pageCount;
13     }

14
15      public   void  setPageCount( int  pageCount)  {
16          this .pageCount  =  pageCount;
17     }

18 }

19


 src/org.lxh.hibernate3.TDvd.java

 1 package  org.lxh.hibernate3;
 2 /**  
 3  *  @author  ∪∩BUG E-mail: [email protected]
 4  *  @version  Aug 31, 2008 3:34:06 PM 
 5  * @ 继承父类TItem
 6   */

 7 public   class  TDvd  extends  TItem  {
 8
 9      private  String regionCode;
10
11      public  String getRegionCode()  {
12          return  regionCode;
13     }

14
15      public   void  setRegionCode(String regionCode)  {
16          this .regionCode  =  regionCode;
17     }

18
19 }

20


 src/org.lxh.hibernate3.Titem.hbm.xml

 1 xml version="1.0" encoding="utf-8" ?>
 2 DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
 4
 7 < hibernate-mapping >
 8     
 9      < class  name ="org.lxh.hibernate3.TItem"  table ="titem"
10         catalog ="stms" >
11          < id  name ="id"  type ="java.lang.String" >
12              < column  name ="id"  length ="32"   />
13              < generator  class ="assigned"   />
14          id >
15          < property  name ="name"  type ="java.lang.String" >
16              < column  name ="name"  length ="20"  not-null ="true"   />
17          property >
18          < property  name ="manufacturer"  type ="java.lang.String" >
19              < column  name ="manufacturer"  length ="20"   />
20          property >
21
22         
28          < joined-subclass  name ="org.lxh.hibernate3.TBook"
29             table ="TBook" >
30              < key  column ="id" > key >
31              < property  name ="pageCount"  type ="int"
32                 column ="pagecount" >
33              property >
34          joined-subclass >
35          < joined-subclass  name ="org.lxh.hibernate3.TDvd"  table ="TDvd" >
36              < key  column ="id" > key >
37              < property  name ="regionCode"  type ="string"
38                 column ="regioncode" >
39              property >
40          joined-subclass >
41      class >
42 hibernate-mapping >
43


 src/hibernate.cfg.xml

 1 xml version='1.0' encoding='UTF-8' ?>
 2 DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
 5
 6
 7 < hibernate-configuration >
 8
 9 < session-factory >
10      < property  name ="connection.username" > root property >
11      < property  name ="connection.url" >
12         jdbc:mysql://localhost:3306/STMS
13      property >
14      < property  name ="dialect" >
15         org.hibernate.dialect.MySQLDialect
16      property >
17      < property  name ="myeclipse.connection.profile" >
18         MySql_localhost
19      property >
20      < property  name ="connection.password" > root property >
21      < property  name ="connection.driver_class" >
22         com.mysql.jdbc.Driver
23      property >
24      < property  name ="show_sql" > true property >
25
26     
27      < mapping  resource ="org/lxh/hibernate3/Titem.hbm.xml"   />
28
29 session-factory >
30
31 hibernate-configuration >


 src/org.lxh.hibernate3.TItemOperate.java

 1 package  org.lxh.hibernate3;
 2
 3
 4
 5 import  java.util.Iterator;
 6
 7 import  org.hibernate.Query;
 8 import  org.hibernate.Session;
 9 import  org.hibernate.SessionFactory;
10 import  org.hibernate.cfg.Configuration;
11
12 /**  
13  *  @author  ∪∩BUG E-mail: [email protected]
14  *  @version  Aug 31, 2008 4:08:14 PM 
15  * @具体操作Hibernate类
16   */

17 public   class  TItemOperate  {
18      private  Session session;
19
20      public  TItemOperate()  {
21          // 找 到Hibernate配置文件
22         Configuration config  =   new  Configuration().configure();
23         
24          // 从 全局文件中取出SessionFactory
25         SessionFactory factory  =  config.buildSessionFactory();
26         
27          // 从 SessionFactory取出一个session
28          this .session  =  factory.openSession();
29     }

30
31      // 插入操 作
32      // TBook 和TDvd类都是TItem的子类,所以只需往TItem里插入就可以了.
33      public   void  insert(TItem item)  {
34          // 执 行语句
35          this .session.save(item);
36         
37          // 开 始事务.提交事务
38          this .session.beginTransaction().commit();
39          this .session.close();
40     }

41     
42      // 查询操 作
43      // TBook 和TDvd类都是TItem的子类,所以只需查询TItem的ID就可以了.
44      public  TItem QueryById(String id)  {
45         TItem item  =   new  TItem();
46         String hql  =   " FROM TItem as t WHERE t.id=? " ;
47         Query q  =   this .session.createQuery(hql);
48         q.setString( 0 , id);
49         Iterator iter  =  q.list().iterator();
50          if (iter.hasNext()) {
51             item  =  (TItem)iter.next();
52         }

53          return  item;
54     }

55 }

56


 src/org.lxh.hibernate3.Test.java

 1 package  org.lxh.hibernate3;
 2
 3 /**
 4  *  @author  ∪∩BUG E-mail: [email protected]
 5  *  @version  Aug 31, 2008 4:26:26 PM
 6  * @测试类
 7   */

 8 public   class  Test  {
 9
10      /**
11      *  @param  args
12       */

13      /**
14      *  @param  args
15       */

16      public   static   void  main(String[] args)  {
17
18         TItemOperate to  =   new  TItemOperate();
19         
20          /*
21         // 向数据库中插入数据
22         TBook book = new TBook();
23         book.setId("02");
24         book.setName("Hibernate");
25         book.setPageCount(31);
26         book.setManufacturer("Hibernate.org");
27
28         to.insert(book);
29         
30         TDvd dvd = new TDvd();
31         dvd.setId("03");
32         dvd.setManufacturer("Apache.org");
33         dvd.setName("Struts2");
34         dvd.setRegionCode("87");
35         
36         to.insert(dvd);
37          */

38         
39          // 查 询数据库
40         TBook book  =  (TBook)to.QueryById( " 01 " );
41         System.out.println(book.getName());
42     }

43
44 }

45

 

例子结构:

Hibernate 学习笔记(四)-- 实体层设计之Table per subclass_第1张图片

你可能感兴趣的:(Hibernate 学习笔记(四)-- 实体层设计之Table per subclass)