Hibernate框架

1、简介

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

  • hibernate是一个ORM框架。
  • ORM的全拼是Object Relational
    Mapping,译为“对象关系映射”,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上来说,它其实是创建了一个可以在编程语言里使用的“虚拟对象数据库”。

2、Hibernate框架下载

  • 访问官网:http://hibernate.org/

  • 选择稳定版本

  • 进入下载页面往下拉 找到对应的版本下载即可

页面跳转进行下载

  • 下载解压缩之后,可以看到如下目录结构:

  • required下

使用较多的ORM框架有如下:

JPA---- Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系(只有接口规范)
Hibernate---- 最流行ORM框架,通过对象-关系映射配置,可以完全脱离底层SQL
MyBatis----  本是apache的一个开源项目 iBatis,支持普通 SQL查询,存储过程和高级映射的优秀持久层框架
Apache---- DBUtils
Spring---- JDBCTemplate

3、第一个Hibernate程序

  • 创建数据库与表

正如前面所说,Hibernate是一个轻量级的JDBC封装,也就是说,我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是与数据库的交互操作。所以我们首先要创建数据库与表,这里我使用的数据库是mysql。

create database hibernateTest;
use hibernateTest;
create table t_customer(id int primary key auto_increment,name varchar(20),address varchar(50)
);
  • 创建实体类

首先在Eclipse上创建一个Dynamic Web Project,比如我创建的是hibernate_demo1,然后再切到Java透视图。这儿我们在cn.itheima.domain包中创建一个实体类——Customer.java。

public class Customer {private int id;private String name;private String address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";}
}
  • 导入Hibernate框架相关依赖jar包

  • 首先导入lib/required目录下所有的jar包:

  • 再导入mysql数据库的驱动jar包:

  • 最后导入日志相关的jar包:

    导入完日志相关的jar包之后,我们还须将project/etc/log4j.properties文件导入到工程的src目录下

4、Hibernate的相关配置文件

Hibernate的相关配置文件分为两种:

  • xxx.hbm.xml:它主要是用于描述类与数据库中的表的映射关系。
  • hibernate.cfg.xml:它是Hibernate框架的核心配置文件。

xxx.hbm.xml如下:

首先我们要学会如何编写映射配置文件,大家要知道编写完的映射配置文件应与实体类在同一个包下,并且名称应是类名.hbm.xml,所以我们要在com.jsy包下创建一个Customer.hbm.xml文件,但是它的约束应该怎么写呢?可以在Hibernate的核心jar包——hibernate-core-5.4.20.Final.jar的org.hibernate包下查找到hibernate-mapping-3.0.dtd文件,打开该文件,找到如下内容:

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

然后复制黏贴到Customer.hbm.xml文件中。
这里我先给出Customer.hbm.xml文件的内容,但内容不做过多介绍:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jsy"><!-- name:即实体类的全名table:映射到数据库里面的那个表的名称catalog:数据库的名称--><class name="Customer" table="t_customer" catalog="hibernateTest"><!-- class下必须要有一个id的子元素 --><!-- id是用于描述主键的 --><id name="id" column="id"><!-- 主键生成策略 --><generator class="native"></generator></id><!-- 使用property来描述属性与字段的对应关系如果length忽略不写,且你的表是自动创建这种方案,那么length的默认长度是255--><property name="name" column="name" length="20"></property><property name="address" column="address" length="50"></property></class>
</hibernate-mapping>

核心配置文件如下:

核心配置文件主要是Hibernate框架所使用的,它主要包含了连接数据库的相关信息和Hibernate的相关配置等。
现在我们要学会如何编写Hibernate核心配置文件,大家也要知道编写完的核心配置文件应在src目录下,并且名称应是hibernate.cfg.xml,所以我们要在src目录下创建一个hibernate.cfg.xml文件,但是它的约束应该怎么写呢?可以在Hibernate的核心jar包——hibernate-core-5.4.20.Final.jar的org.hibernate包下查找到hibernate-configuration-3.0.dtd文件,打开该文件,找到如下内容:

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

然后复制黏贴到hibernate.cfg.xml文件中。
在这个文件中到底如何配置昵?我们可以参考hibernate-release-5.4.20.Final\project\etc\hibernate.properties文件。这里我先给出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><!-- 配置关于数据库连接的四个项:driverClass  url username password --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hibernateTest</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><!-- 可以将向数据库发送的SQL语句显示出来 --><property name="hibernate.show_sql">true</property><!-- 格式化SQL语句 --><property name="hibernate.format_sql">true</property><!-- hibernate的方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 配置hibernate的映射文件所在的位置 --><mapping resource="com/jsy/Customer.hbm.xml" /></session-factory>
</hibernate-configuration>

5、快速入门测试

public class HibernateTest1 {// 保存一个Customer@Testpublic void saveCustomerTest() {// 创建一个CustomerCustomer c = new Customer();c.setName("叶子");c.setAddress("武汉");// 使用Hibernate的API来完成将Customer信息保存到mysql数据库中的操作Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件SessionFactory sessionFactory = config.buildSessionFactory();Session session = sessionFactory.openSession(); // 相当于得到一个Connection// 开启事务session.beginTransaction();// 操作session.save(c);// 事务提交session.getTransaction().commit();session.close();sessionFactory.close();}// 根据id查询一个Customer对象@Testpublic void findCustomerByIdTest() {Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件SessionFactory sessionFactory = config.buildSessionFactory();Session session = sessionFactory.openSession(); // 相当于得到一个Connection// 开启事务session.beginTransaction();// 根据业务来编写代码// Customer c = session.get(Customer.class, 1);Customer c = session.load(Customer.class, 1);System.out.println(c.getName());// 事务提交session.getTransaction().commit();session.close();sessionFactory.close();}// 修改操作@Testpublic void updateCustomerTest() {Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件SessionFactory sessionFactory = config.buildSessionFactory();Session session = sessionFactory.openSession(); // 相当于得到一个Connection// 开启事务session.beginTransaction();// 根据业务来编写代码Customer c = session.get(Customer.class, 1);c.setName("郑敏");session.update(c); // 修改操作// 事务提交session.getTransaction().commit();session.close();sessionFactory.close();}// 删除操作---根据id进行删除@Testpublic void deleteCustomerTest() {Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件SessionFactory sessionFactory = config.buildSessionFactory();Session session = sessionFactory.openSession(); // 相当于得到一个Connection// 开启事务session.beginTransaction();// 根据业务来编写代码Customer c = session.get(Customer.class, 1);session.delete(c); // 删除操作// 事务提交session.getTransaction().commit();session.close();sessionFactory.close();}// 查询所有Customer@Testpublic void findAllCustomerTest() {Configuration config = new Configuration().configure(); // Hibernate框架加载hibernate.cfg.xml文件SessionFactory sessionFactory = config.buildSessionFactory();Session session = sessionFactory.openSession(); // 相当于得到一个Connection// 开启事务session.beginTransaction();// 根据业务来编写代码Query query = session.createQuery("from Customer"); // HQL语句,它类似于SQL语句List<Customer> list = query.list();System.out.println(list);// 事务提交session.getTransaction().commit();session.close();sessionFactory.close();}}

Hibernate框架相关推荐

  1. Hibernate框架第二天

    ### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为 ...

  2. hibernate框架int和Integer类型区别

    hibernate 框架在定义实体时,int类型最好定义为Inttger类型,因为在注入时int是值类型不允许为空. 转载于:https://www.cnblogs.com/codespirit/p/ ...

  3. 我的第一个用Hibernate框架写的小例子

    Hibernate框架 今天我来主要讲一下Hibernate框架的配置步骤,在讲之前,我们先了解一下使用框架的优势 1.不再考虑公共问题,框架已经帮我们做好了 2.可以专心于业务逻辑,保证核心业务逻辑 ...

  4. Hibernate框架--学习笔记(上):hibernate项目的搭建和常用接口方法、对象的使用

    一.什么是Hibernate框架: 1.Hibernate是一个操作数据库的框架,实现了对JDBC的封装: 2.Hibernate是一个ORM(对象关系映射)框架,我们在写程序时 ,用的是面向对象的方 ...

  5. SSH框架第一天——hibernate框架

    什么是框架? 是软件的半成品,它已经完成了部分功能. 什么是hibernate? hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程 ...

  6. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简单介绍hibernate框架,之后简单说一下hibernate的目录结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hibern ...

  7. hibernate框架之主键生成

    一. hibernate 框架中主键的生成策略 (1)native: 表示由设置的方言决定采用什么数据库生成主键方式,根据底层数据库能力选择identity.sequence中的一个. 例如:在MyS ...

  8. Hibernate框架(1)

    1.Hibernate框架简述 Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.prope ...

  9. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?...

    既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...

  10. Hibernate框架(持久化类、缓存、事务管理)

    持久化类 java类与数据库的表建立了映射关系,该类被称为持久化类 1).编写规则 ①无参构造,使得Hibernate可通过反射建立对象 ②私有属性,get/set方法 ③持久化类提供一个唯一标识OI ...

最新文章

  1. 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
  2. 批量obj格式直接转gltf
  3. [NOI2007]货币兑换Cash(DP+动态凸包)
  4. 特斯拉与Mobileye口水战的背后,是自动驾驶技术话语权之争
  5. 用qss 来控制qlabel显示字体的位置_Word表格总填不好,这些技巧轻松来拯救
  6. UI binding render - how to check
  7. 排队论游乐场的游乐项目_外汇游乐场
  8. 如何一站式打造 AIoT 人才?
  9. Halcon的texture_laws算子自我研究
  10. 摄影测量单像后方交会实验报告
  11. [转贴]给想立志入行网络或已经初入行的朋友的建议(一)
  12. 传奇手游服务器搭建_复古传奇手游服务端架设教程
  13. mysql 占位符使用_Mysql占位符插入
  14. 河南专升本公共英语语法考点分析---非谓语动词
  15. PTA 7-13 小明的家庭合影
  16. ESD静电保护二极管指南
  17. Py2neo安装(未完待续)
  18. 金属新材料行业:一体压铸,一触即发
  19. 【文献翻译】综述:机器学习可解释性
  20. JVM第二天-ClassFileFormat

热门文章

  1. Java 经纬度计算两个点的之间的距离工具类
  2. 前端调试,模拟数据利器之Mock Server使用教程来啦~
  3. 一个计算机软件学生的求职简历,计算机学生求职的个人简历模板
  4. 【算法学堂】字符串基础算法
  5. ZZULIOJ1036
  6. linux环境snmptrap告警命令中间服务器接收和转发配置
  7. 3个重点,20个函数分析,浅析FFmpeg转码过程
  8. FFmpeg入门详解之71:获取ffmpeg转码的实时进度
  9. 三调专题(一)宗地四至提取的量化算法及FME实现
  10. CAN通讯进阶-基于Python使用dbc文件解析CAN数据(dbc文件的创建、使用方法)