hibernate

作者: 闫子扬 | 来源:发表于2017-10-12 16:27 被阅读0次

    构建hibernate项目

    1. 导入相关jar包
    2. 配置hibernate.cfg.xml
      1. 导头。hibernate-mapping-3.0.dtd

        <!DOCTYPE hibernate-mapping
        SYSTEM
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >


    <hibernate-mapping package="cn.com.pojo">

    <class name="User" table="userinfo" dynamic-update="true">

    <id name="userId" column="userId">

    <generator class="native"></generator>


    </id>

    <property name="username" column="loginname" type="string"></property>

    <property name="password"></property>
    <property name="regDate" type="java.sql.Date"></property>
    </class>
    </hibernate-mapping>

        <!-- 联合主键 -->
        <composite-id name="pk">
            <key-property name="sid" column="sid"></key-property>
            <key-property name="cid" column="cid"></key-property>
        </composite-id>
    
        <!-- 一对多配置 name是属性名称 -->
        <!-- 配置双向一对多关联或双向多对多关联中 由谁来管理双方的关联关系 设置true由对方管理 -->
        <!-- cascade会级联更新或删除。但是没有特殊情况,一般不设置。 -->
        <set name="students" lazy="extra" inverse="true">
            <!-- 关联的数据表外键 -->
            <key column="classid"></key>
            <!-- 关联的数据类型 -->
            <one-to-many class="Student"/>
        </set>
    
        <!-- 多对多配置  name是关联属性名称 table是第三张中间表名字-->
        <set name="students" table="scoretbl">
            <key column="cid"></key>
            <many-to-many class="Student" column="sid"></many-to-many>
        </set>
    
        <!-- 多对一配置  name表示的是类中属性名 column是关联的外键列的名称 class是关联类型 -->
        <many-to-one name="classTbl" column="classid" class="ClassTbl" lazy="false"></many-to-one>
        <!-- 多对多配置  name是关联属性名称 table是第三张中间表名字-->
        <set name="courses" table="scoretbl">
            <key column="sid"></key>
            <many-to-many class="Course" column="cid"></many-to-many>
        </set>
    

    单例设计模式:保证应用中只有一个相关对象可用。往往是管理者。

    1. 饿汉模式
    2. 懒汉模式
    • 私有的静态属性。
    • 私有的构造函数。从外部无法new对象。
    • 对外提供静态的访问方法,返回可用对象。
    • 方法加多线程控制synchronized。防止多线程并发访问。

    实体对象关联映射(ORM-mapping)

    • 1 一对一 <one-to-one>
    • 2 一对多 <set> <one-to-many> </set> / 多对一 <many-to-one>
    • 3 多对多 <set> <many-to-many> </set>

    一:查询方式

    1. 立即查询 lazy="false";

    2. 延时检索 lazy="true";

    3. 表连接检索 fetch="select"; 近似理解为立即检索
      fetch="join"; 采用左外连接检索

      多表连接查询

      1. select [] from tbl1 t1,tbl2 t2 where t1.id1=t2.id2
      2. 左外连接查询,可将左表中没有关联的记录查出
        1. select st.sname,ct.classname from classtbl ct left join studenttbl st on st.classid=ct.classid

    二:控制反转 invers="true" 由简单的一方去管理,在复杂的一方做这个设置

    三:级联 cascade="all/delete/none/update/save" 慎用级联

    相关文章

      网友评论

          本文标题:hibernate

          本文链接:https://www.haomeiwen.com/subject/wlroyxtx.html