alxe1528

          BlogJava 聯系 聚合 管理
            3 Posts :: 11 Stories :: 2 Comments :: 0 Trackbacks

          實體類關系如圖所示:

          映射到數據庫中:

          1.單獨一張表(鑒別器)如圖

           

          配置文件寫法:

              <class name="Employee" table="employee"discriminator-value="0">
                  <id column="id" name="id">
                      <generator class="native" />
                  </id>
                  <discriminator column="type" type="int" />
                  <property name="name" />
                  <subclass name="Skiller" discriminator-value="1">
                      <property name="skill" />
                  </subclass>
                  <subclass name="Sales" discriminator-value="2">
                      <property name="sell" />
                  </subclass>
              </class>

          說明:discriminator 鑒別器,默認type是string。

                    subclass :子類

          總結:這種形式查詢速度快,但數據庫表結構不合理,表中有很多空的字段值。特別是子類特有的屬性很多的時候。

          2.父類和子類各映射一張表(內連接),如圖。

           

          配置文件寫法:

              <class name="Employee" table="employee">
                  <id column="id" name="id">
                      <generator class="native" />
                  </id>
                  <property  name="name" />
                  <joined-subclass name="Skiller" table="skiller">
                      <key column="emp_id"/>
                      <property name="skill"/>
                  </joined-subclass>
                  <joined-subclass name="Sales" table="sales">
                      <key column="emp_id"/>
                      <property name="sell"/>
                  </joined-subclass>
              </class>

          總結:這種形式數據庫表結構合理,但增刪改查的速度都較慢,性能不好。

          注意:查詢是最好注明子類類名(get(Sales.class , id) ),不要用多態查詢( get(Employee.class , id) ),不然性能會很差

          3.鑒別器與內連接結合。

          配置文件寫法:
          <class name="Employee" table="employee"discriminator-value="0">
                  <id column="id" name="id">
                      <generator class="native" />
                  </id>
                  <discriminator column="type" type="int" />
                  <property name="name" />
                  <subclass name="Skiller" discriminator-value="1">
                      <property name="skill" />
                  </subclass>
                  <subclass name="Sales" discriminator-value="2">
                      <join table="sales">
                          <key column="emp_id"/>
                          <property name="sell" />
                      </join>            
                  </subclass>
              </class>
          總結:這種形式一般是在Sales類特有的屬性很多,Skiller特有屬性少的時候用。

          4.每個具體類映射一張獨立表。


           配置文件寫法:

          <!-- 父類:Employee,采用每個具體類一張表的方式(抽象類不對應表) -->
              <class name="Employee" table="employee">
                  <id column="id" name="id">
                  <!-- 這時不能使用identity生成策略,因為要求整個繼承結構中所有的數據記錄的id不能重復。
                              因為下面是union-subclass  -->
                      <generator class="hilo" />
                  </id>
                  <property name="name" />
                  <union-subclass name="Skiller" table="skiller">
                      <property name="skill" />
                  </union-subclass>
                  <union-subclass name="Sales" table="sales">
                      <property name="sell"/>
                  </union-subclass>
              </class>

          若父類為抽象類,則將父類Class配置(第一句)寫成:

          <class name="Employee" table="employee" abstract="true">

          總結:這種形式 增刪改 的速度都很好,但 查詢 時較慢。

          posted on 2011-12-27 22:09 鄭健成 閱讀(81) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 盐城市| 湖南省| 平潭县| 叙永县| 桃江县| 房产| 玛曲县| 安乡县| 南溪县| 定兴县| 闽清县| 南安市| 阿拉善右旗| 财经| 三江| 敖汉旗| 巩留县| 永仁县| 荃湾区| 武定县| 株洲县| 灵丘县| 贡山| 正宁县| 淮北市| 怀仁县| 凌云县| 黑龙江省| 伊通| 青岛市| 手游| 汝阳县| 社会| 南皮县| 吉水县| 东明县| 洪雅县| 汨罗市| 浦北县| 黄梅县| 新宁县|