当前位置 : 主页 > 编程语言 > c++ >

Hibernate笔记

来源:互联网 收集:自由互联 发布时间:2021-07-03
Hibernate框架笔记 web阶段内容回顾: 1.JavaEE三层结构:Web层(SpringMVC,Struts2),Service业务逻辑层(Spring),DAO(mybatis,Hibernate持久层) 2.MVC思想:M模型,V视图,C控制器(一种分层思想,并非java独有)Hibe
Hibernate框架笔记
web阶段内容回顾:
  1.JavaEE三层结构:Web层(SpringMVC,Struts2),Service业务逻辑层(Spring),DAO(mybatis,Hibernate持久层)

  2.MVC思想:M模型,V视图,C控制器(一种分层思想,并非java独有)

Hibernate框架(冬眠):

1.Hibernate框架是一个dao层次的框架,Hibernate对JDBC进行了封装,不需要sql语句实现

2.Hibernate是开源的轻量级的ORM框架

3.在web阶段学习javabean,在框架中的叫法为实体类
  实体类的规范:公共类,一个公共的无参构造方法,属性为私有,但必须为属性提供公共的set,get方法。

4.核心思想:ORM(object relational mapping 对象关系映射)
  (1) 让实体类和数据库进行一一对应
      实体类类名对应数据库表名
      实体类属性对应表中的字段
  (2) 不需要直接操作数据库表,而操作表对应的实体类

JDBC的步骤:
(1) 加载驱动
(2) 获取连接对象Connection
(3) 书写SQL语句SQL
(4) 获得预编译对象PreparedStatement
(5) 执行SQL查询语句获取结果集ResultSet
(6) 遍历结果集
(7) 关闭数据库连接

5.搭建Hibernate环境
(1) 导入相关的jar包
(2) 创建实体类(Hibernate要求实体类有一个属性是唯一的,相当于主键)
(3) 创建数据库,不需要自己手动创建表,Hibernate会帮你创建
(4) 使用配置文件实现映射关系
    配置文件一般创建在实体类的包下,实体类名称.hbm.xml (位置不固定,名称也不固定)

(5) 配置核心配置文件:(重点)
    Hibernate的核心配置文件位置以及名称是固定的
    必须位于在src下,名称必须为hibernate.cfg.xml

    三部分:(1)配置数据库部分(必须的) (2)配置hibernate信息(可选的) (3)配置映射配置文件(必须的)
    
    为了保证映射配置文件加载,将映射配置文件放到核心配置文件

Hibernate核心API

1 Configuration
  代码:Configuration cfg = new Configuration();
       cfg.configure();
   到src下面找到名称为hibernate.cfg.xml,创建对象,把配置文件放到对象里面(加载核心配置文件)

2 SessionFactory 
   使用Configuration对象创建SessionFactory
   在创建过程中,根据配置文件的数据库与映射配置,到数据库中创建表
   代码:SessionFactory sessionFactory = cfg.buildSessionFactory();
   一般在项目中只创建一个SessionFactory对象(使用静态代码块实现单例)

3 Session(相当于JDBC中的数据库连接)
   由SessionFactory创建
   代码:Session session = SessionFactory.openSession();

   Session对象中有很多对数据库进行crud操作的方法
   (1) 添加 save方法
   (2) 修改 update方法
   (3) 删除 delete方法
   (4) 根据Id查询 get方法

   session对象(单线程对象)
    (1) session对象不能共用,只能自己使用
    (2) 不能使用单例,使用ThreadLocal对象进行多线程管理

5.Transaction事务对象
  代码:Transaction tx = session.beginTransaction();
  (1) 事务提交与回滚
    tx.commit()  tx.rollback()


Hibernate中实体类的规范:

1.实体类里面属性私有的
2.私有属性具有公开的set与get方法操作
3.实体类中有属性作为唯一值(一般使用id值,对应表中主键)
1.实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
  (1)八个基本数据;类型对应的包装类
  int--Integer   char--Character 其他均为首字母大写,比如:double--Double
 (2) 包装类有的时候可以比基本数据类型更强大
  比如:需要使用null时,基本数据类型无法满足,而包装类型可以赋值为null
  具体事例:如果要表示学生的分数,而该学生没有参加考试,这是int型数据无法满足null值,只能取零值,但这样不能准确表示该学生缺考,只能说明是零分。

Hibernate主键生成策略
在配置文件中配置:
在这个class属性中有很多的值可以选择:
(1) native 根据使用的数据库来自动选择identity(适用于mysql这种支持自增的数据库)、sequence(适用Oracle这种支持序列的数据库)、hilo三种中的一种
(2) uuid  Hibernate采用128位的UUID算法生成唯一标识符,其UUID被编码为长度为32位的十六进制字符串,占用比较大的空间
(3) increment 用于long、short、int类型,由Hibernate自动以递增的方式生成唯一的标识符。
(4) identity 采用低层数据库本身提供的主键生成标识符,条件是数据库支持自动增长类型(Mysql)
(5) sequence Hibernate根据低层数据库序列生成标识符,条件是数据库必须支持序列,适用于代理主键(Oracle)
(6) assigned 由java程序负责生成标识符,如果不指定id元素的generator属性,则默认使用该主键生成策略,适用于自然主键。

crud操作:
session.save() -- 增加
session.delete() -- 删除
session.get() -- 查询
session.update() -- 修改

实体类的状态:
(1) 瞬时态:对象里面没有Id值(主键值),对象与Session也没有关联(一般做添加操作)
(2) 持久态:对象里面有Id值,对象与Session有关联(如:session.get()查询出来的对象)
(3) 托管态:对象有Id值,但是与session没有关联

操作实体类的方法(根据不同的状态):
session.saveOrUpdate(Object) 
(1) 当Object对象是瞬时态时,执行save也就是添加操作。
(2) 当Object对象是托管态时,执行修改操作。
(3) 当Object对象是持久态时,执行修改操作

update与saveOrUpdate的区别:
1、update针对的是已存在的实体对象,数据库中如果没有实体所对应的数据记录(实体类对象为瞬时态时),将会抛出异常;
2、saveOrUpdate()对象存在与否都不会有任何影响(无论实体类对象在什么状态下),有则更新,没则插入。
网友评论