hibernate学习(二)

hibernate项目学习(二)

hibernate持久化

  • 简介

    在hibernate事务中,实体类对象有3种状态,分别是瞬时状态,持久化状态以及游离状态(又称托管状态),

    当实体类对象不含有与数据库中表对应的id主键值时,该对象处于瞬时状态,当调用session对象的get()

    ,update(),sava()方法操作该实体类对象后,该对象会进入持久化状态,当事务提交后或者调用session对象的delete()方法操作实体类对象后,该对象处于游离状态.

  • 持久化状态操作

    当实体类对象处于持久化状态时,对该对象的变量进行set操作时,该操作会自动同步到数据库的表中.

  • 实体类的编写规则

    1.Bean对象相同

    2.尽量使用包装类

    3.不要使用final修饰该类

hibernate主键生成策略

  • 简介

    在hibernate中主键有两种类型,分别是代理主键与自然主键,代理之间就是没有业务逻辑的主键,例如我们对数据库表中某一条数据自动生成的uuid,它存在于表中,但它不没有任何用处,仅仅只是作为一个主键使用,而自然主键则是有自己的业务逻辑,例如人的身份证号,它是必须的,并且是唯一的,但在实际开发中很少遇到自然主键.

  • 主键生成的配置

    1.属于代理主键的配置

    • increment

      用于整数类型的主键,由hibernate代理生成,每次加一,但有线程安全问题,禁止在实际开发中使用.

    • identity

      由数据库底层实现,但数据库表中需要设置好主键自增设置.

    • Sequence

      Orcle数据库专用的主键生成策略,也是由数据库底层实现.

    • native

      根据数据库的类型不同,自动调用identity和sequence,还有一个hilo生成策略但因为这种策略遇不到,所以就不进行介绍了.

    • uuid

      适用于字符串类型的主键,生成一个32位的16进制数.

    2.自然主键

    • assigned

      手动创建id主键.

hibernate 一级缓存和快照

  • 一级缓存

    简单理解就是当实体类进入持久化状态时,session会缓存该对象,例如当我们调用seesion的get()方法获得同一条数据生成一个实体类对象时,这由同一条数据生成的实体类是同一个,原理是当我们第一次调用get()方法时,hibernate会进入数据库查询数据,并生成一个实体类对象返回给调用者,然后会把该对象添加到自己内部的缓存list集合中,当再次调用时,hibernate会优先从缓存中查找有没有要查询的数据,如果有,则直接返回缓存中保存的对象,没有的话才会进入数据库查询.

  • 快照

    当在session的缓存中存入一个实体类时,hibernate还会备份该类到自己的快照区,当事务提交时,会清空session的缓存区,然后根据id主键来进行对比实体类与快照区域的实体类,如果两者中的数据不同时,才会调用数据库更新数据,否则不会调用数据库进行更新.例如:当我们使用get()方法获得一个实体类时,修改该类的某一些数据,最后再修改回来,事务提交时不会调用数据库更新数据.

hibernate支持的数据库查询语言

  • HQL
    • 简介

      由hibernate自定义的数据库语言,他通过自定义的数据库语言自动转化成对应的数据库语言进行操作.

    • 用法

在这里插入图片描述

  • 编写规则

    请自行百度,因为我不是很喜欢.

  • Criteria

    请自行百度,因为我不是很喜欢.

  • SQLQuery

    • 简介

      通过自己书写对应的数据库语言进行操作.

    • 用法

      String sql = "select * from tableName" //书写sql语句
      Query query = session.createSQLQuery(sql);
      query.addEntity(实体类.class); //添加实体类的class文件,告知hibernate获取到的数据封装成什么类型
      List<实体类名> list = query.list(); //将封装好的实体类放在一个list集合中,返回该集合
      // 当知道该查询结果只有一条数据时可调用uniqueResult()方法
      //Domain domain = query.uniqueResult();
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值