(三)详解对象-关系映射文件

一、Hibernate中持久化类编写规范

    -必须提供无参数的默认构造方法。因为程序运行时,Hibernate会运用java的反射机制,创建实体类的实例。 

    -所有属性必须提供public访问控制符的set get方法 

    -属性应尽量使用基本数据类型的包装类型(如Integer)
            基本数据类型无法表达null值,所有基本数据类型的默认值都不是null,这样就有很大的缺陷。
            例如有一个score属性,表示学生分数,如果为0,那么是表示该学生未参加考试还是说该学生成绩为0呢?
            这时候如果用包装类型,就可以使用null来表示空值,学生未参加考试等等。

    -不要用final修饰实体(将无法生成代理对象进行优化

二、对象标识符

在关系数据库中,通过主键来识别记录并保证记录的唯一性。
            主键的要求:不允许为null,不能重复,不能改变

            自然主键:在业务中,某个属性符合主键的三个要求,那么该属性可以作为主键。比如人的身份证就可以当作主键
            代理主键:增加一个不具备任何意义的字段,通常为ID,来作为主键

在java中,按照内存地址不同区分不同的对象。

在Hibernate中通过对象标识符(OID)来维持java对象和数据库表中对应的记录。
与表的代理主键对应,OID也是整数类型,为了保证OID的唯一性和不可变性,通常由Hibernate或者底层数据库库给OID赋值。

三、对象-关系映射文件

Hiernate采用XML格式的文件来指定对象和关系数据之间的映射。Hibernate通过这个文件来生成各种sql语句。 命名规则为 实体类名.hbm.xml 应该和实体类放在同一目录下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 <!--根元素,有一常用属性为package,当指定了package时,后面的类名字就可以简短,例如 package="com.cad.domain",后面class标签的name只用写User即可-->
 <hibernate-mapping>

    <!--class标签指定类和表的对应关系,name为类名,table为表名
        class标签的属性 dynamic-insert属性,默认是false,当我们执行插入语句时,会动态生成sql语句,如果我们只为某个字段赋值,其他字段为null,但是生成的sql语句还是包含其他字段,例如user有两个属性,我们只为name赋值,生成的sql语句还是 insert into user(name,password)values (?,?),而当我们将该值设置为true时,生成的sql语句会仅包含不为null的字段,生成的sql语句就是insert into user(name) values (?) 

        class标签的属性 dynamic-update属性,默认是false,当我们执行更新语句时,会动态生成sql语句,如果我们只为某个字段更新,其他字段不变,生成的sql语句还是包含其他字段。而当我们将该值设置为true时,生成的sql语句仅包含需要更新的字段
        使用上面的两个属性可以提高运行性能,但是Hibernate动态生成sql语句需要的性能很小,所以可以省略-->
    <class name="com.cad.domain.User" table="user"> 

        <!--id标签用来设定持久化类中的OID和表的主键的映射,name为持久化类中的属性,column是数据表中的主键列名
            id标签的属性:length 指定列的数据长度
            id标签的属性:unsaved-value 指定当主键为某个值时,当做null来处理
            id标签的属性:access 也可用在<property>标签上 默认值为property,即通过相应的get set方法来访问持久化类的属性,当值为field时,表明使用反射机制直接访问类的属性,不推荐使用,破坏封装性-->
        <id name="id" column="id">
            <!--
                generator标签用来设定主键生成策略,hibernate内置的几种主键生成策略
                1.increment 适用于代理主键。由Hibernate自动以递增的方式生成主键,每次增量为1 ,会执行两个sql语句,先从表中查找出最大的id,然后加一,插入当前数据
                2.identity  适用于代理主键。由底层数据库生成主键,依赖数据库的主键自增功能
                3.sequence  适用于代理主键。由底层数据库的序列来生成主键,前提是数据库支持序列。(mysql不支持,oracle支持)
                4.hilo      适用于代理主键。Hibernate根据hilo算法来自己生成主键。
                5.native    适用于代理主键。根据底层数据库对自动生成主键的支持能力选择 identity|sequence|hilo
                6.uuid      适用于代理主键。采用UUID算法生成主键。
                7.assigned  适用于自然主键。由我们自己指定主键值。例如指定身份证号为主键值

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

        <!--
            property标签属性 name指定持久化类的属性名称
            column 与类属性映射的字段名,如果没有设置,默认用类属性名作为字段名
            not-null  指定属性的约束是否为非空,默认false
            unique   指定属性的约束是否唯一
            type     指定Hibernate映射类型。例如java类型为string,数据库类型为text,那么应该把Hibernate类型设置为Text。有一张对应的表可以查看。如果没有指定映射类型,Hibernate会使用反射机制识别属性的java类型,然后自动使用与之对应的Hibernate映射类型
        -->
        <property name="name" column="name"></property>
        <property name="password" column="password"></property>
    </class>
 </hibernate-mapping>

  

  

  

原文地址:https://www.cnblogs.com/yuexiaoyun/p/9451877.html

时间: 2024-11-10 04:24:30

(三)详解对象-关系映射文件的相关文章

hibernate 对象关系映射文件详解

POJO 类和数据库的映射文件*.hbm.xml POJO类和关系数据库之间的映射可以用一个XML文档来定义. 映射文件的扩展名为.hbm.xml 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系 映射文件说明 hibernate-mapping 类层次:class 主键:id 基本类型:property 实体引用类: many-to-one

Hibernate -- xxx.hbm.xml ORM元数据 表对象关系映射文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- ORM元数据 表对象关系映射文件 p

Hibernate之配置文件以及对象关系映射文件了解

声明:CSDN不知道怎么了,有时候就是发表不了博文.本来就是一天一篇博文,最近搞的我很郁闷.有时候一天,有时候两三天都不能发.这就属于不可抗力.没办法的,啥时能发,我就发了. 一.学习案例:关于hibernate的配置文件以及对象关系映射文件的了解. 二.案例分析: a)hibernate配置文件(hibernate.cfg.xml) 1.hibernate.dialect:数据库使用的SQL方言 2.hiebrnate.connection.driver_class:数据库的驱动程序 3.hi

hibernate(四)__由表逆向创建Domain对象和对象关系映射文件

之前我们是手写Domain对象和对象关系映射文件->然后生成数据库中的Table. 现在我们反过来先在数据库中建好Table->然后用工具生成Domain对象和对象关系映射文件. 步骤: 1.创建一个web工程项目 2.通过myeclipse 提供的数据库浏览器连接到我们的数据库. ①新建一个数据库连接: ②配置数据库连接(这里借用以oracle一张图,后面都是在sql server的数据库下的配置,可以忽视不影响): ③成功之后输入登录密码进入数据库: 右键表可直接修改删除表,当然这也是相当

[原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

05-创建对象-关系映射文件和数据库

在src目录右键->new->others 点击next,next,选择刚刚建立的持久化的学生类. 最后会生成如下: 这个映射把students实体类映射成为数据库中一张表. 以及把这个类中每个属性映射为表中一个字段. 把这个文档加入到hibernate配置文档当中:

Hibernate初探之单表映射——创建对象-关系映射文件

编写一个Hibernate例子 第三步:创建对象-关系映射文件 以下是具体实现步骤: 找到我们要持久化的学生类Sudents 生成对象-关系映射文档Students.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourcefor

Hibernate基础学习(四)&mdash;对象-关系映射(上)

一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数据库表中的记录的对应关系,对象的OID和数据库表的主键对应,为了保证OID的唯一性和不可变性,应该让Hibernate,而不是应用程序来为OID赋值.     Hibernate推荐在数据表中使用代理主键,即不具备业务含义的字段.代理主键通常为整型,因为整型比字符串要节省更多数据库空间.     在

getClass()和getClassLoader()区别 以及ClassLoader详解及用途(文件加载,类加载)

获得ClassLoader的几种方法可以通过如下3种方法得到ClassLoader this.getClass().getClassLoader(); // 使用当前类的ClassLoader Thread.currentThread().getContextClassLoader(); // 使用当前线程的ClassLoader ClassLoader.getSystemClassLoader(); // 使用系统ClassLoader,即系统的入口点所使用的ClassLoader.(注意,s