zoukankan      html  css  js  c++  java
  • Hibernate---进度1

    关联映射:http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.html

    关联映射,hibernate查询方式:http://www.cnblogs.com/ablejava/p/5731018.html

     一、Hibernate的加载流程

      1.Hibernate配置文件的两种加载方式

      ①Configuration configuration = new Configuration();

      configuration.configure();

      public Configuration configure()throws HibernateException{

        configure("/hibernate.cfg.xml");

        return this;

    }

      ②Configuration configuration = new Configuration();

      configuration.configure(“”);

      public Configuration configure(String resource)throws HibernateException{

        log.info("configuring from resource:"+resource);

        InputStream stream = getconfigurationInputStream(resource);

        return doConfig(stream,resource);

    }

    二、crud操作

      1.创建configuration对象加载Hibernate的配置文件(配置文件中包含领域类和表的映射资源文件)

      2.通过configuration对象获得sessionfactory对象

      3.打开session:sessionFactory.openSession();

      4.用session进行查询

      5.开启事务:session.beaginTransaction();进行curd操作。提交事务,并关闭session;

     1 public void testSave{
     2     Configuration configuration = new Configuration();
     3     //加载类路径下的hibernate.cfg.xml
     4     configuration.configure();
     5     //调用sessionFactory
     6     SessionFactory sf = configuratiion.buildSessionFactory();
     7     //打开sessioin
     8     Session s = sf.openSession();
     9     //开启事务
    10     Transaction tr = s.beginTransaction();
    11     //进行保存操作
    12     Object obj = new Object();
    13     obj.set();
    14     .........
    15     s.save(obj);
    16     tr.commit();
    17     s.close()
    View Code

      

    三、关系操作

      1.对象的状态

      临时状态:new

      持久化状态:get save update

      脱管状态:clear close evict

      

      2,关系操作

      2.1 多对一和一对多单向关联映射

      多对一

     1 <hibernate-mappin>
     2     <class name="bean.User" table="t_user">
     3         <id name="id"><generator class="native"/></id>
     4         <property name="name"/>
     5         <!-- 使用《many-to-one》映射多对一关系。导出ddl时将自动生成一个外键 -->
     6         <many-to-one name="group" column="gid"/>
     7         
     8     </class>
     9 </hibernate-mappin>
    10 <hibernate-mappin>
    11     <class name="bean.Group" table="t_group">
    12         <id name="id"><generator class="native"/></id>
    13         <property name="name"/>
    14     </class>
    15 </hibernate-mappin>

      一对多

     1 <hibernate-mapping>
     2     <class name="bean.User" table="t_user">
     3         <id name="id"><generator class="native"/></id>
     4         <property name="name"/>
     5     </class>
     6 </hibernate-mapping>
     7 <hibernate-mapping>
     8     <class name="bean.Group" table="t_group">
     9         <id name="id"><generator class="native"/></id>
    10         <property name="name"/>
    11         <!-- 使用set映射集合 -->
    12         <set name="users">
    13         <!-- 使用《key》指定引用自身的外键表(t_user)中的外键 -->
    14         <key column="gid"/>
    15         <!-- 使用一对多的影视 -->
    16         <one-to-many class="bean.User"/>
    17         </set>
    18     </class>
    19 </hibernate-mapping>

    2.2双向关联

    <!-- bean/User.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.User" table="t_user">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
            <!-- 使用<many-to-one>映射多对一关系。导出ddl时将自动生成一个外键 -->
            <many-to-one name="group" column="gid"/>
        </class>
    </hibernate-mapping>
    <!-- bean/Group.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.Group" table="t_group">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
            <!-- 使用<set>映射集合 -->
            <set name="users">
                <!-- 使用<key>指定引用至自身的外键表(t_user)中的外键 -->
                <key column="gid"/>
                <!-- 使用<one-to-many>映射一对多关系 -->
                <one-to-many class="bean.User"/>
            </set>
        </class>
    </hibernate-mapping>

    双向关联中,为《set》加入“inverse=true”可以翻转维护关系:Hibernate将放弃从一的一端维护。user和group的关系必须使用user维护,操作group时Hibernate将不维护这个关系。

    <set name="users" inverse=true>
    

     操作group示例

    sessiion.beginTransation();
    User user = new User();
    user.setName("bla");
    
    Grop group = new Group();
    group.setName("admin");
    group.setUsers(new HashSet());
    group.getUsers().add(user);
    
    session.save(user);
    session.save(group);
    session.getTransaction().commit();
    //在一的一端翻转后,在多的一端进行维护
    session.beginTransaction();
    Group group = new Group();
    group.setName("admin");
     
    User user = new User();
    user.setName("张三");
    user.setGroup(group);
     
    session.save(group);
    session.save(user);
    session.getTransaction().commit()

    2.3 一对一关联映射

    依照映射方法不同,可分为主键关联映射唯一外键关联映射。主键关联是维护两张表的主键一致,如有必要还可以在主键上再加上外键约束;唯一外键关联则类似于多对一关联,为表加入一个外键列,不过一对一关联会同时将这个外键加上唯一约束。

      1、主键关联映射

      主键单向关联

    <!-- bean/User.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.User" table="t_user">
            <id name="id">
                <!-- 指定主键生成策略为外键 -->
                <generator class="foreign">
                    <!-- 指定要参照的属性 -->
                    <param name="property">group</param>
                </generator>
            </id>
            <property name="name"/>
            <!-- 使用<one-to-one>映射一对一关系。 -->
            <one-to-one name="group">
        </class>
    </hibernate-mapping>
    <!-- bean/Group.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.Group" table="t_group">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
        </class>
    </hibernate-mapping>

      主键双向关联

    <!-- bean/User.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.User" table="t_user">
            <id name="id">
                <!-- 指定主键生成策略为外键 -->
                <generator class="foreign">
                    <!-- 指定要参照的属性 -->
                    <param name="property">group</param>
                </generator>
            </id>
            <property name="name"/>
            <!-- 使用<one-to-one>映射一对一关系。 -->
            <one-to-one name="group">
        </class>
    </hibernate-mapping>
    <!-- bean/Group.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.Group" table="t_group">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
            <!-- 使用<one-to-one>映射一对一关系 -->
            <one-to-one name="user"/>
        </class>
    </hibernate-mapping>

      2、唯一外键关联映射

      单向

    <!-- bean/User.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.User" table="t_user">
            <id name="id">
                <generator class="native"/>
            </id>
            <property name="name"/>
            <!-- 为<many-to-one>加上unique就变成了一对一 -->
            <many-to-one name="group" unique="true" column="gid"/>
        </class>
    <!-- bean/Group.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.Group" table="t_group">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
        </class>
    </hibernate-mapping>

      双向

      

    <!-- bean/User.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.User" table="t_user">
            <id name="id">
                <generator class="native"/>
            </id>
            <property name="name"/>
            <!-- 为<many-to-one>加上unique就变成了一对一 -->
            <many-to-one name="group" unique="true" column="gid"/>
        </class>
    </hibernate-mapping>
    <!-- bean/Group.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.Group" table="t_group">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
            <!-- 使用<one-to-one>映射一对一 -->
            <one-to-one name="user"/>
        </class>
    </hibernate-mapping>

    2.4多对多关联

      单向 关联

      

    <hibernate-mapping>
        <class name="bean.User" table="t_user">
            <id name="id">
                <generator class="native"/>
            </id>
            <property name="name"/>
            <!-- 使用《set》映射集合,在多对多关系中,Hibernate将生成第三张表 -->
            <set name="groups" table="t_user_group">
                <!-- 使用key指定引用至自身的外键表(t_user_group)中的外键 -->
                <key column="userid"></key>
                <!-- 使用many-to-one映射多对多关系,column指定另一端在表t_user_group中的列 -->
                <many-to-many class="bean.Group" colun="groupid"></many-to-many>
            </set>
        </class>
    </hibernate-mapping>
    <hibernate-mapping>
        <class name="bean.Group" table="t_group">
            <id name="id"><generator class="native"/></id>
            <property name="name"/>
        </class>
    </hibernate-mapping>

      双向关联

    <!-- bean/User.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.User" table="t_user">
            <id name="id">
                <generator class="native"/>
            </id>
            <property name="name"/>
            <!-- 使用<set>映射集合,在多对多关系中,Hibernate将生成第三张表 -->
            <set name="groups" table="t_user_group">
                <!-- 使用<key>指定引用至自身的外键表(t_user_group)中的外键 -->
                <key column="userid"/>
                <!-- 使用<many-to-many>映射多对多关系,column指定另一端在表t_user_group中的列 -->
                <many-to-many class="bean.Group" column="groupid"/>
            </set>
        </class>
    </hibernate-mapping>
    <!-- bean/Group.hbm.xml -->
     
    <hibernate-mapping>
        <class name="bean.Group" table="t_group">
            <id name="id">
                <generator class="native"/>
            </id>
            <property name="name"/>
            <!-- 使用<set>映射集合,在多对多关系中,Hibernate将生成第三张表 -->
            <set name="users" table="t_user_group">
                <!-- 使用<key>指定引用至自身的外键表(t_user_group)中的外键 -->
                <key column="group"/>
                <!-- 使用<many-to-many>映射多对多关系,column指定另一端在表t_user_group中的列 -->
                <many-to-many class="bean.User" column="userid"/>
            </set>
        </class>
    </hibernate-mapping>

    多对多的双向关联同样可以在不想要维护关系的一端的<set>里设置inverse=”true”;但是必须有一端可以维护,也就是说只可以设置一个。

    四、Hibernate的优点

    五、hql语句

  • 相关阅读:
    宿舍助手app——个人工作第四天
    宿舍助手app——个人工作第三天
    对QQ输入法的评价
    冲刺9
    冲刺8
    冲刺7
    冲刺6
    冲刺5
    冲刺4
    冲刺3
  • 原文地址:https://www.cnblogs.com/jinb/p/6698580.html
Copyright © 2011-2022 走看看