一、简介

Hibernate是轻量级Java EE应用的持久层解决方案,不仅管理Java类库到数据库表的映射,还提供数据查询和获取数据的

方法,它完成对象模型和基于SQL的关系模型的映射关系,使得开发者可以完全采用面向对象的方法来开发应用程序。

ORM全称为Object/Relation Mapping,即对象/关系数据库映射,完成面向对象到关系数据库的映射,将关系数据库包装成

面向对象的模型

二、hibernate 及相关下载

在Eclipse中新建一个项目,然后准备好需要的jar包,数据库使用的是mysql

a.官网下载hibernate orm jar包,解压之后将lib中的required所有jar包导入项目

b.由于使用mysql数据库连接,所以要将mysql的数据库连接的jar导入项目,即mysql-connector-java-5.1.42-bin.jar

c.这里使用c3p0数据源进行数据库的连接管理,所以需要将下载的hibernate jar包中的lib文件夹下的optional文件夹下的

c3p0文件夹下的所有jar包导入项目

d.测试类需要用到JUnit,需要在项目中导入JUnit4的jar包

三、开始使用hibernate

1.创建持久化对象

持久化对象(PO)是hibernate中重要的媒介,以面向对象的方式完成对数据库的增删改的操作,在我们对持久化进行创建、修改

删除的操作时,不需要去再去操作数据库,hibernate会负责把这种操作转换为对数据库表的操作。

持久化对象(PO)= java的普通传统对象POJO+持久化的注解

import java.util.Date;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;@Entity
@Table(name="user_info")
public class User {private Integer userId;private String userName;private String telNumber;private Date registerDate;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getTelNumber() {return telNumber;}public void setTelNumber(String telNumber) {this.telNumber = telNumber;}@Temporal(TemporalType.TIMESTAMP)@Column(name="registerDate")public Date getRegisterDate() {return registerDate;}public void setRegisterDate(Date registerDate) {this.registerDate = registerDate;}}

上面创建一个名为User的持久化对象,并使用了相应的注解

@Entity 表明该类为Hibernate的持久化类

@Table 指定该类映射的数据库中的表,user_info

@Id 表示该类的标识属性,一般对应数据库的主键

@GeneratedValue: 表示主键的生产策略,此处的策略为自动增长

@Column:对应表中的字段名称

@Temporal:处理时间的格式

通过上面的注解就将POJO类映射到了数据库的user_info表中

二、配置文件hibernate.cfg.xml

右击src文件夹,新建文件,命名为hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 连接数据库的信息 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost/huan</property><property name="connection.username">root</property><property name="connection.password">root</property><!-- 连接池管理策略 --><!-- 最大连接数 --><property name="hibernate.c3p0.max_size">100</property><!-- 最小连接数 --><property name="hibernate.c3p0.min_size">10</property><!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 --><property name="hibernate.c3p0.timeout">5000</property><!-- 最大的PreparedStatement的数量 --><property name="hibernate.c3p0.max_statements">100</property><property name="hibernate.c3p0.idle_test_period">300</property><property name="hibernate.c3p0.acquire_increment">2</property><property name="hibernate.c3p0.validate">true</property><!-- 数据库的方言 --><property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>        <!-- 根据需要自动创建表 如果表存在不新建表,只操作数据 --><property name="hbm2ddl.auto">update</property><!-- 打印sql --><property name="show_sql">true</property><!-- 格式化打印的sql --><property name="hibernate.format_sql">true</property><!-- 罗列持久化的类名 --><mapping class="com.huan.entity.User"/></session-factory>
</hibernate-configuration>

hibernate配置文件的默认名称为hibernate.cfg.xml,hibernate会自动去加载该文件。

三、测试使用hibernate

import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import com.huan.entity.User;public class HibernateBasicUseTest {private SessionFactory sessionFactory;@Beforepublic void setUp() {//解析配置文件 默认去加载hibernate.cfg.xmlConfiguration config = new Configuration().configure();//创建SessionFactory实例sessionFactory = config.buildSessionFactory();}@Afterpublic void tearDown(){sessionFactory.close();}@Testpublic void testHibernateBasicUse(){//创建SessionSession session = sessionFactory.openSession();//开启事务Transaction tx = session.beginTransaction();//操作持久化对象User user =  new User();user.setRegisterDate(new Date());user.setTelNumber("15678986774");user.setUserName("aha");//保存
        session.save(user);//事务提交
        tx.commit();//关闭Session
        session.close();}}

上面代码创建了一个测试类,对于使用Hibernate可以总结为如下步骤

1.获取Configuration实例(加载配置文件)

2.获取SqlSessionFactory

3.获取Session

4.开启事务Transaction

5.完成业务逻辑,使用Session操作持久化对象,即完成对数据库的操作

6.提交事务,关闭Session

运行上面的测试类,由于之前的<property name="hbm2ddl.auto">update</property>为update,在没有表的情况下hibernate会先去创建表,

所以第一次运行上面的测试类可以看到控制台输出了两条SQL语句。

然后到数据库中查看是否已经新建了表并且保存了数据:

结果表明测试运行成功,整个过程并没有手写sql语句去操作数据库,这个操作由hibernate去完成,我们操作的仅仅是User对象。

这应该就是ORM框架的特色吧。

转载于:https://www.cnblogs.com/yueguangmoliya/p/7004709.html

Hibernate ORM框架学习日记基础篇-1相关推荐

  1. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  2. 计算机视觉面试宝典--深度学习机器学习基础篇(四)

    计算机视觉面试宝典–深度学习机器学习基础篇(四) 本篇主要包含SVM支持向量机.K-Means均值以及机器学习相关常考内容等相关面试经验. SVM-支持向量机 支持向量机(support vector ...

  3. 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明

    基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...

  4. 【Kotlin】学习小记-基础篇

    Kotlin学习小记-基础篇 Kotlin的介绍 入门基础篇 属性声明 关于val和final的小Tips 参数 1.可变参数 2.命名参数 函数返回值 1.默认返回Unit值 2.返回Nothing ...

  5. PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)

    PyTorch框架学习十--基础网络层(卷积.转置卷积.池化.反池化.线性.激活函数) 一.卷积层 二.转置卷积层 三.池化层 1.最大池化nn.MaxPool2d 2.平均池化nn.AvgPool2 ...

  6. 2020_12-电路理论框架复习思考-基础篇

    2020_12-电路理论框架复习思考-基础篇 电路理论究竟在学些什么?我认为本质上,是线性拓扑结构,KCL,KVL和V-I关系,于是,在电阻电路部分,有它的拓扑结构带来的各种性质和运算方式,包括结点方 ...

  7. MySQL学习笔记-基础篇1

    MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...

  8. 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程

    基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...

  9. STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow)

    STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow) 在上一篇文章中我们已经有训练好的tflite模型,接下来我们要在Clion中实现,如果是Keil的朋友可以 ...

最新文章

  1. Toast 位置的改变 和 Toast的简单用法
  2. 乐源机器人优点跟缺点_机床实现自动化上下料选桁架机械手还是关节机器人好?...
  3. signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
  4. 信息学奥赛一本通 1069:乘方计算 | OpenJudge NOI 1.5 13
  5. 一文梳理水下目标检测方法
  6. LINUX 硬盘分区及文件系统
  7. hbase shell查询表中某字段不为空的数据量_HBase工作原理
  8. Xcode无法启动模拟器或者真机
  9. ubuntu--雷鸟只能收邮件不能发邮件
  10. python画3d图-使用python绘制3d的图形
  11. fastjson将json字符串转化为java对象
  12. 游泳,情人节纪念一下。
  13. JavaSE基础——注解
  14. 焦仲卿刺杀孙策_惊闻:孙伯符死于焦仲卿之手。。。
  15. JDY-18+STM32的蓝牙APP控制 PWM灯光
  16. Freecad的Python脚本
  17. 自动尺寸标注 html,PxCook - 高效易用的自动标注工具,生成前端代码,设计研发协作利器...
  18. PyTorch 最新安装教程(2021-07-27)
  19. 【百度站长工具】使用网站收录工具加速网站收录
  20. Android上层进入recovery流程

热门文章

  1. MIT、哈佛合作,这个研究让神经网络认清自己“几斤几两”!
  2. CSDN博客如何转载(技术贴)
  3. android 获取网卡mac_Android获取本机Mac地址及IP地址方法
  4. ueditor版本python3_GitHub - crazyinstall/DjangoUeditor3: Django Ueditor 兼容Python3改进,Python2上也可用...
  5. python编程人脸识别工具_几行代码带你实现人脸识别。Python 就是这么简单
  6. java同步锁synchronized_Java对象锁和类锁全面解析(多线程synchronized关键字)
  7. 033_使用ArrayDeque模拟队列结构
  8. 022_Jedis的事物
  9. 004_Ajax服务器响应
  10. 025_html表格