01hibernate4框架基础

01hibernate4框架基础


前言

记录学习hibernate4框架基础的笔记,使用hibernate框架生成相应文件


一、什么是ORM?

1、ORM - Object Relational Mapping 对象关系映射

映射内容:

  • 数据库表 ------------------ JAVA实体类(数据的载体)
  • 表的字段 ------------------ JAVA类中的属性
  • 数据库的数据类型 ------ JAVA的数据类型
  • 数据库表的记录 --------- JAVA类的对象
  • 表与表的主外键关系 — JAVA的对象间的关联关系(一对一、一对多、多对一、多对多)

2、主流的ORM框架

Hibernate:完整的orm框架,主要映射应用程序的对象模型,更能体现ORM的思想。
Mybatis:非完整的orm框架,主要映射的是sql语句,Mybatis-plus
JPA :类似hibernate框架

3、Hibernate的基础概念

持久化 ---------------- 程序的对象在瞬时状态(内存)与持久状态(磁盘)之间转换的机制。
持久化操作 ---------- 主要对数据库的增删改查的操作
持久层 ---------------- 指的是数据访问层(DAO层)

4、Hibernate与JDBC的关系

JDBC是底层的数据库的交互技术,Hibernate封装了JDBC,提高了DAO的开发效率。

4、Hibernate的框架的学习流程

在这里插入图片描述

Myeclipse的反向工程工具自动生成ORM
反向工程 :数据库表 —> 应用的实体类(模型)
正向工程 :应用实体模型 —> 数据库设计
通过Myeclipse反向工程工具生成: entity、entity.hbm.xml

二、实践部分

1、创建java Project项目

在这里插入图片描述

2、数据库视图窗口

2.1打开数据库视图窗口

在这里插入图片描述
2.2新建连接
在这里插入图片描述

2.3连接数据库

在这里插入图片描述

在这里插入图片描述

2.4添加数据库,可以连接多个数据库
在这里插入图片描述

2.5完成,双击刚刚创建的数据库名称,点开TABLE即可看到表信息

在这里插入图片描述

2.6右上角,回到编码视图

在这里插入图片描述

3、生成hibernate.cfg.xml文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意修改url
在这里插入图片描述

4、生成实体文件

在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/470e49cc86b94bcbb88c6703b1b1a500.png

主键生成策略(器)

  • identity 主键自增(建议) mysql或sqlserver 由底层数据库实现主键自增
  • increment 主键自增 由hibernate程序实现主键自增,原则 :select max(id)+1
  • assigned 一般用于主键是字符串,由程序提供主键的生成算法
  • sequence 序列生成主键,oracle常用
  • uuid 全球唯一标识码,32位长度的字符串,jdk提供相应在工具生成uuid,在分布式系统中较常用。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

说明:
 dialect 必选 指定数据库的方言(类型)
 show_sql 指定为true时,会在控制台输出执行的sql语句
 format_sql 格式化输出sql
在这里插入图片描述

5、单元测试

在这里插入图片描述
在这里插入图片描述

5.1 添加操作

package com.gec.hiber.junit;
import static org.junit.Assert.*;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.gec.hiber.entity.Users;
import com.gec.hiber.utils.HibernateSessionUtils;
public class TestUser {
    //添加操作
    @Test
    public void testAdd() {    
    Session session=null;
    try {
    session=HibernateSessionUtils.getSession();//获取连接
    Transaction tx=session.beginTransaction();//启动事务
    Users user=new Users();
    user.setName("huad");
    user.setPassword("123456");
    user.setIsadmin("1");

    session.save(user);
    tx.commit();//提交事务

    } catch (HibernateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    session.close();//关闭资源
    }
    }
}

在这里插入图片描述

添加成功
在这里插入图片描述

5.2 查询操作

hibernate的get和load方法: 都是根据对象的唯一标识查询单条记录
区别:

  • get方法是即时加载数据,load方法是延时加载数据,在获取对象属性时发送sql语句。
  • 如果找不到数据时,load方法会抛出ObjectNotFoundException,get方法返回null值。
//查询无需事务环境
@Test
public void testGetAndLoad(){
    Session session=HibernateSessionUtils.getSession();
    //数值类型和String类型都实现了Serialiable
    int id = 1034;
    Users user=(Users)session.get(Users.class, id);
//  Users user=(Users)session.load(Users.class, id);
    System.out.println(user.getName());
    session.close();
}

在这里插入图片描述

5.3 修改操作

//修改操作
@Test
public void testUpdate() {
Session session=null;
try {
session=HibernateSessionUtils.getSession();//获取连接
Transaction tx=session.beginTransaction();//启动事务
//查询已知用户
int id=1005;
Users user=(Users)session.get(Users.class, id);
user.setPassword("123123");
session.update(user);
tx.commit();//提交事务
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();//关闭资源
}
}

在这里插入图片描述

5.4 删除操作

//删除操作
@Test
public void testDelete() {
Session session=null;
try {
session=HibernateSessionUtils.getSession();//获取连接
Transaction tx=session.beginTransaction();//启动事务
//查询已知用户
int id=1005;
Users user=(Users)session.get(Users.class, id);
session.delete(user);
tx.commit();//提交事务
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();//关闭资源
}
}

在这里插入图片描述

6、Hibernate的对象的状态转换

在这里插入图片描述

  • 临时状态 当使用new实例化出来的对象,该对象还没在hibernater的容器中管理。
  • 持久状态 该对象是由hibernate容器管理的,对象与数据库的数据是一一对应关系。也称为“托管状态”。
  • 游离状态 持久状态的对象脱离容器的管理,也称为“脱管状态”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值