分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Hibernate中的持久化类

发布时间:2023-09-06 01:36责任编辑:林大明关键词: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可能有所差异)

?

byte、java.lang.Byte

?

byte

?

TINYINT

?

short、java.lang.Short

?

short

?

SMALLINT

?

int、java.lang.Integer

?

integer

?

INGEGER

?

long、java.lang.Long

?

long

?

BIGINT

?

float、java.lang.Float

?

float

?

FLOAT

?

double、java.lang.Double

?

double

?

DOUBLE

?

java.math.BigDecimal

?

big_decimal

?

NUMERIC

?

char、java.lang.Character

?

character

?

CHAR(1)

?

boolean、java.lang.Boolean

?

boolean

?

BIT

?

java.lang.String

?

string

?

VARCHAR

?

boolean、java.lang.Boolean

?

yes_no

?

CHAR(1)(‘Y‘或‘N‘)

?

boolean、java.lang.Boolean

?

true_false

?

CHAR(1)(‘Y‘或‘N‘)

?

java.util.Date、java.sql.Date

?

date

?

DATE

?

java.util.Date、java.sql.Time

?

time

?

TIME

?

java.util.Date、java.sql.Timestamp

?

timestamp

?

TIMESTAMP

?

java.util.Calendar

?

calendar

?

TIMESTAMP

?

java.util.Calendar

?

calendar_date

?

DATE

?

byte[]

?

binary

?

VARBINARY、BLOB

?

java.lang.String

?

text

?

CLOB

?

java.io.Serializable

?

serializable

?

VARBINARY、BLOB

?

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 自然主键,由程序自己维护。【】

Hibernate中的持久化类

原文地址:https://www.cnblogs.com/xiaoaofengyue/p/8280484.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved