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

  Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了。其实对于对象来说就是持久化。

  持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

持久化是将程序数据在持久状态和瞬时状态间转换的机制。

JDBC就是一种持久化机制。文件IO也是一种持久化机制。

日常持久化的方法:
1、将鲜肉冷藏,吃的时候再解冻的方法也是。
2、将水果做成罐头的方法也是。


从三个角度理解一下Hibernate:

一、Hibernate是对JDBC进一步封装

原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。

二、我们再从分层的角度来看

我们知道非常典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。

三、Hibernate是开源的一个ORM(对象关系映射)框架

ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)

ORM概念

O,  Object  对象 ——R, Realtion 关系  (关系型数据库: MySQL, SQLServer…)——M,Mapping  映射( Hibernate是ORM的实现!

ORM, 解决什么问题?

存储:   能否把对象的数据直接保存到数据库?

获取:  能否直接从数据库拿到一个对象?

ORM保存了对象和关系型数据库的映射信息,映射信息保存在xml的配置文件中

Hibernate的核心:

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

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

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

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

4、Transaction接口:负责事务

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

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


第一个Hobernate案例

搭建hibernate环境的步骤

1、下载源码:

  如:版本:hibernate-distribution-3.6.0.Final

2、引入jart文件(案例的jar文件

  Hibernate3.jar核心+required必须引入的留个jar文件 + Jpa + 数据库驱动包,如下截图

3、写入对象以及对象的映射(映射文件)

(1)、User.java

  1. package com.gqx.demo1;
  2. /**
  3. * 对象
  4. * @author 郭庆兴
  5. *
  6. */
  7. public class User {
  8. private int id;
  9. private String name;
  10. private String password;
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. public String getPassword() {
  24. return password;
  25. }
  26. public void setPassword(String password) {
  27. this.password = password;
  28. }
  29.  
  30. }

(2)。User.hbm.xml

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5.  
  6. <hibernate-mapping package="com.gqx.demo1">
  7. <class name="User" table="users">
  8. <!-- 主键字段 -->
  9. <id name="id" column="uid">
  10. <generator class="native"/>
  11. </id>
  12. <!-- 非主键 -->
  13. <property name="name" column="name"></property>
  14. <property name="password" column="password"></property>
  15. </class>
  16.  
  17. </hibernate-mapping>

4、  src/hibernate.cfg.xml  主配置文件

——>数据库连接配置

——> 加载所用的映射(*.hbm.xml)

hibernate.cfg.xml文件如下

  1. <!DOCTYPE hibernate-configuration PUBLIC
  2. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  3. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  4.  
  5. <hibernate-configuration>
  6. <session-factory>
  7. <!-- 数据库连接配置 -->
  8. <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
  9. <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;DataBaseName=Test</property>
  10. <property name="hibernate.connection.username">sa</property>
  11. <property name="hibernate.connection.password">123456</property>
  12. <!-- 生成指定的sql语言 -->
  13. <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
  14. <!-- 为了更好的展示效果,在控制台打印sql语句 -->
  15. <property name="hibernate.show_sql">true</property>
  16.  
  17. <!-- 加载所有映射 -->
  18. <mapping resource="com/gqx/demo1/User.hbm.xml"/>
  19. </session-factory>
  20. </hibernate-configuration>

5. App.java  测试

  1. package com.gqx.demo1;
  2.  
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6. import org.hibernate.classic.Session;
  7. import org.junit.Test;
  8.  
  9. public class App {
  10.  
  11. @Test
  12. public void test() {
  13. //对象
  14. User user=new User();
  15. user.setName("Hibernate");
  16. user.setPassword("111");
  17.  
  18. //获取加载配置文件的管理类型對对象
  19. Configuration config=new Configuration();
  20. config.configure(); //默认加载src/hibernate.cfg.xml文件
  21. //创建session的工厂对象
  22. SessionFactory sf=config.buildSessionFactory();
  23. //创建session(session代表一个会话,与数据库连接的会话)
  24. Session session=sf.openSession();
  25. //开启事物
  26. Transaction tx=session.beginTransaction();
  27. //对象保存到数据库
  28. session.save(user);
  29. //提交事务
  30. tx.commit();
  31. //关闭
  32. session.close();
  33. sf.close();
  34. }
  35.  
  36. }

运行结果控制台如图:

这个时候会发现数据库表users的信息会多了一条。


js小练习——移动的小方块,效果如图:

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta charset="utf-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <title>走口字练习</title>
  8. <style type="text/css" media="screen">
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. }
  13.  
  14. #div1 {
  15. width: 500px;
  16. height: 500px;
  17. border: 10px #000 solid;
  18. margin: 20px auto;
  19. position: relative;
  20. }
  21.  
  22. #div2 {
  23. width: 100px;
  24. height: 100px;
  25. background: red;
  26. position: absolute;
  27. left: 0;
  28. top: 0;
  29. }
  30. </style>
  31. </head>
  32. <script type="text/javascript">
  33. window.onload = function() {
  34.  
  35. var oDiv1 = document.getElementById('div1');
  36. var oDiv2 = document.getElementById('div2');
  37. var arr1 = ['left', 'top', 'left', 'top']; //控制方向
  38. var arr2 = [10, 10, -10, -10]; //控制每个方向对应的速度大小
  39. var arr3 = [400, 400, 0, 0];
  40. var arr4 = [0, 400, 400, 0];
  41.  
  42. setInterval(function() {
  43. if (parseInt(getStyle(oDiv2, 'left')) == arr3[iNow] && parseInt(getStyle(oDiv2, 'top')) == arr4[iNow]) {
  44. if (iNow == 3) {
  45. iNow = 0;
  46. } else {
  47. iNow++;
  48. }
  49. }
  50. oDiv2.style[arr1[iNow]] = parseInt(getStyle(oDiv2, arr1[iNow])) + arr2[iNow] + 'px';
  51. }, 50);
  52. //可以通过这种方式去设置属性
  53. oDiv2.style['background']='green';
  54.  
  55. var iNow = 0; //表示方向
  56. //根据兼容性的不同获取属性
  57. function getStyle(obj, attr) {
  58. if (obj.currentStyle) {
  59. return obj.currentStyle[attr];
  60. } else {
  61. return getComputedStyle(obj, false)[attr];
  62. }
  63. }
  64.  
  65. }
  66. </script>
  67.  
  68. <body>
  69. <div id="div1">
  70. <div id="div2"></div>
  71. </div>
  72. </body>
  73.  
  74. </html>

Hibernate—第一个案例的更多相关文章

  1. 学习ExtjsForVs(第一个案例HelloWord)

    第一个案例-Hello Word 1.本次练习以ext-4.0.7为例,首先从网上下载ext包. 2.打开包后将里面的三个文件或文件夹拷贝到项目中. resource文件夹 bootstrap.js ...

  2. spring boot实战(第一篇)第一个案例

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   spring boot实战(第一篇)第一个案例 前言 写在前面的话 一直想将spring boot相关内容写成一个系列的 ...

  3. (转)编写Spring的第一个案例并测试Spring的开发环境

    http://blog.csdn.net/yerenyuan_pku/article/details/52832145 Spring4.2.5的开发环境搭建好了之后,我们来编写Spring的第一个案例 ...

  4. javascript进阶教程第一章案例实战

    javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了“删除”按钮,在用 ...

  5. 第91讲:Akka第一个案例动手实战架构设计

    我们来看一下Akka的一个简单的wordcount的案例架构设计 从图中我们可以看出,不同的行我们是交给不同的actor进行入理的,每行首先进行map操作,识别出每个单词,然后交给reduce步骤的a ...

  6. HIBERNATE 入门小案例

    刚刚开始肯定好多人都会问什么是hibernate呢? 那么下面我们就来了解一下什么事hibernate吧! 首先,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对 ...

  7. Hibernate第一个程序(最基础的增删改查) --Hibernate

    本例实现Hibernate的第一个程序,Hibernate的优点我想大家都很清楚,在这里不做过多赘述.总之,使用Hibernate对数据库操作,也就是来操作实体对象的! 项目目录: 一.第一步要做的就 ...

  8. Hibernate第一天——入门和基本操作

    第一个接触的框架就是这个Hibernate框架了,Hibernate本意是 冬眠 ,这里有必要引用CSDN上某位网友某个帖子的评论先引出框架的概念: 框架:一个软件半成品,帮你做了一些基础工作,你就可 ...

  9. hibernate.cfg.xml案例

    一.概念. hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.既然学习Hibernate那么第 ...

随机推荐

  1. python从socket做个websocket的聊天室server

    下面的是server端:把IP改成自己的局域网IP: #coding:utf8 import socket,select import SocketServer import hashlib,base ...

  2. 本博客css style

    #navList { min-height: 60px; } #navList li { height: 60px; } #navList a { margin: 0px 5px !important ...

  3. Python3实现连接SQLite数据库的方法

    本文实例讲述了Python3实现连接SQLite数据库的方法,对于Python的学习有不错的参考借鉴价值.分享给大家供大家参考之用.具体方法如下: 实例代码如下: ? 1 2 3 4 5 6 7 8 ...

  4. 在虚拟机的linux中利用VMware Tools实现与windows共享文件

        很多人都知道安装"VMware Tools"可以实现与windows共享,但是其实它的功能远不止此.安装了"VMware Tools"后,虚拟机的网络. ...

  5. Xcode:只修改 Bundle Identifier,不修改项目名

    找到 xx-Info.plist,打开 直接去修改 Bundle identifier 即可(默认后缀是项目名字).

  6. caffe之(一)卷积层

    在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...

  7. HTML5 Geolocation

    http://diveintohtml5.info/geolocation.html http://msdn.microsoft.com/en-us/library/windows/apps/hh44 ...

  8. Android Training精要(一)ActionBar上级菜单导航图标

    Navigation Up(ActionBar中的上级菜单导航图标) 在android 4.0中,我们需要自己维护activity之间的父子关系. 导航图标ID为android.R.id.home @ ...

  9. Cocos2d—X游戏开发之CCScrollView(滑动视图)(十二)

    CCScrollView在Cocos2d-X引擎中主要使用在图片尺寸远大于屏幕尺寸的时候使用. 总体来说,使用起来比较简单. 一个是CCScrollView控件本身,一个是CCScrollViewDe ...

  10. ListView 的position和id的区别

    我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener.本文主要在于对OnItemCl ...