<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Skynet

    ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks
    此方法在快速建立項目原型上有很大幫助(這最關鍵的就是速度,用的好原型很快就能建立起來)

    先確定下“快速原型”環境定義:
      使用:ant+hibernate_xdoclet+hibernate_create_table
      過程:定義bean(xdoclet) -> hbm映射文件 -> hibernate.hbm2ddl.auto create -> 邏輯
      注意:如有使用泛型,請使用 > xjavadoc-1.1.jar

    build.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project>
        
    <property file="build-dist.properties" />

        
    <path id="class.path">
            
    <fileset dir="${ant.lib.dir}">
                
    <include name="*.jar" />
            
    </fileset>
            
    <fileset dir="${project.lib.dir}">
                
    <include name="*.jar" />
            
    </fileset>
        
    </path>

        
    <!-- =================================================================== -->
        
    <!-- Initialise                                                          -->
        
    <!-- =================================================================== -->
        
    <target name="init">
            
    <taskdef name="hibernatedoclet" classname="xdoclet.modules.hibernate.HibernateDocletTask" classpathref="class.path" />
        
    </target>

        
    <!-- =================================================================== -->
        
    <!-- Invoke XDoclet's hibernate                                          -->
        
    <!-- =================================================================== -->
        
    <target name="hibernate" depends="init">

            
    <echo>+---------------------------------------------------+</echo>
            
    <echo>|                                                   |</echo>
            
    <echo>| R U N N I N G   H I B E R N A T E D O C L E T     |</echo>
            
    <echo>|                                                   |</echo>
            
    <echo>+---------------------------------------------------+</echo>

            
    <hibernatedoclet destdir="${config.dir}" mergedir="${config.dir}" excludedtags="@version,@author,@todo,@see" addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}" force="${samples.xdoclet.force}" verbose="false">
                
    <fileset dir="${src.dir}">
                    
    <include name="bean/**/*.java" />
                
    </fileset>
                
    <hibernate version="3.0" />
            
    </hibernatedoclet>

        
    </target>

    </project>


    ant配置文件
    # 當然根據你自己的項目路徑
    ant.lib.dir 
    = C:\\src\\test\\hbmTest\\action\\lib
    project.lib.dir
    = C:\\src\\test\\hbmTest\\lib
    src.dir 
    = C:\\src\\test\\hbmTest\\src
    config.dir 
    = C:\\src\\test\\hbmTest\\config



    hibernate.hbm.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
    >
    <hibernate-configuration>
        
    <session-factory>
            
    <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
            
    <property name="connection.url">
                
    <![CDATA[             
                jdbc:mysql://localhost:3306/hbm?characterEncoding=utf8&connectionCollation=gbk_chinese_ci
                
    ]]>
            
    </property>
            
    <property name="hibernate.connection.username">root</property>
            
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            
    <property name="hibernate.connection.password">******</property>
            
    <property name="hibernate.hbm2ddl.auto">create</property>
            
    <property name="hibernate.show_sql">true</property>
            <!-- 映射添加 -->
            
    <mapping resource="bean\unidirectional\m2o\Person.hbm.xml"/>
            
    <mapping resource="bean\unidirectional\m2o\Address.hbm.xml"/>
            
        
    </session-factory>
    </hibernate-configuration>



    下面就詳細介紹了第一個
    單項一對多
    1.先定義bean
    package bean.unidirectional.m2o;
    /**
     * @hibernate.class

     
    */
    public class Person {
        
    private int id;
        
    private Address address;

        
    /**
         * @hibernate.id generator-class = "native"

         
    */
        
    public int getId() {
            
    return id;
        }

        
    public void setId(int id) {
            
    this.id = id;
        }

        
    /**
         * @hibernate.many-to-one column = "addressId" not-null = "true"

         
    */
        
    public Address getAddress() {
            
    return address;
        }

        
    public void setAddress(Address address) {
            
    this.address = address;
        }
    }


    package bean.unidirectional.m2o;

    /**
     * @hibernate.class

     
    */
    public class Address {
        
    private int id;

        
    /**
         * @hibernate.id generator-class = "native"
         
    */
        
    public int getId() {
            
    return id;
        }

        
    public void setId(int id) {
            
    this.id = id;
        }

    }

    2.運行 ant hibernate 得到 hbm 映射文件

    3.Main 運行測試


    import java.util.List;

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

    import util.HibernateUtil;
    import bean.unidirectional.m2o.Address;
    import bean.unidirectional.m2o.Person;

    public class Main {
        
    public static void main(String[] args) {
            Session session1 
    = HibernateUtil.currentSession();
            Transaction t1 
    = session1.beginTransaction();
            
    //insert
            Address address1 = new Address();
            Address address2 
    = new Address();
            
            Person person1 
    = new Person();
            Person person2 
    = new Person();
                person1.setAddress(address1);
                person2.setAddress(address1);
            Person person3 
    = new Person();
            person3.setAddress(address2);
            
            session1.save(address1);
            session1.save(address2);
            session1.save(person1);
            session1.save(person2);
            session1.save(person3);
            t1.commit();
            
            
    //查詢有重復的 address 
            Session session2 = HibernateUtil.currentSession();
            Query query 
    = session2.createQuery(
                    
    " select ta from "+
                        Address.
    class.getName()+" ta , "+
                        Person.
    class.getName()+" tp "+
                    
    " where ta.id=tp.address "+
                    
    " group by ta.id having count(ta.id)>1 "
            );
            
            List
    <Address> list =  query.list();
            
    for(Address atmp : list ){
                System.out.println( atmp.getId() );
            }
        }
    }

    數據庫:
    mysql> show tables ;
    +-----------------------+
    | Tables_in_hbm  |
    +-----------------------+
    | address             |
    | person              |
    +-----------------------+
    結果:
    Hibernate: insert into Address values ( )
    Hibernate: insert into Address values ( )
    Hibernate: insert into Person (addressId) values (?)
    Hibernate: insert into Person (addressId) values (?)
    Hibernate: insert into Person (addressId) values (?)
    Hibernate: select address0_.id as id from Address address0_, Person person1_ where address0_.id=person1_.addressId group by address0_.id having count(address0_.id)>1
    1




    當然我這文章主要是映射關系,下面我們就進主題,大家想嘗試下可以使用上面的原型快速測試:參考(在此我對參考加入了自己的注解,希望能給大家幫助。對于在實際開發中不常見或難以實現的我們就不介紹了)

    單向一對一(one to one)

    #通過外鍵關聯
    <class name="Person">

    <id name="id" column="personId">

    <generator class="native"/>

    </id>

    <many-to-one name="address"

    column="addressId"

    unique="true"

    not-null="true"/>


    </class>



    <class name="Address">

    <id name="id" column="addressId">

    <generator class="native"/>

    </id>

    </class>
    create table Person ( personId bigint not null primary key, addressId bigint not null unique )

    create table Address ( addressId bigint not null primary key )


    #通過主鍵關聯(請注意,例子中掉換了關聯的方向
    <class name
    ="Person">
        <id name
    ="id" column="personId">
            <generator class
    ="native"/>
        </id>
    </class>

    <class name
    ="Address">
        <id name
    ="id" column="personId">
            <generator class
    ="foreign">
                <param name
    ="property"
    >person</param>
            </generator>

        </id>
        <one-to-one name
    ="person" constrained="true"/>
    </class>

    create table Person ( personId bigint not null primary key )
    create table Address ( personId bigint not null primary key )
           

     

    單向一對多(one to many)

    <class name="Person">
        <id name
    ="id" column="personId">
            <generator class
    ="native"/>
        </id>
        <set name
    ="addresses">
            <key column
    ="personId" not-null="true"/>
            <one-to-many class
    ="Address"
    />
        </set>

    </class>

    <class name
    ="Address">
        <id name
    ="id" column="addressId">
            <generator class
    ="native"/>
        </id>
    </class>

    create table Person ( personId bigint not null primary key )
    create table Address ( addressId bigint not null primary key
    , personId bigint not null

    # 這里 當 ddl主鍵對象 會多出 n條 被外鍵對象的 update
    # 解決辦法修改映射為雙向,并且
    set-inverse= "false"并且 在代碼中‘孩子.set父親()’和 父親.add孩子()一定要寫明
    # 如果不希望硬代碼 就 set-inverse="true" 父親.add孩子()’在生成sql 中就會有多余的update
    # 當然根據邏輯情況來選擇


    /**
     * @hibernate.class
     * 
     
    */
    public class Person {
        
    private int id;
        
    private Set<Address> addresss;
        
        
    /**
         * @hibernate.id 
         *   generator-class = "native"
         * 
    @return
         
    */
        
    public int getId() {
            
    return id;
        }

        
    public void setId(int id) {
            
    this.id = id;
        }
        
        
    /**
         * @hibernate.set inverse = "false" 
         *     @hibernate.collection-key column ="personId"
         *  @hibernate.collection-one-to-many class = "bean.unidirectional.m2o.Address" 
         
    */
        
    public Set<Address> getAddresss() {
            
    return addresss;
        }

        
    public void setAddresss(Set<Address> addresss) {
            
    this.addresss = addresss;
        }


    }




    /**
     * @hibernate.class
     * 
    @author root
     * 
     
    */
    public class Address {
        
    private int id;
        
    private Person person ;
        
        
    /**
         * @hibernate.id generator-class = "native"
         
    */
        
    public int getId() {
            
    return id;
        }

        
    public void setId(int id) {
            
    this.id = id;
        }
        
    /**
         * @hibernate.many-to-one 
         *     column = "personId"
         * 
    @return
         
    */
        
    public Person getPerson() {
            
    return person;
        }

        
    public void setPerson(Person person) {
            
    this.person = person;
        }
        

    }



        
    public static void main(String[] args) {
            Session session1 
    = HibernateUtil.currentSession();
            Transaction t1 
    = session1.beginTransaction();
            
    //insert
            Address address1 = new Address();
            Address address2 
    = new Address();
            Set
    <Address> addresss = new HashSet<Address>();
            addresss.add(address1);
            addresss.add(address2);
            
            Person person1 
    = new Person();
                person1.setAddresss(addresss);
            
            address1.setPerson(person1);
            address2.setPerson(person1);
            
            session1.save(person1);        
            session1.save(address1);
            session1.save(address2);

            t1.commit();
            
            
    //查詢有重復的 address 
            Session session2 = HibernateUtil.currentSession();
            Query query 
    = session2.createQuery(
                    
    "  from "+Person.class.getName()+" tp "
            );
            
            List
    <Person> list =  query.list();
            
    for(Person ptmp : list ){
                
    for( Address atmp : ptmp.getAddresss() ){
                    System.out.println(atmp.getId());
                }
            }


    結果:干凈的 insert
    Hibernate: insert into Person values ( )
    Hibernate: 
    insert into Address values ( )
    Hibernate: 
    insert into Address values ( )
    Hibernate: 
    select person0_.id as id from Person person0_
    1
    2

    mysql :
    mysql> select * from address ;
    +----+----------+
    | id | personId |
    +----+----------+
    |  1 |        1 |
    |  2 |        1 |
    +----+----------+
    2 rows in set (0.00 sec)


     






    整理 m.tkk7.com/Good-Game
    posted on 2008-10-03 16:54 劉凱毅 閱讀(1743) 評論(0)  編輯  收藏 所屬分類: 持久層

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧洲中文日韩久久AV乱码| 亚洲五月六月丁香激情| jizz免费在线影视观看网站| 亚洲高清专区日韩精品| 最近高清中文字幕无吗免费看| 亚洲av日韩av永久在线观看| 亚洲午夜国产精品无码| 成年人网站免费视频| 免费看一级一级人妻片| 亚洲av不卡一区二区三区| 日韩一品在线播放视频一品免费| 中文在线免费看视频| 亚洲一级特黄特黄的大片| 老司机亚洲精品影视www| 久久久久久久免费视频| www免费黄色网| 亚洲精品国产精品| 亚洲视频在线视频| 亚洲日本va午夜中文字幕久久| 2021在线观看视频精品免费| 日韩大片免费观看视频播放| 亚洲精选在线观看| 亚洲人成电影在线播放| 歪歪漫画在线观看官网免费阅读| 伊人久久大香线蕉免费视频| 亚洲av无码一区二区三区在线播放| 亚洲精品私拍国产福利在线| 国产黄色一级毛片亚洲黄片大全| 亚洲欧洲免费无码| 99re热精品视频国产免费| 精品国产污污免费网站入口在线| 亚洲乱码日产精品一二三| 亚洲精品在线免费看| 久久精品亚洲综合| 亚洲中文字幕无码爆乳av中文| 天天操夜夜操免费视频| 在线精品一卡乱码免费| 一级毛片全部免费播放| 中文在线免费看视频| 国产VA免费精品高清在线| 在线观看免费亚洲|