zoukankan      html  css  js  c++  java
  • hibernate学习(4)——实体配置详解

    1、实体 编写规则

    • 提供一个无参数 public访问控制符的构造器
    • 提供一个标识属性,映射数据表主键字段,hibernate以id识别,必须有主键
    • 所有属性提供public访问控制符的 set  get 方法(javaBean)
    • 标识属性应尽量使用基本数据类型的包装类型(能用integer不使用int)
    • 不要用final修饰实体 (将无法生成代理对象进行优化

    2、 持久化对象的唯一标识 OID

    1 Java按地址区分同一个类的不同对象.

    2  关系数据库用主键区分同一条记录

    3  Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系

    结论: 对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID赋值

    3、 区分自然主键和代理主键

     主键需要具备: 不为空/不能重复/不能改变

           自然主键:      在业务中,某个属性符合主键的三个要求.那么该属性可以作为主键列.

           代理主键:     在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列.作为主键.

    4、  基本数据与包装类型

    1  基本数据类型和包装类型对应hibernate的映射类型相同

    2 基本类型无法表达null、数字类型的默认值为0。

    3  包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。

     5、 普通属性

    <hibernate-mapping> 
                package 用于配置PO类所在包
                    例如: package="com.itheima.d_hbm"
            <class> 配置 PO类 和 表 之间对应关系
                name:PO类全限定类名
                    例如:name="com.itheima.d_hbm.Person"
                    如果配置 package,name的取值可以是简单类名 name="Person"
                table : 数据库对应的表名
                dynamic-insert="false" 是否支持动态生成insert语句
                dynamic-update="false" 是否支持动态生成update语句
                    如果设置true,hibernate底层将判断提供数据是否为null,如果为null,insert或update语句将没有此项。
            普通字段
                <property>
                    name : PO类的属性
                    column : 表中的列名,默认name的值相同
                    type:表中列的类型。默认hibernate自己通过getter获得类型,一般情况不用设置
                        取值1: hibernate类型
                            string 字符串
                            integer 整形
                        取值2: java类型 (全限定类名)
                            java.lang.String 字符串
                        取值3:数据库类型
                            varchar(长度) 字符串
                            int 整形
                            <property name="birthday">
                                 <column name="birthday" sql-type="datetime"></column>
                             </property>
                             javabean 一般使用类型 java.util.Date
                             jdbc规范提供3中
                                 java类型                mysql类型
                                 java.sql.Date        date
    java.sql.time        time
                                 java.sql.timestamp    timestamp
                                 null                datetime
                                 
                                 以上三个类型都是java.util.Date子类
                                 
                    length : 列的长度。默认值:255
                    not-null : 是否为null
                    unique : 是否唯一
                    access:设置映射使用PO类属性或字段
                        property : 使用PO类属性,必须提供setter、getter方法
                        field : 使用PO类字段,一般很少使用。
                    insert 生成insert语句时,是否使用当前字段。
                    update 生成update语句时,是否使用当前字段。
                        默认情况:hibernate生成insert或update语句,使用配置文件所有项
            注意:配置文件如果使用关键字,列名必须使用重音符    

    6、主键

    <id>配置主键
                    name:属性名称
                    access="" 设置使用属性还是字段
                    column=""  表的列名
                    length=""  长度
                    type="" 类型
                <generator> class属性用于设置主键生成策略
                    1.increment 由hibernate自己维护自动增长
                        底层通过先查询max值,再+1策略
                        不建议使用,存在线程并发问题
                    2.identity hibernate底层采用数据库本身自动增长列
                        例如:mysql auto_increment
                    3.sequence hibernate底层采用数据库序列
                        例如:oracle 提供序列
                    4.hilo:基本不使用 
                    5.native 根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。【】
        
                        </generator>
                                    ##以上策略使用整形,long, short 或者 int 类型
                    6.uuid 采用字符串唯一值【】
                    ##以上策略 代理主键,有hibernate维护。
                    7.assigned 自然主键,由程序自己维护
  • 相关阅读:
    insert sort O(n2)
    JJ数据
    quick sort O(logn)
    TSQL语句之case when then 多条件判断
    C#使用LitJson解析JSON
    终止线程 Response.End 在Asp.net 里面的正确使用
    TSQL操作MSSQL2008 SQL备份与还原数据库
    C#/.NET 条件合并两个DataTable
    JavaScript学习之一JavaScript浏览器对象模型详解window对象(上)
    跟老邓一起学Windows Phone7开发(一)第一个程序
  • 原文地址:https://www.cnblogs.com/snowwang/p/6119387.html
Copyright © 2011-2022 走看看