Hibernate单实体映射

传统的关系型数据库
主键分类

  1. 业务主键
  2. 代理主键(没有实际意义)

在这里插入图片描述
Hibernate中如何区分对象
在这里插入图片描述

Hibernate中都是通过OID来区分对象的,如下图:OID相同的不同实体对象最终指向的是同一块内存空间,即只要主键相同其所指向的都是同一块内存
在这里插入图片描述
Hibernate中的OID
Hibernate允许在持久化类中把OID定义为三种类型(Long、Short、Integer)

Hibernate自带了很多表示符生成器

一、 increment方式

increment采用Hibernate数值递增的方式为OID赋值
1、适合单独的Hibernate应用使用,不适合在集群的情况下使用
2、不依赖底层数据库系统,适合所有的数据库
如:指定generator的class属性即可
<id name=”id”type=int>
	<generator class=”increment”/>
</id>
	identity 采用数据库提供的自增长方式
	assigned 主键由应用逻辑产生

在这里插入图片描述

Hibernate: 
    select
        max(userId) 
    from
        User
//首先使用上面的方式找到最大的id值,然后在最大的id值基础上加1,执行插入操作
Hibernate: 
    insert 
    into
        user
        (username, password, headImg, userId) 
    values
        (?, ?, ?, ?)
该方式不适合在集群的环境下进行操作,只适合在单体的环境下,
因为在多个应用程序下,当前最大id值为1,都加1则会出现多个id值为2的记录

二、使用identity来依赖底层数据库插入
依靠mysql来插入数据,使用

<id name=”id”type=int>
	<generator class=”identity”/>
</id>

在这里插入图片描述

三、使用assigned

<id name=”id”type=int>
	<generator class=”assigned”/>
</id>

通过该方式来自定义插入记录的id(只要数据库中不重复,都可以进行插入)
在这里插入图片描述

使用注解映射单实体

在这里插入图片描述

在这里插入图片描述

@Entity
@Table(name="user")
public class User {
	@Id 
	@GeneratedValue(generator = "increment")//声明一个Hibernate生成器。双引号中的名字也是可以自定义的。
	@GenericGenerator(name = "increment",strategy = "increment")//使用Hibernate生成器,生成策略是strategy指定的,这里是increment增长策略
	private int userId;
	//当字段和数据库中的字段一致时,可以省略该注解
	@Column(name = "username")
}

使用该方式进行配置的时候,则不需要使用User.hbm.xml文件,直接在hibernate.cfg.xml文件中将mapping标签进行修改即可
//原来的方式,是指定配置文件

<!-- <mapping resource="com/hibernate/entity/User.hbm.xml"/> -->

现在只需要指定实体化类即可

<!-- 如果要使用注解方式来进行声明类,指定到具体的实体类 -->
  <mapping class="com.hibernate.entity.User"/>

在注解方式来配置使用get,set方法还是使用java的反射机制

在这里插入图片描述

下面这两个(DynamicInsert、DynamicUpdate)是放在类的前面,其他都是放在属性的前面

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值