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)