Hibernate 框架

1.1   什么是框架?

框架是一个提供了可重用的公共结构半成品。

2.1   关于Hibernate

Hibernate是数据持久层的一个轻量级框架。数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。并且Hibernate是一个开源的orm(Object relations mapping)框架,提供了查询获取数据的方法,用面向对象的思想来操作数据库,节省了我们开发处理数据的时间。

(数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称)

2.2   Hibernate的优势

1)、使用简介的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称         alue(值1,值2,值3,……),而现在的做法是:save(对象)。

2)、使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。

3)、没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。

4)、支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。

2.3   Hibernate的缺点

当然一个事物,不可能十全十美,即使如此优秀的Hibernate也有自己的弱点。比如:若是大量数据批量操作。则不适合使用Hibernate。并且一个持久化对象不能映射到多张表中。

2.4   持久化与ORM

ORM:(Object Relational Mapping)对象关系映射

持久化:持久化是程序数据在瞬时状态和持久状态间转换的过程

3.1   Hibernate 环境搭建

1.  下载需要的jar包

4.1   Hibernate中5个核心接口

1)、Configuration接口:负责配置及启动Hibernate,用来创建sessionFactory

2)、SessionFactory接口:一个SessionFactory对应一个数据源存储,也就是一个数据库对应一个SessionFactory。SessionFactory用来创建Session对象。并且SessionFactory是线程安全的,可以由多个线程访问SessionFactory共享。

3)、Session接口:这个接口是Hibernate中常用的接口,主要用于对数据的操作(增删改查)。而这个Session对象不是线程安全的。不能共享。

4)、Query接口:用于数据库的查询对象。

5)、Transaction接口:Hibernate事务接口。它封装了底层的事务操作,比如JTA(;java transcation architecture)所有的数据操作,比如增删改查都写在事务中。

创建Hibernate配置文件hibernate.cfg.xml

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 数据库连接设置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- Student为你的数据库名称 -->
<property name="connection.url">jdbc:mysql://localhost:3306/Student</property>
<property name="connection.username">root</property>
<property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size"></property> <!-- SQL方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property> <!-- Disable the second-level cache -->
<property name="cache.provider_class">
org.hibernate.cache.NoCacheProvider
</property> <!-- 显示SQL语句 -->
<property name="show_sql">true</property>
<!-- 格式化输出SQL语句 -->
<property name="format_sql">true</property> <!-- validate 加载hibernate时,验证创建数据库表结构 -->
<!-- create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。 -->
<!-- create-drop 加载hibernate时创建,退出是删除表结构 -->
<!-- update 加载hibernate自动更新数据库结构 -->
<property name="hbm2ddl.auto">create</property>
<property name="myeclipse.connection.profile"></property> <!-- hibernate与数据库的对象关系映射文件**.hbm.xml -->
<mapping resource="com/lsj/hibernate/model/Student.hbm.xml" />
<!-- 使用annotion注解时,hibernate与数据库对象关系映射表示 -->
<!-- 推荐使用annotion注解来表示映射关系 -->
<mapping class="com.lsj.hibernate.model.Teacher" />
</session-factory> </hibernate-configuration>

小配置文件  xxxxx.hbm.xml

<!--?xml version="1.0"?-->

<hibernate-mapping package="com.zhouxiang.model">
<class name="User" polymorphism="explicit">
<id name="id">
<generator class="uuid"></generator>
</id>
<property name="name" column="username"></property>
<property name="age" column="age"></property>
</class>
</hibernate-mapping>

创建一个Teacher的实体类,这里用的是annotion注解,还有一种方法是创建XXX.hbm.xml的关系映射文件,具体实现请参见附件的源码

 1 package com.lsj.hibernate.model;

  import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table; //Entity是javax.persistence.Entity包中的
@Entity
// 映射的表名
@Table(name = "teacher")
public class Teacher { private int id;
private int age;
private String name; // 主键,一般写在get方法中,而不是在定义中
@Id
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }

创建一个TeacherTest的测试类

 package com.lsj.hibernate.test;

  import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; import com.lsj.hibernate.model.Teacher; public class TeacherTest { public static void main(String[] args) {
Teacher t = new Teacher();
t.setAge();
t.setName("小杰"); Configuration cfg = new Configuration();
// 读取hibernate.cfg.xml中的配置
cfg.configure();
// 获取SessionFactory
SessionFactory sf = cfg.buildSessionFactory();
// 获取Session
Session session = sf.openSession();
// 开启事务
session.beginTransaction();
// 保存
session.save(t);
// 提交事务
session.getTransaction().commit();
// 关闭连接
session.close();
sf.close();
}
}

5.1  总结

其实简而言之hibernate只做了一件事,那就是将对象及对象关系持久化到关系型数据库中,而这种映射关系是直接使用面向对象编程思维来操作数据库,这样使得程序员在编程的过程中只需要关注如何处理对象与对象间的关系,而不需要去考虑对象是如何持久化到数据库中。hibernate使得编程人员在软件开发过程中将更多的精力集中在对象的处理上,简化了数据持久化的过程,加快了开发速度,增强了开发效率,降低了风险。

初识 Hibernate的更多相关文章

  1. 初识Hibernate 缓存

    生活就像一杯咖啡,让你我慢慢的品尝,品尝它的苦涩和甘甜...... 一.什么是Hibernate缓存. 解析:白话来说就是缓存数据的容器 官方标准点缓存:是计算机领域的概念,它介于应用程序和永久性数据 ...

  2. 初识hibernate框架之一:进行简单的增删改查操作

    Hibernate的优势 l 优秀的Java 持久化层解决方案  (DAO) l 主流的对象—关系映射工具产品 l 简化了JDBC 繁琐的编码 l 将数据库的连接信息都存放在配置文件 l 自己的ORM ...

  3. 初识hibernate小案例

    使用hibernate前需要导入相关JAR包. 1.它可以接受词文法语言描述,并能产生识别这些语言的语句的程序 2.是一个Java的XML API,类似于jdom,用来读写XML文件的 3.支持注解配 ...

  4. 初识hibernate

    //针对myEclipse2014版本 怎样新建一个工程实现这些东西的导入. 打开myeclipse. 2.点击右上角的open perspective 找到这个 MyEclipse Database ...

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

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

  6. Hibernate基础学习(一)—初识Hibernate

    一.对象的持久化 狭义的理解: 持久化仅仅指把对象永久的保存到数据库中. 广义的理解: 持久化包括和数据库相关的各种操作.         保存: 把对象永久保存到数据库中.         更新: ...

  7. 初识Hibernate之环境搭建

         相信所有做后端的程序员同行们,没有不知道Hibernate大名的.这是一个经典的轻量级Java EE持久层的解决方案,它使得我们程序员能以面向对象的思维操作传统的关系型数据库,这也是其存在的 ...

  8. 初识Hibernate之理解持久化类

         上一篇文章我们简单介绍了Hibernate相关的一些最基本的文件及其作用,并在最后完整的搭建了Hibernate的运行环境,成功的完成了与数据库的映射.但是至于其中的一些更加细节的地方并没有 ...

  9. 初识Hibernate之关联映射(一)

    上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作.但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本 ...

  10. 初识Hibernate之关联映射(二)

    上篇我们介绍了关联映射的几种形式,有单向多对一,单向一对多,还有双向一对多.本篇接着介绍有关关联映射的其他几种映射方式,主要有以下几种: 基于外键的单向一对一关联映射 基于主键的单向一对一关联映射 单 ...

随机推荐

  1. Spring Boot 创建自定义的properties文件

    以IDEA2018为例,在资源文件夹上点击鼠标右键,依次选择 New -> Resource Bundle ,如下图: 在弹出的对话框中,填写properties文件的名称(不用填写.prope ...

  2. [Xcode 实际操作]九、实用进阶-(15)屏幕截屏:截取当前屏幕上的显示内容

    目录:[Swift]Xcode实际操作 本文将演示如何截取屏幕画面,并将截取图片,存入系统相册. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UI ...

  3. ASPNET-ASPNETCORE 认证

    话题背景 关于认证我的个人理解是,验证信息的合法性.在我们生活当中,比如门禁,你想进入一个有相对安全措施的小区或者大楼,你需要向保安或者门禁系统提供你的身份信息证明,只有确定你是小区业主,才可以进来, ...

  4. IT兄弟连 JavaWeb教程 JavaBean组件定义

    JavaBean是一种可重复使用的且跨平台的软件组件.JavaBean可分为两种:一种是由用户界面的JavaBean,还有一种是没有用户界面(User Interface,UI),主要负责表示业务数据 ...

  5. PHP不重新编译,单独添加模块扩展的方法

    php自身提供了很多扩展,比如curl,gmp, mbstring等.我们在编译安装php时未必安装了所有扩展.那么在安装完php后,如果想单独安装某个php自身的扩展怎么办呢? 我们以curl扩展模 ...

  6. java泛型笔记一

    名词:泛型类 泛型方法 原始类型 子类型 版本 参数化类型 通配符类型 超类通配 子类通配 全通配 定义变量 创建对象 检查模板 类型实参 类型形参 补充 替代语法特征:尖括号括起来的类型参数表 // ...

  7. css-原理详解

    语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 选择器一般使用id或者class选择器,声明由{}包含,每条声明由一个属性和一个值组成. .city { float:left; ...

  8. js操作表格

    js 操作table: insertRow(),deleteRow(),insertCell(),deleteCell()方法 表格有几行: var trCnt = table.rows.length ...

  9. [在读]JavaScript异步编程:设计快速响应的网络应用

    很棒的一本,就如书名所示,主要讲js异步的一些东西,比如定时器.Jquery的promise和deffered,node...看了一小半.推荐哦~~

  10. mac Latex dvipdfm 缺少字体错误 Failed to read UCS2/UCS4 TrueType cmap

    dvipdfmx 命令产生 ** ERROR ** Failed to read UCS2/UCS4 TrueType cmap... 错误的原因是没有把 simsun.ttf simkai.ttf ...