hibernate学习总结12

学习hibernate实战(2),总结一下各种类映射选择的作用。

1、动态SQL生成

hibernate在启动的时候默认会为持久化类生成简单的SQL语句,如读取单个实体,删除单个实体,更新单个实体,保存单个实体。但是默认生成的insert和update是会包含这个持久化类的所有映射字段的。很多时候我们可能只是想更新某一个字段而已,若使用默认生成的update,则会将所有的字段都更新,没有改变的就使用旧值,这样很明显是影响性能的。

这里可以使用<class dynamic-insert="true" dynamic-update="true" >来告诉hibernate不默认生成SQL,而是根据字段是否为NULL或者字段是否被修改,来动态的生成SQL语句。

2、不可变实体类

有时候数据库的记录是不允许改变的,这个时候我们可以将记录对应的持久化类设置为不可变类,没有get/set方法,在构造函数中设值,配置文件的设置如下:

<class mutable="false" access="field">即设置了该类不允许update,属性访问不通过get/set,直接通过field。

3、声明包名称

下面这两种写法是等价的

<hibernate-mapping package="com.study.hbm" >
    <class name="Message" table="MESSAGE">

<hibernate-mapping>
    <class name="com.study.hbm.Message" table="MESSAGE">

4、使用衍生属性

衍生属性的值在运行时计算,通过利用formula属性定义的表达式求值。例如,可以把totalPrice属性映射到SQL表达式

<property name="totalPrice" formula="(select sum(o.price) from orders o where o.cid=cid)" />

5、组件映射

对象领域模型中,有一种是整体和部分的关系,比如User和Address之间的关系,关系领域中无法表示这种关系,hibernate可以利用组件映射的方式完成组件对象到关系表的映射。

<component name="address" class="com.hbm.address">

<component name="location" class="" >

<property name="" />

</component>

<property name="" />

</component>

上面的配置无法从address导航到user,通过添加parent=true,则可以从address导航到user,实现双向导航。

6、类映射方式

hibernate提供几种机制映射类到数据库表,<class>,<subclass>,<union-class>,<join-class>

7、值映射方式

对于简单的属性值,利用<property>映射表字段,类的值类型则利用<component>映射类的属性到表字段。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值