zoukankan      html  css  js  c++  java
  • Hibernate中的持久化类

    1.编写规则

        提供一个无参数 public访问控制符的构造器

        提供一个标识属性,映射数据表主键字段

        所有属性提供public访问控制符的 set  get 方法(javaBean)

        标识属性应尽量使用基本数据类型的包装类型

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

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

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

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

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

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

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

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

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

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

    4.基本数据类型和包装类

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

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

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

    Java数据类型

    Hibernate数据类型

    标准SQL数据类型
    (PS:
    对于不同的DB可能有所差异)

    bytejava.lang.Byte

    byte

    TINYINT

    shortjava.lang.Short

    short

    SMALLINT

    intjava.lang.Integer

    integer

    INGEGER

    longjava.lang.Long

    long

    BIGINT

    floatjava.lang.Float

    float

    FLOAT

    doublejava.lang.Double

    double

    DOUBLE

    java.math.BigDecimal

    big_decimal

    NUMERIC

    charjava.lang.Character

    character

    CHAR(1)

    booleanjava.lang.Boolean

    boolean

    BIT

    java.lang.String

    string

    VARCHAR

    booleanjava.lang.Boolean

    yes_no

    CHAR(1)('Y''N')

    booleanjava.lang.Boolean

    true_false

    CHAR(1)('Y''N')

    java.util.Datejava.sql.Date

    date

    DATE

    java.util.Datejava.sql.Time

    time

    TIME

    java.util.Datejava.sql.Timestamp

    timestamp

    TIMESTAMP

    java.util.Calendar

    calendar

    TIMESTAMP

    java.util.Calendar

    calendar_date

    DATE

    byte[]

    binary

    VARBINARYBLOB

    java.lang.String

    text

    CLOB

    java.io.Serializable

    serializable

    VARBINARYBLOB

    java.sql.Clob

    clob

    CLOB

    java.sql.Blob

    blob

    BLOB

    java.lang.Class

    class

    VARCHAR

    java.util.Locale

    locale

    VARCHAR

    java.util.TimeZone

    timezone

    VARCHAR

    java.util.Currency

    currency

    VARCHAR

    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 
                        
                        </generator>
                    5.native 根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。【】
                    ##以上策略使用整形,long, short 或者 int 类型
                    6.uuid 采用字符串唯一值【】
                    ##以上策略 代理主键,有hibernate维护。
                    7.assigned 自然主键,由程序自己维护。【】
  • 相关阅读:
    10个最佳jQuery Lightbox效果插件收集
    JavaScript 中的内存泄露模式
    推荐6 款免费的图标编辑器
    Google 排名中的 10 个最著名的 JavaScript 库
    影响搜索引擎排名的因素2009年(总览)
    2009 年度最佳 jQuery 插件
    使用 Nginx 提升网站访问速度
    10个新的最有前途的JavaScript框架
    IE8面向Web开发人员的功能改进
    IE6, IE7, IE8 CSS 兼容速查表
  • 原文地址:https://www.cnblogs.com/xiaoaofengyue/p/8280484.html
Copyright © 2011-2022 走看看