Hibernate简介

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

  1.Hibernate优点:

  (1)对象/关系数据库映射(Basic O/R Mapping)

  它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想。

  (2)透明持久化(Persistent)

  带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的JavaBeans/POJO,这个对象没有实现第三方框架或者接口,唯一特殊的是他们正与(仅仅一个)Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。(例如,用作跟表示层打交道的数据传输对象。)

  (3)事务Transaction (org.Hibernate.Transaction)

  应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。某些情况下,一个Session之内可能包含多个Transaction对象。尽管是否使用该对象是可选的,但无论是使用底层的API还是使用Transaction对象,事务边界的开启与关闭是必不可少的。

  (4)它没有侵入性,即所谓的轻量级框架。

  (5)移植性会很好。

  (6)缓存机制。提供一级缓存和二级缓存。

  (7)简洁的HQL编程。

  2.Hibernate缺点:

  (1)Hibernate在批量数据处理的时候是有弱势。

  (2)针对某一对象(单个对象)简单的查\改\删\增,不是批量修改、删除,适合用Hibernate;而对于批量修改、删除,不适合用Hibernate,这也是OR框架的弱点;要使用数据库的特定优化机制的时候,不适合用Hibernate。

Hibernate的核心

  

从上图中,我们可以看出Hibernate六大核心接口,两个主要配置文件,以及他们直接的关系。Hibernate的所有内容都在这了。那我们从上到下简单的认识一下,每个接口进行一句话总结。

  1、Configuration接口:负责配置并启动Hibernate

  2、SessionFactory接口:负责初始化Hibernate

  3、Session接口:负责持久化对象的CRUD操作

  4、Transaction接口:负责事务

  5、Query接口和Criteria接口:负责执行各种数据库查询

  注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。


第一个Hibernate程序

  第一步:准备数据库

  首先创建一个数据库【Hibernate】,编码格式为UTF-8,然后在创建一个【user】的表,插入几行数据

  

  

  第二步:创建工程

  

  IntelliJ IDEA 集成了Hibernate等Java Web框架。选择Java(或者Java Enterprise),勾选Hibernate。默认已勾选Download,从JetBrains仓库自动下载,当前集成的版本为Hibernate 5.3.6。推荐选择Create default hibernate configuration and main class,将自动创建Hibernate配置文件。点击Next:

  

  项目构建完成后自动创建lib目录和将Hibernate所有jar包放到此目录下并自动Add as Library。同时,自动生成了hibernate.cfg.xml和Main.java:

  

  此外还需要导入MySql JDBC的包

  

 intellij配置hibernate自动生成hbm.xml文件

  (1)、View-->Tool Windows-->Database

  

  (2)、点击 + DataSource-->对应的数据库

  

  (4)、配置数据库信息,点击Test Connection 测试连接是否正常,然后点击OK

  

  可以看到我们数据库的内容

  

  

  (5)、选择View-->Tool Windows-->Persistence

  

  

  (6)、点击项目名 Generate Persistence Mapping-->By Database Schema

  

  (7)

  

  (8)、点击OK之后,intellij将会帮我们自动生成相应的实体类和hbm.xml文件

  

  然后我们点击 hibernate.cfg.xml 文件,在文件中也自动帮我们加入了配置信息

  

    

  编写配置文件

   hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property> <!-- 配置Hibernate的基本信息 -->
<!-- hibernate 所使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 执行操作时是否在控制台打印 SQL -->
<property name="show_sql">true</property> <!-- 是否对 SQL 进行格式化 -->
<property name="format_sql">true</property> <!-- 指定是否自动生成数据库表 -->
<property name="hbm2ddl.auto">update</property> <mapping resource="org/zyu/bean/UserEntity.hbm.xml"/>
<mapping class="org.zyu.bean.UserEntity"/> <!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> --> </session-factory>
</hibernate-configuration>

  编写测试类

package org.zyu.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.Test;
import org.zyu.bean.UserEntity; import java.util.List; public class HibernateTest { /**
* 添加数据
*/
@Test
public void saveTest(){
//读取配置文件
Configuration conf=new Configuration().configure();
//根据配置创建factory
SessionFactory sessionFactory=conf.buildSessionFactory();
//获得操作数据库的session对象
Session session=sessionFactory.openSession();
//开启事务
Transaction tx=session.beginTransaction(); //创建对象
UserEntity userEntity = new UserEntity();
userEntity.setId(2);
userEntity.setUsername("zyu");
//执行保存
session.save(userEntity);
//提交事务
tx.commit();
session.close();
sessionFactory.close();
} /**
*
*/
@Test
public void getTest(){
Configuration conf=new Configuration();
conf.configure();
SessionFactory sessionFactory=conf.buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();//开启事务 UserEntity userEntity = (UserEntity)session.get(UserEntity.class, 1); System.out.println(userEntity.toString()); tx.commit();
session.close();
} @Test
public void getAllTest(){
Configuration conf=new Configuration();
conf.configure();
SessionFactory sessionFactory=conf.buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();//开启事务 Query query = session.createQuery("from UserEntity"); List<UserEntity> list = query.list();
System.out.println(list.toString()); tx.commit();
session.close();
} }

  项目结构

  

  

Hibernate---快速入门的更多相关文章

  1. (转)Hibernate快速入门

    http://blog.csdn.net/yerenyuan_pku/article/details/64209343 Hibernate框架介绍 什么是Hibernate 我们可以从度娘上摘抄这样有 ...

  2. 01.Hibernate快速入门

    第一步:下载Hibernate5的运行环境 https://sourceforge.net/projects/hibernate/files/hibernate-orm/ 第二步:在数据库创建表 Cr ...

  3. hibernate快速入门

    第一步:下载Hibernate的开发包: http://sourceforge.net/projects/hibernate/files/hibernate3 第二步:Hibernate框架目录结构: ...

  4. Hibernate快速入门实例

    Hibernate工程项目创建基本步骤:导包(Hibernate依赖包.SQL驱动包).编写实体类.编写ORM映射配置文件.编写核心配置文件.编写测试驱动. 整个工程项目结构如下图: 一.导包 笔者使 ...

  5. Structs+Spring+Hibernate快速入门

    Structs+Spring+Hibernate,这是很经典的一个搭配,它的开发流程也比较程式化,下面以用户注册为例.     注册页面代码: <%@page contentType=" ...

  6. Hibernate快速入门之CRUD

    一.Hibernate的基本概念 前言 Hibernate是一个ORM框架,ORM是Object Relational Mapping的缩写,即对象关系映射,也就是将面向对象思想的编程语言与关系型数据 ...

  7. 笔记47 Hibernate快速入门(四)

    Hibernate注解,完成原来xml文件里的映射信息. 使用注解时,要修改hibernate.cfg.xml中的映射,不再是通过xml文件 <mapping class="hiber ...

  8. 笔记46 Hibernate快速入门(三)

    Hibernate相关概念 一.事物概念 Hibernate的任何对数据有改动的操作,都应该被放在事务里面. hibernate中的事务由s.beginTransaction();开始由s.getTr ...

  9. 笔记45 Hibernate快速入门(二)

    Hibernate O/R 映射 一.多对一 一个Product对应一个Category,一个Category对应多个Product,所以Product和Category是多对一的关系.使用hiber ...

  10. 笔记44 Hibernate快速入门(一)

    一.Hibernate简介 Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象. Hibernate 架构是分层的,作为数据访问层,你不 ...

随机推荐

  1. C语言I—2019秋作业02

    1.[新增内容] 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 <C语言I-2019秋作业02> 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 <实现一些基 ...

  2. 无广告版本Flash player 一枚,需要的拿走~

    无广告版本flashplayer,国内flashplayer已经被植入了广告,安装后不断的弹出广告使用体验很差,最开始还以为是电脑被恶意植入捆绑插件, 检查半天发现竟然是浏览器的flash playe ...

  3. Docker系列(五):.Net Core实现k8s健康探测机制

    k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可能是资源死锁,此时 httpd 进程并没有异常退出 ...

  4. Thinkphp5.0第三篇

    批量插入数据 //新增一条数据的方法 public function add() { /*$user =new UserModel(); $user->id=1; $user->name= ...

  5. [WP8.1]给Pivot的Header加上颜色

    先上个效果图 以前想实现这个给Pivot加颜色时只找到8的,通过参考8的实现方式,8.1的实现如下,在Pivot的样式上做一些修改,如下图的红框处 另外如果要改Pivot的Header里文字的颜色又要 ...

  6. 网关我选 Spring Cloud Gateway

    网关可提供请求路由与组合.协议转换.安全认证.服务鉴权.流量控制与日志监控等服务.可选的网关有不少,比如 Nginx.高性能网关 OpenResty.Linkerd 以及 Spring Cloud G ...

  7. javascript DOM节点

    获得子节点方式: 1.将文本内容也当成节点 childNodes firstChild lastChild 2.获得标签为内容的节点 children firstElementChild lastEl ...

  8. C#通过对象属性名修改值

    摘自:csdn 给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致.    创建对象实例的两种方法: 1. var obj = As ...

  9. SpringBoot系列教程web篇之过滤器Filter使用指南扩展篇

    前面一篇博文介绍了在 SpringBoot 中使用 Filter 的两种使用方式,这里介绍另外一种直接将 Filter 当做 Spring 的 Bean 来使用的方式,并且在这种使用方式下,Filte ...

  10. 洛谷P3258 [JLOI2014]松鼠的新家【LCA+树上差分】

    简要题意 树上n个节点,给定路径,求每个点经过次数 题意分析 对于每两个点,有两种情况,第一种,他们的lca为本身,第二种,他们有公共祖先,又要求他们的点经过次数,暴力是不可能的,复杂度不对,所以可以 ...