zoukankan      html  css  js  c++  java
  • Hibernate 中继承映射之三 每一个类一个表

    在数据库中建立表:

    mail:id,redipient,phone,address,postcode             <id><pk>

    post_mail:id,parcel_number                                  <id><pk,fk(mail)>

    express_mail:id,express_number,express_company  <id><pk,fk(mail)>

    新建java project项目:chapter14_pertable

    Add  Hibernate Capabilities

    手工编写  Delivery.java         PostDelivery.java            ExperssDelivey.java

    Delivery.java

    代码:

    /**
     *
     */
    package com.b510.examples;

    /**
     *
     * @author XHW
     *
     * @date 2011-7-9
     *
     */
    public class Delivery {

     private Integer id;
     private String recipient;
     private String phone;
     private String address;
     private String postcode;
     /**
      * @return the id
      */
     public Integer getId() {
      return id;
     }
     /**
      * @param id the id to set
      */
     public void setId(Integer id) {
      this.id = id;
     }
     /**
      * @return the recipient
      */
     public String getRecipient() {
      return recipient;
     }
     /**
      * @param recipient the recipient to set
      */
     public void setRecipient(String recipient) {
      this.recipient = recipient;
     }
     /**
      * @return the phone
      */
     public String getPhone() {
      return phone;
     }
     /**
      * @param phone the phone to set
      */
     public void setPhone(String phone) {
      this.phone = phone;
     }
     /**
      * @return the address
      */
     public String getAddress() {
      return address;
     }
     /**
      * @param address the address to set
      */
     public void setAddress(String address) {
      this.address = address;
     }
     /**
      * @return the postcode
      */
     public String getPostcode() {
      return postcode;
     }
     /**
      * @param postcode the postcode to set
      */
     public void setPostcode(String postcode) {
      this.postcode = postcode;
     }
     
    }

    PostDelivery.java

    代码:

    /**
     *
     */
    package com.b510.examples;

    /**
     *
     * @author XHW
     *
     * @date 2011-7-9
     *
     */
    public class PostDelivery extends Delivery{

     private String parcelNumber;

     /**
      * @return the parcelNumber
      */
     public String getparcelNumber() {
      return parcelNumber;
     }

     /**
      * @param parcelNumber the parcelNumber to set
      */
     public void setparcelNumber(String parcelNumber) {
      this.parcelNumber = parcelNumber;
     } 
    }

    ExpressDelivery.java

    代码;

    /**
     *
     */
    package com.b510.examples;

    /**
     *
     * @author XHW
     *
     * @date 2011-7-9
     *
     */
    public class ExpressDelivery extends Delivery {

     private String expressNumber;
     private String expressCompany;
     /**
      * @return the expressNumber
      */
     public String getExpressNumber() {
      return expressNumber;
     }
     /**
      * @param expressNumber the expressNumber to set
      */
     public void setExpressNumber(String expressNumber) {
      this.expressNumber = expressNumber;
     }
     /**
      * @return the expressCompany
      */
     public String getExpressCompany() {
      return expressCompany;
     }
     /**
      * @param expressCompany the expressCompany to set
      */
     public void setExpressCompany(String expressCompany) {
      this.expressCompany = expressCompany;
     }
    }

    Delivery.hbm.xml

    代码:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="com.b510.examples.Delivery" table="mail" catalog="users">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="increment" />
            </id>
            <property name="recipient" type="java.lang.String">
                <column name="recipient" length="200" />
            </property>
            <property name="phone" type="java.lang.String">
                <column name="phone" length="200" />
            </property>
            <property name="address" type="java.lang.String">
                <column name="address" length="400" />
            </property>
            <property name="postcode" type="java.lang.String">
                <column name="postcode" length="10" />
            </property>

      
            <joined-subclass name="com.b510.examples.PostDelivery" table="post_mail">
            <key column="id" foreign-key="id"></key>
            <property name="parcelNumber" type="java.lang.String">
                <column name="parcel_number" length="30" />
            </property>
            </joined-subclass>
            
            
            <joined-subclass name="com.b510.examples.ExpressDelivery" table="express_mail">
            <key column="id" foreign-key="id"></key>
            <property name="expressCompany" type="java.lang.String">
                <column name="express_company" length="40" />
            </property>
            <property name="expressNumber" type="java.lang.String">
                <column name="express_number" length="40" />
            </property>
            </joined-subclass>
        </class>
    </hibernate-mapping>

    测试代码:

    HibernateTest.java

    代码:

    /**
     *
     */
    package com.b510.examples;

    import java.util.List;

    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;

    /**
     *
     * @author XHW
     *
     * @date 2011-7-9
     *
     */
    public class HibernateTest {

     /**
      * @param args
      */
     public static void main(String[] args) {
      HibernateTest test=new HibernateTest();
      //test.insertDelivery();
      test.listPostDelivery();
      test.listExpressDelivery();
      
     }

     public void insertDelivery() {
      Session session = HibernateSessionFactoryUtil.getSessionFactory()
        .openSession();
      Transaction tx = session.beginTransaction();

      PostDelivery post = new PostDelivery();
      post.setRecipient("Hongten");
      post.setAddress("广州大学");
      post.setPhone("115");
      post.setPostcode("510006");
      post.setparcelNumber("订单号:ACD123SDJF23");

      ExpressDelivery express = new ExpressDelivery();
      express.setRecipient("HongWei");
      express.setAddress("四川成都");
      express.setPhone("123465");
      express.setPostcode("456789");
      express.setExpressNumber("订单号:423SDFSJDKLF");
      express.setExpressCompany("顺丰快递公司");
      try {
       session.save(post);
       session.save(express);
      } catch (Exception e) {
       e.printStackTrace();
       if (tx.isActive()) {
        tx.rollback();
       }
      }
      session.getTransaction().commit();
     }
     
     public void listPostDelivery(){
      Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
      session.beginTransaction();
      Query query=session.createQuery("from PostDelivery");
      List<PostDelivery> list=query.list();
      session.getTransaction().commit();
      for(PostDelivery post:list){
       System.out.println(post.getId());
       System.out.println(post.getAddress());
       System.out.println(post.getRecipient());
       System.out.println(post.getparcelNumber());
      }
     }
     public void listExpressDelivery(){
      Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
      session.beginTransaction();
      Query query=session.createQuery("from ExpressDelivery");
      List<ExpressDelivery> list=query.list();
      session.getTransaction().commit();
      for(ExpressDelivery express:list){
       System.out.println(express.getId());
       System.out.println(express.getAddress());
       System.out.println(express.getRecipient());
       System.out.println(express.getExpressCompany());
       System.out.println(express.getExpressNumber());
      }
     }
    }

    运行效果:

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate:
        select
            postdelive0_.id as id0_,
            postdelive0_1_.recipient as recipient0_,
            postdelive0_1_.phone as phone0_,
            postdelive0_1_.address as address0_,
            postdelive0_1_.postcode as postcode0_,
            postdelive0_.parcel_number as parcel2_1_
        from
            post_mail postdelive0_
        inner join
            users.mail postdelive0_1_
                on postdelive0_.id=postdelive0_1_.id
    1
    广州大学
    Hongten
    订单号:ACD123SDJF23
    Hibernate:
        select
            expressdel0_.id as id0_,
            expressdel0_1_.recipient as recipient0_,
            expressdel0_1_.phone as phone0_,
            expressdel0_1_.address as address0_,
            expressdel0_1_.postcode as postcode0_,
            expressdel0_.express_company as express2_2_,
            expressdel0_.express_number as express3_2_
        from
            express_mail expressdel0_
        inner join
            users.mail expressdel0_1_
                on expressdel0_.id=expressdel0_1_.id
    2
    四川成都
    HongWei
    顺丰快递公司
    订单号:423SDFSJDKLF

  • 相关阅读:
    Go语言基础之结构体练习
    多对多表操作
    一对多表操作
    单表操作
    flask中orm增删改查操作
    基于scoped_session实现线程安全
    SQLAlchemy
    wtforms 表单使用
    记一次攻防演练复盘之计中计
    【漏洞复现】CVE-2021-22205 GitLab 未授权RCE
  • 原文地址:https://www.cnblogs.com/hongten/p/2102048.html
Copyright © 2011-2022 走看看