`
xuxiaolei
  • 浏览: 150551 次
  • 性别: Icon_minigender_1
  • 来自: 彩虹之巅
社区版块
存档分类

hibernate实战(第2版)读书笔记(一)

阅读更多

最近时间重读hibernate实战(第2版),哈哈,很长时间不用几乎都忘完了。现在作为读书笔记记录下来,以供自己和别人参考。部分例子摘自hibernate实战(第2版)书中。本人能力有限,难免出现错误的地方,欢迎指正。

在hibernate使用seqence的主键生成策略时候,要这样写(下面的写法是针对HSQLDB,不清楚在其他数据库也通用)

<id column="MY_ID">
 <generator class="sequence">
  <param name="sequence">MY_SEQUENCE</param>
  <param name="parameters">
    START WITH 1 INCREMENT BY 1
  </param>
 </generator>
<id>

 hibernate实战(第2版)书中是这样写的 INCREMENT 1 START WITH 1,这样写插入的call next value for MY_SEQUENCE 返回的是0,START WITH 1 INCREMENT BY 1 执行call next value for MY_SEQUENCE返回的是1,这样奇怪的问题,难道是hsqldb有bug?我也没有去做过多的深究。

 

<class dynamic-insert="true" dynamic-update="true">

dynamic-insert 属性告诉hibernate是否在insert语句中包含空的属性值(设置为true,是表明在insert语句中不包含为null的属性,也就是insert语句中包含的属性必须是非空的字段)。

dynamic-update属性告诉hibernate是否在update语句中包含未被修改的属性值(设置为true,表明update语句中不包含未修改的字段)。

这两个属性在某些地方会有用,比如说在更新中设置dynamic-update=true,如果你仅仅更新了一个属性,没有必要把其他属性的更新也放在sql中,也提高了数据库的执行效率。但是也带来一个副作用,可能就是hibernate要进行比较每个属性的值,来决定是否在sql语句中包含这个字段。当然这对 字段比较多的类是比较有用的。dynamic-insert在做insert操作时候,也是如此。

 

<hibernate-mapping default-access="field">
<class mutable="false">

  标记这个类为不可变类。这样hibernate就可以避免做脏检查。为了保持这个不可变属性,最好不写set方法,仅仅保留get方法。设置值通过构造来设置。还要明确指示hibernate访问这个类的字段要通过field来访问,而不是通过get-set方法,这个由 hibernate-mapping的 default-access="field"来设置。

 

<hibernate-mapping auto-import="false">
 <import class="mypackage.Class" rename="Hello" />
</hibernate-mapping>

 一般情况下,你写一个类的映射后,hibernate 会自动的导入到HQL的命名空间中。你在HQL查询时候可以仅仅通过类名,而不是包名.类名来使用指定的类了。但是,存在这样一种情况,如果在不同包中有相同的类名,在HQL中就会引起歧义,不过一个很好的办法就是在hibernate-mapping中关闭自动导入的属性,采取显式导入,然后重命名之。这样,你在HQL中就可以直接写 from Hello,而避免了歧义。

 

<hibernate-mapping package="mypackage.model">

 定义package这个属性,可以在这个映射文件中给所有未以包名开头的类名加上定义的包作为前缀。

 

<property name="description" column="`description`">

 之所以加反引号,是因为你觉得可能description在特定的数据库中是关键字。你加上反引号后,hibernate会为你针对不同的数据库做特定的转化。例如sqlserver,hibernate会为你加上[description],mysql加上`description`,另外在在hsqldb中给description加反引号后,产生的是"description",这样执行起来反而会报错。

 

<property name="description" column="desc" access="field">

 指定description字段通过field直接访问。

 

<property name="total" formula="total + tax_rate * total">

 这个公式在每次查询时候求值,并且这个属性不会被保存和更新,如果你改变其中的数据例如tax_rate,属性值不会去自动计算。

 

<property name="mydata" update="false" insert="false">

 如果update和i nsert都设置false的话,这个字段就不会出现在INSERT和UPDATE语句中。通常不再类中给不可变的属性添加公有的设置方法。

<property generated="always"

generated的合法值是always和insert。这个属性通常和dynamic-insert配合起来才更有用。一般用来在属性中插入默认值。

 

initial_price number(10, 2) default '1'

<property name="initial_price">
 <column name="initial_price" default="1" generated="insert"/>
</property>

 其中的default属性,只在生成表结构时候有用。hibernate并不会在java类中,给空的属性设置默认值。

在插入有default属性的字段中,要想使default起作用,必须设置dynamic-insert=true,这样保证有default属性的字段字段不会出现在insert中(default的字段为null),否则,它的值为null(插入NULL而不是默认值),另外默认值插入到数据库之后,因为设置了generated=always,hibernate会在插入后自动的执行一个select,给java类中的属性设置,如果没有设置generated属性,需要显式调用session.flush()语句。

<class name="Hello">
 <component name="Address">
  <property name="">
 <component>
</class>

 如果component中说有的属性都为null,那么查询时候,这个组件个引用是null,就是说hello.getAddress()返回的是null,只要有至少一个不为null,那么返回这个组件的引用将不是null

 

 

 

分享到:
评论

相关推荐

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day1_day2_day3_day4

    《Hibernate框架深度解析——基于黑马程序员2016版教学资料》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。它通过提供数据持久化的对象模型,使得开发者可以...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02

    《黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02》 本文将深入探讨2016年黑马程序员发布的Hibernate框架开发课程的第二天内容。Hibernate,一个强大的Java持久化框架,简化了数据库操作,为开发者提供了...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day03

    《Hibernate框架开发详解——以黑马程序员2016版讲义和笔记为引导》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更专注于业务逻辑而不是繁琐的数据访问...

    Hibernate的学习笔记

    这些笔记主要基于《Hibernate实战中文第二版》的内容,涵盖了Hibernate的基本操作和查询技巧,为理解和使用Hibernate提供了基础指导。在实际开发中,掌握这些知识点可以帮助开发者更高效地管理数据库操作,实现更...

    Hibernate学习笔记

    2. **缓存机制**:Hibernate提供了第一级缓存(Session缓存)和第二级缓存(可配置的外部缓存),以提高性能。 3. **查询语言**:Hibernate Query Language (HQL) 是一种面向对象的查询语言,类似于SQL,但操作的是...

    Hibernate开发资料

    第2版的开发手册是理解Hibernate早期版本的基础,尽管较旧,但它仍然涵盖了许多至今仍然适用的基础知识。对比不同版本的开发手册,开发者可以了解到Hibernate的发展历程,理解新版本的变化,从而更好地适应框架的...

    JavaEE学习实战笔记心得

    ### JavaEE学习实战笔记心得 #### JavaSE基础要点 - **环境配置**: - **JDK下载与安装**:确保下载与操作系统相匹配的JDK版本,完成安装。 - **环境变量设置**: - **JAVA_HOME**: 指向JDK的安装目录。 - **...

    2016hibernate资料.zip

    本资料集合了作者itherima在学习和使用Hibernate 5.0.7版本时的笔记、源码分析和实际操作案例,旨在帮助读者深入理解Hibernate的核心概念和实用技巧。 1. **基础知识篇** - Hibernate概述:介绍Hibernate的基本...

    黑马程序员_struts2框架开发2016版讲义和笔记资料_day01_day02_day03_day04

    总的来说,这份"黑马程序员_struts2框架开发2016版讲义和笔记资料"是一个全面学习和掌握Struts2框架的宝贵资源,涵盖了从基础到实践的所有重要方面,对于提升Java EE开发者的技能水平大有裨益。通过系统学习,开发者...

    SpringBoot实战(第四版)带目录可以复制粘贴

    《SpringBoot实战(第四版)》是一本专为SpringBoot初学者设计的高清教程,由丁雪丰翻译,提供清晰的目录结构,并且允许文本复制粘贴,方便学习和笔记整理。SpringBoot作为Java开发中的热门框架,因其简化配置、快速...

    springboot学习思维笔记.rar

    - **Hello World**:通过编写第一个简单的RESTful API,熟悉SpringBoot的基本结构。 - **配置文件**:学习`application.properties`或`application.yml`,理解如何进行定制化配置。 - **单元测试**:学习如何使用...

    JBPM3学习笔记

    **JBPM3学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。在本文中,我们将深入探讨JBPM3的核心概念、功能和使用方法,以帮助...

    webwork学习笔记

    ### WebWork学习笔记知识点 #### 一、WebWork框架简介 - **定义**: WebWork是一个由OpenSymphony组织开发的MVC(Model-View-Controller)框架,专注于组件化和代码重用,适用于J2EE应用程序开发。 - **最新版本**:...

    java学习资料总结2015新

    - **《21天学通JavaScript(第2版)》** 和 **《JavaScript动态网页开发案例指导》** 则通过丰富的案例帮助读者快速掌握 JavaScript 的核心概念和技术。 通过以上资源的学习,无论是初学者还是有一定经验的开发者,...

    【藏宝图】(珍藏版)2012java开发工程师必备精品资料(115)

    这个项目采用ExtJs+struts2+hibernate+spring等技术栈实现了图书管理系统,适合中级开发者用来学习企业级应用的开发方法。 #### 二十四、java聊天程序 该聊天程序支持私聊、公聊、截图、文件传输等功能,是一份...

    springmybatis

    mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...

    ejb3.0的讲义一起看

    "SD0711_EJB_Note_All"这个文件名可能指的是一个完整的EJB 3.0教程或笔记集合,它可能会涵盖EJB 3.0的所有主要概念、API使用、实战案例和最佳实践。通过深入学习这个资料,你可以全面了解EJB 3.0,掌握企业级应用...

Global site tag (gtag.js) - Google Analytics