Hibernate入门和基本操作

1 Hibernate概述

1.1 框架的含义

其实框架,就是别人写好了包装起来的一套工具,把你原先必须要写的,必须要做的一些复杂的东西都写好了放在那里,你只要调用他的方法,就可以实现一些本来要费好大劲的功能。使用框架之后,它可以帮我们实现一部分功能,使用框架好处就是可以少写一部分代码实现功能

1.2 Hibernate框架

1.Hibernate框架应用在javaEE三层结构中的dao层框架。

javaEE三层结构:

  • web层
  • service层
  • dao层

2.在dao层里面做对数据库的增删改查操作,使用Hibernate框架实现增删改查操作。Hibernate底层就是jdbc,对jdbc的轻量级的封装,使用Hibernate不需要写复杂的jdbc代码。

3.Hibernate是开源的、轻量级的框架。轻量级的框架:Hibernate不需要依赖其他的东西就可以直接使用。

4.Hibernate版本
Hibernate3.x
Hibernate4.x(过渡)
Hibernate5.x

1.3 orm思想

  1. hibernate使用orm思想对数据库进行crud操作;

  2. orm即“object relational mapping”,对象关系映射
    ❀让实体类和数据库表进行一 一对应关系。实体类首先和数据库表对应,然后实体类里面的属性和表里面的字段逐一对应。
    ❀不需要直接操作数据库表,而操作表对应的实体类对象。

例:

  • 实体类:
    public class User{
    private int uid;
    private username;
    private password;
    }
  • 数据库建表语句:
    create table t_user(
    uid int,
    username varchar(255),
    password varchar(255)
    )
    类User对应表t_user
    类属性uid对应表字段uid…以此类推

2 Hibernate入门

2.1 环境搭建

2.1.1 导jar包

除了hibernate本身需要的一些jar包之外,还要导入数据库驱动jar包,以及一些日志jar包(因为使用hibernate时,有日志信息输出,hibernate本身没有日志输出的jar包,需导入其他日志的jar包)。
在这里插入图片描述

jar包
链接:https://pan.baidu.com/s/1E36zuMxUElEtBr7nToLCAA
提取码:w8mm

2.1.2 创建实体类

在这里插入图片描述

使用hibernate时,不需要自己手动创建表,hibernate会帮把表创建

2.1.3 使用配置文件实现映射关系

  1. 创建xml配置文件
  • 映射配置文件名称和位置没有固定要求
  • 建议在实体类所在包里面创建,名称设为:实体类名称.hbm.xml
  1. 引入约束(hibernate引入的是dtd约束)
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  1. 配置映射关系
<hibernate-mapping>
    <class name="cn.itcast.entity.User" table="t_user">
     <!-- name里面填实体类的全路径,table里是对应的表名称(可以自定义) -->
    <id name="uid" column="uid">
   <!-- native:主键自动增长 -->
    <generator class="native"></generator>
    </id>
    <property name="username" column="username"></property>
    <property name="password" column="password"></property>
    <property name="address" column="address"></property>
    <!-- name里是实体类的属性名,column里是数据库表里的字段名(可以自定义,建议与属性名一致) -->
    </class>
    </hibernate-mapping>
  • id标签和property标签里的column属性可以省略,省略之后column值默认等于name的值。
  • property标签有type属性,可设置生成表字段的类型,如果省略则根据实体类中属性的类型为字段自动对应类型。

2.1.4 创建hibernate的核心配置文件

  • 核心配置文件同样是xml格式
  • 核心配置文件名称和位置是固定的
    位置:必须在src下面
    名称:必须是 hibernate.cfg.xml
  1. 引入约束
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

注意核心配置文件的约束与映射配置文件的约束是不一样的。

hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载

2.配置数据库等信息

<hibernate-configuration>
	<session-factory>
	<!-- 1、配置数据库信息 必须有的-->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">123456</property>
	<!-- 2、配置hibernate信息  可选的-->
	<!-- 输出底层sql语句 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 输出底层sql语句格式 -->
	<property name="hibernate.format_sql">true</property>
	<!-- hibernate帮创建表,需配置之后 
			update:如果已经有表,更新;
					如果没有,创建。
	-->
	<property name="hibernate.hbm2ddl.auto">update</property>
	<!-- 配置数据库方言 不做分页可以不写(可选的)
			让hibernate框架识别不同数据库的自己特有的语句
	-->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	<!-- 3、把映射文件放到核心配置文件中 -->
	<mapping resource="cn/itcast/entity/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>	

注意:数据库需手动新建

配置信息需写在下面标签内:
在这里插入图片描述

2.2 功能实现

实现步骤:

  • 加载hibernate核心配置文件
  • 创建SessionFactory对象
  • 使用SessionFactory创建session对象
  • 开启事务
  • 写具体逻辑 crud操作
  • 提交事务
  • 关闭资源
package cn.itcast.hibernatetest;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.itcast.entity.User;

public class HibernateDemo {
	@Test
	public void testAdd(){
//		1、加载hibernate核心配置文件
//		到src下面找到名称是hibernate.cfg.xml
		Configuration cfg=new Configuration();
		cfg.configure();
//		2、创建SessionFactory对象
		//读取hibernate核心配置文件内容,创建sessionFactory		
		//在这个过程中,根据映射关系,在配置数据库里面把表创建
		SessionFactory sessionFactory= cfg.buildSessionFactory();
//		3、使用SessionFactory创建session对象
		//类似连接
		Session session=sessionFactory.openSession();
//		4、开启事务
		Transaction tx=session.beginTransaction();
//		5、写具体逻辑crud操作
		//添加功能
		User user=new User();
		user.setUsername("霓裳");
		user.setPassword("872");
		user.setAddress("China");
		//调用session的方法实现添加
		session.save(user);
		
//		6、提交事务
		tx.commit();
//		7、关闭资源
		session.close();
		sessionFactory.close();//web中不需要关闭

	}

}

Configuration cfg=new Configuration().configure("xml文件位置");
	//	以上写法hibernate会去指定位置查找配置文件,
	//例如:想要使用src下config包中的hibernate.cfg.xml文件,只需将文件位置加入configure()即可:
		Configuration cfg=new Configuration().configure("/config/hibernate.cfg.xml");

运行结果:
在这里插入图片描述
在这里插入图片描述

2.3 Hibernate核心api介绍

API:Application Programming Interface,应用程序接口

2.3.1 Configuration

Configuration cfg=new Configuration();
		cfg.configure();

该接口会到src下面找到名称为hibernate.cfg.xml的配置文件,创建对象之后,把配置文件放到对象里面(即加载核心配置文件)。

2.3.2 SessionFactory

SessionFactory sessionFactory= cfg.buildSessionFactory();

使用configuration对象创建sessionFactory对象,在创建sessionfactory过程时,根据核心配置文件中有关数据库和映射文件的配置,到数据库里面根据映射关系把表创建。

<!-- hibernate帮创建表,需配置之后 
			update:如果已经有表,更新;
					如果没有,创建。
	-->
	<property name="hibernate.hbm2ddl.auto">update</property>

创建sessionFactory这个过程是特别耗资源的,建议一个项目一般创建一个sessionFactory对象。

可以通过工具类写静态代码块实现:

  • 静态代码块在类加载的时候执行,只执行一次
package cn.itcast.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {

	private static Configuration configuration=null;
	private static SessionFactory sessionFactory=null;
	static{
		configuration=new Configuration();
		configuration.configure();
		sessionFactory=configuration.buildSessionFactory();
	}
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
}

2.3.3 Session

  • session类似于jdbc中connection
  • 调用session里面不同的方法实现crud操作
    (1)添加 save方法
    (2)修改 update方法
    (3)删除 delete方法
    (4)根据id查询 get方法
  • session对象是单线程对象,不能共用,只能自己使用

2.3.4 Transaction

代表事物对象

开启事务:
		Transaction tx=session.beginTransaction();
提交事务:
		tx.commit();
回滚方法:
        tx.rollback();

给大家分享hibernate学习视频链接:https://www.bilibili.com/video/av14538659?p=1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值