Hibernate入门步骤及概念
1、什么是Hibernate
Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet或JSP的Web应用中。总之,可以简单的理解为Hibernate是基于JDBC技术基础上衍生而来,并在此基础上使得由原来直接操纵数据库变成直接操作映射数据表后生成的Java类,从而实现对象编程思维来操纵数据库。
2、Hibernate理论基础概要
Hibernate是一个JDO(Java Data Object,Java对象持久化)工具。它的工作原理是通过文件把值对象和数据库表之间建立起一个映射关系,这样我们就只需要操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含某个值对象的列表(List),而不必像传统的JDBC访问方式一样把结果集的数据逐个装载到一个值对象中,为我们的 编码工作节省了大量的劳动。Hibernate提供的HQL是一个类SQL语言,它和EJBQL(HQL的一个子集)一样都提供对象化的数据库查询方式,但HQL在功能和使用方式上都非常接近于标准的SQL。Hibernate的作用是介于Java与JDBC之间的一个持久层,它通过建立与数据库表之间的映射来操纵数据库。Hibernate是基于JDBC基础之上的,在深入了解Hibernate理论技术的基础上,要先了解以下三点基础:数据库操作的三个阶段、ORM对象关系映射、持久层概念。
3、Hibernate理论基础之数据库操作
在Hibernate出现之前,对数据库操作是基于JDBC,这中间经历了操作JDBC、封装JDBC、ORM三个阶段。
1)操作JDBC阶段
本阶段即在调用JDBC连接数据库的包时,需要自己进行编写的进行数据库用户登录验证的那段代码。在这段代码中可以执行SQL语句进行数据查询、插入、删除等。
2) 封装JDBC阶段
由于仅仅只是操作JDBC,使得在实现不同逻辑功能时,都要重新编写进行数据库用户登陆验证的那段代码,使得代码重复很严重。为此,引入了JavaBean的技术,书写一个DBAccess.java类进行数据库用户登陆验证和数据库操作,并把其中进行数据库操作部分封装成不同的函数,那么实现后续的逻辑功能时只需调用这些函数即可实现。
3)ORM阶段
在对JDBC进行封装之后,能够方便的实现数据库的操作。但是,在面向对象的编程开发中,数据库的操作与普通的面向对象的Java代码,显然是两种不同的开发思路。于是就产生了ORM阶段——使原来直接操作数据库变成了直接操作普通的Java类来实现相应的数据库操作。
4、Hibernate理论基础之ORM对象关系映射
ORM是Object Relational Mapping的简称,即对象关系映射。它是一种为了解决面向对象与关系数据库存在的互不匹配技术。简单地说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象持久化到关系数据库中。下面请看一个用户实体(建立数据表时,要描述的现实世界中的实现)、数据表(实体建立完后,抽象分析完成数据表建立)、Java类(此处就是ORM要完成的任务而抽象生成的Java类)
5、Hibernate理论基础之持久层概念
ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。由此便引入了以下两个新概念:
1)持久化:就是对数据和程序状态的保持。大多数情况下特别是企业级应用,数据持久化往往也就意味将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。
2)持久层:把数据库实现当做一个独立逻辑拿出来,即数据库程序是在内存中的,为了使程序运行结束后状态得以保存,就要保存到数据库。持久层是在系统逻辑层面上,专致于实现数据持久化的一个相对独立的领域。持久层的目的是通过持久层的框架将数据库存储服务从服务层中分离出来,而Hibernate是目前最流行的持久层框架。
6、Hibernate上机操作简单实例
首先,简要说一下Hibernate的开发流程,主要分为以下五步:
1)创建Hibernate的配置文件:该文件负责初始化Hibernate配置,包括数据库配置和映射文件的配置;
2)创建Hibernate的映射文件:每一个数据表对应一个映射文件,该文件描述了数据库中表的信息,也描述了对应的持久化类的信息;
3)创建持久化类:每一个类对应于数据库表,通过映射文件进行关联;
4)面向Web应用层, 编写DAO层:通过HibernateAPI编写访问数据库的代码;
5)面向Web应用层,编写Service层: 编写业务层实现,调用DAO层类代码。
第一个Hibernate项目
步骤:
第一:建立JavaWeb项目,导入hibernate相关支持包
第二:编写实体类
第三:创建实体类对应的数据表
第四:编写映射文件,实体类名.hbm.xml(文件名必须符合这个规范)
<?xml version="1.0"?> <!-- hibernate 映射文件的约束 --> <!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.ly.entity"> <!-- 实体类与数据库表进行映射 --> <class name="User" table="t_user"> <!-- id标签 作用: 主键映射 将实体类属性id与数据库表字段id进行映射 name属性:实体类属性名 column属性:数据库表字段类型名 --> <id name="id" column="id"> <!-- 指定主键的生成策略:native,可以让主键以自增长的方式生成值 --> <generator class="native"/> </id> <!-- property标签的作用:非主键映射 将实体类属性与数据库表字段进行映射 name属性:实体类属性名 column属性:数据库表字段类型名 --> <property name="name" column="name"></property> <property name="pwd" column="pwd"></property> </class> </hibernate-mapping>
第五:编写主配置文件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> <!-- 首先设定jdbc链接相关的信息(驱动,url,用户名,密码) --> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <property name="connection.url"> jdbc:oracle:thin:@localhost:1521:orcl </property> <property name="connection.username">hbm</property> <property name="connection.password">123</property> <!-- 设定方言 --> <property name="dialect"> org.hibernate.dialect.Oracle10gDialect </property> <!-- 设定让hibernate帮我们自动创建表,不设定可以吗? --> <!-- <property name="hbm2ddl.auto">create</property> --> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="entity/StudentMapper.xml"/> </session-factory> </hibernate-configuration>
第六:编写测试代码
步骤:
1)读取配置文件
2)创建sessionFactory对象
3)获取session对象
4)开始事务(Transaction)
5)增删改查(CRUD)
6)提交事务(针对异常的出现,可以事务回滚)
7)关闭资源,释放内存空间
Hibernate入门步骤及概念的更多相关文章
- Hibernate入门这一篇就够了
前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate框架? Hibernate是一种ORM框架,全 ...
- Hibernate入门1. Hibernate基础知识入门
Hibernate入门1. Hibernate基础知识入门 20131127 前言: 之前学习过Spring框架的知识,但是不要以为自己就可以说掌握了Spring框架了.这样一个庞大的Spring架构 ...
- 走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
原文地址:Hibernate入门这一篇就够了 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate ...
- 浅谈Hibernate入门
前言 最近打算做一个自己的个人网站,经过仔细思考,打算使用hibernate作为开发的ORM框架,因此各种找资料,由于本人是刚刚接触这技术的,所以就找了比较基础的知识来分享下 基本概述 Hiberna ...
- Hibernate入门案例及增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Hibernate入门案例 增删改
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Hibernate入门6.Hibernate检索方式
Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...
- 简单的Hibernate入门简介
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...
- hibernate入门之person表
下面的hibernate入门person表指的是:根据mysql数据库中的test表和其中的元素-->建立映射表==>进而创建持久化类的顺序来操作了,下面为步骤 1.配置MySQL驱动程序 ...
随机推荐
- Docker 私有registry出现的证书问题
在上一篇 最近搭建的私有registry里,参考的文章指出,在push时可能出现问题: 可能会出现无法push镜像到私有仓库的问题.这是因为我们启动的registry服务不是安全可信赖的.这是我们需要 ...
- synchronized实现可见性
JMM关于synchronized的两条规定: 1)线程解锁前,必须把共享变量的最新值刷新到主内存中 2)线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值 ( ...
- macOS 中文件属性有at符号
在mac os 下 HFS+的文件系统里,有时候有些文件会附加上mac的专有属性,@属性就表示文件或文件夹是来自互联网下载 xattr -l 文件名:查看attrxattr -d 属性名:删除attr
- C#比较两个字符串的相似度【转】
原文地址:http://www.2cto.com/kf/201202/121170.html 我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能. ...
- 二:java常用快捷键
ctrl+F6 切换编辑器 Ctrl+E 快速显示当前Editer的下拉列表 Ctrl+1 快速修复 Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Alt+Shif ...
- windows10下mysql8.0.11忘记密码的解决办法
首先输入 新开一个cmd窗口,登录mysql,刷新权限表 FLUSH PRIVILEGES; 经过我再次修改密码测试,只用下面这条语句就可以了 ALTER USER 'root'@'localhost ...
- Extjs checkbox数值回显
昨天上午花了半天时间都在调 extjs的编辑页面里的CheckBox的回显问题,一直没搞定,毕竟我接触extjs才一个月不到,属于小白.先上个图: 这就是编辑页面的时候,需要的效果.然后我代码里是用了 ...
- 【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)
文章提纲: 第一部分:介绍模块规范及之间区别 第二部分:以 node.js 实现模块化规范 源码,深入学习. 一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须 ...
- 【MUI框架】学习笔记整理 Day 1
MUI 框架之 [原生UI] (1)accordion(折叠面板) 由二级列表演化而来 <ul class="mui-table-view"> 2 <li cla ...
- opencv3.2.0图像离散傅里叶变换
源码: ##名称:离散傅里叶变换 ##平台:QT5.7.1+opencv3.2.0 ##日期:2017年12月13. /**** 新建QT控制台程序****/ #include <QCoreAp ...