Hibernate基础概念

来源:互联网 发布:c语言函数声明和调用 编辑:程序博客网 时间:2024/06/13 14:13

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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机停机了收不到快递取件码怎么办 买东西货到了不小心确认收货怎么办 不小心用了蚂蚁花呗怎么办 q微店忘记密码怎么办微忘记密 在优酷买了开通会员不想续费怎么办 微店怎么卖吃的要认证怎么办 在天猫买东西遇到不讲理卖家怎么办 天猫退货收到退款了卖家拒绝怎么办 申请退款保证金不够的情况下怎么办 发奖品把钱骗走了应该怎么办? 淘宝东西没到自动确认了收货怎么办 淘宝买的东西收不到货怎么办 资料如实填了 怎么办不下来借款啊 如果淘宝店家跑了没收到货怎么办 淘宝店家退完款把货又发了怎么办 淘宝收到货有问题客服不回复怎么办 手机从美国寄回中国被海关扣怎么办 摩托车新买的后悔了想卖怎么办? 淘宝单号输错了怎么办运费险 在淘宝卖东西快递单号输错了怎么办 淘宝买东西签收后发现坏了怎么办 摩托车购车发票写了别人名字怎么办 新领的发票跟电脑对不上号怎么办 淘宝未发货退款卖家拒绝怎么办 在超市买东西把票丢了不让出怎么办 在淘宝上买东西付款不发货怎么办 买家拍下商品卖家拒绝发货怎么办 没有中文标签被投诉到工商局怎么办 淘宝申请退款卖家强制发货怎么办 1688卖家交易不小心关闭怎么办 拼多多两天不发货怎么办自动退款吗 在家里放的东西找不到了怎么办 在家里烧东西烟太大了怎么办 转转上买的二手东西有问题怎么办? 大巴车过虎门大桥错走小车道怎么办 pe高压膜中间松两边紧怎么办? 穿着浅口的高跟鞋走路老是掉怎么办 五吧同城模特兼职被骗了怎么办 华为手机充电玩黑屏怎么办教学视频 衣服肩膀被衣架撑变形了怎么办 货已经安到客户家客户不付款怎么办