Hibernate基础概念

Hibernate:

表示层–业务逻辑层–持久层–数据库层

域模型(实体模型),面向对象的概念

关系模型,是关系型数据库的概念


ORM(Object Relational Mapping),对象关系映射

关系模型映射成对象模型

Hibernate就是实现ORM的框架


Hibernate对象状态(Object States)

瞬时(Transient)态:由new操作符创建,且尚未与Hibernate Session关联的对象被认为瞬时的。

持久(Persistent)态:持久的实例在数据库中有对应的记录,并拥有一个持久化标识(identifiy)。

脱管(Detached)态:与持久对象关联的Session被关闭后,对象就变为脱管态。


<hibernate-mapping package="net.zhx.po">
    <class name="Student" table="t_student">
        <id name="id" column="sid">
            <!-- Id生成策略 -->
            <generator class="native"></generator>
        </id>
    </class>
</hibernate-mapping>

Id生成策略:
uuid
uuid2
native
assigned:需要手动设置id,默认


Hibernate 映射

基本映射

关联映射
一对一(one-one)
一对多(one-many,many-one)
多对多(many-many)

一对多(One-to-Many)

<hibernate-mapping package="net.zhx.po">
    <class name="User" table="t_user">
        <id name="id" column="uid">
            <generator class="native"></generator>
        </id>
        <property name="name" length="20"></property>
        <property name="password"></property>
        <many-to-one name="group" foreign-key="fk_user_groupid_group_gid">
            <column name="group_id"></column>
        </many-to-one>
    </class>
</hibernate-mapping>

Lazy策略(懒加载,延时加载)
Hibernate支持的Lazy策略只有在session打开的状态下才有效
User user = (User)session.load(User.class, 1);
User user = (User)session.get(User.class, 1);
Load是支持Lazy加载的:在真正使用对象的时候才会去发SQL查询


一对一(One-to-One)

主键参照(让两个实体对象的ID保持相同)
外键参照(可以看作特殊的多对一关系)

多对一(Many-to-One)

<hibernate-mapping package="net.zhx.po">
    <class name="Student" table="t_student">
        <id name="id" column="sid">
            <generator class="native"></generator>
        </id>
        <property name="name"></property>
        <many-to-one name="classes" foreign-key="fk_student_cid_classes_cid">
            <column name="cid"></column>
        </many-to-one>
    </class>
</hibernate-mapping>

多对多(Many-to-Many)

<hibernate-mapping package="net.zhx.po">
    <class name="User" table="t_user">
        <id name="id" column="uid">
            <generator class="native"></generator>
        </id>
        <property name="name"></property>
        <!-- table="r_user_role":指定中间表的名称 -->
        <set name="roles" table="r_user_role">
            <!-- 在中间表里面关联上自己id的字段名和外键名 -->
            <key column="uid" foreign-key="fk_userrole_uid_user_uid"></key>
            <many-to-many class="Role" foreign-key="fk_userrole_rid_role_rid">
                <column name="rid"></column>
            </many-to-many>
        </set>
    </class>
</hibernate-mapping>


<hibernate-mapping package="net.zhx.po">
    <class name="Role" table="t_role">
        <id name="id" column="rid">
            <generator class="native"></generator>
        </id>
        <property name="name"></property>
        <set name="users" table="r_user_role">
            <key column="rid" foreign-key="fk_userrole_rid_role_rid"></key>
            <many-to-many class="User" foreign-key="fk_userrole_uid_user_uid" column="uid"></many-to-many>
        </set>
    </class>
</hibernate-mapping>

继承映射(三种策略)
–单表继承(每颗类继承树使用一张表)—>(好处:节约表 坏处:子类的字段必须不能不为空)
–具体表继承(父类和每个子类各一张表,子类表只有id和自己的属性)
–类表继承(每个具体类一张表)

其他映射
–组件映射(Component Mapping)
–联合主键映射(Composite Mapping)
–集合映射(Set,List,Array,Map)
–自关联

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值