一、JavaEE开发三层结构和三大框架的对应关系:

  Struts2框架 -> 表现层   web层(MVC是表现层的设计模型)
          业务层   service层
  Hibernate框架 -> 持久层   dao层
  Spring框架 ->综合类框架

二、持久层技术有哪些:
  JDBC:操作数据库最底层的方式
    优势:底层、效率高
    弊端:编写代码时比较繁琐,尤其是封装结果集
  DBUtils:基于JDBC进行了简单封装
    优势:封装结果集操作变得简单,并且仍然是自己编写SQL语句,相对效率没有太大影响
    弊端:要求实体类中属性名和数据库表的字段名必须一致
       要求记忆东西较多
  共同点:都要求自己书写SQL语句

使用JDBC和DBUtils操作产品表的时遇到的问题:
  JDBC:查询封装结果时繁琐
  DBUtils:保存或更新时繁琐

三、Hibernate概述

Hibernate框架是当今主流的Java持久层框架之一,由于它具有简单易学、灵活性强、扩展性强等特点,能够大大地简化程序的代码量,提高工作效率,因此受到广大开发人员的喜爱。   

Hibernate是一个开放源代码的ORM( Object Relational Mapping,对象关系映射)框架,它对JDBC进行了轻量级的对象封装,使得Java开发人员可以使用面向对象的编程思想来操作数据库。它是一个轻量级、企业级、开源的持久层框架(通常情况下,软件工程的持久层解决方案,一个为主一个为辅(写SQL语句(JDBC和DBUtils)和不写SQL语句(Hibernate))),可以操作数据库的框架(框架:一个架构)。

Tips:ORM (Object Relational Mapping):对象关系映射,建立实体类和数据库表的对应关系,实现操作类对象就相当于操作数据库。
       操作方式:建立对象关系映射,实现操作实体类就相当于操作数据库表

Tips:轻量级:使用时依赖资源很少(目前使用阶段,只依赖log4j,c3p0连接池)
     企业级:指的是在企业级应用中使用的较多
     开源的:开放源代码

与其它操作数据库的技术相比, Hibernate具有以下几点优势

    ● Hibernate对JDBC访问数据库的代码做了轻量级封装,大大简化了数据访问层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率;
    ● Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO( Data Access Object,数据访问对象)层编码工作;
    ● Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系;
    ● 可扩展性强,由于源代码的开源以及API的开放,当本身功能不够用时,可以自行编码进行扩展。

四、CRM功能模块(Customer Relationship Management)

CRM系统实现了对企业销售、营销、服务等各阶段的客户信息、客户活动进行统一管理。

CRM系统功能涵盖企业销售、营销、用户服务等各各业务流程,业务流程中与客户相关活动都会在CRM系统统一管理,下边列出一些基本的功能模块,包括:客户信息管理、联系人管理、商机管理、统计分析等 ,CRM系统表如下:

        

   1.客户信息管理:对客户信息统一维护,客户是指存量客户或拟营销的客户,通过员工录入形成公司的“客户库”,是公司最重要的数据资源。
   2.联系人管理:对客户的联系人信息统一管理,联系人是指客户企业的联系人,即企业的业务人员和客户的哪些人在打交道。
   3.客户拜访管理:业务员(用户)要开发客户需要去拜访客户,客户拜访信息记录了业务员与客户沟通交流方面的不足、采取的策略不当、有待改进的地方或值得分享的沟通技巧等方面的信息。
   4.综合查询:客户相关信息查询,包括:客户信息查询、联系人信息查询、商机信息查询等。
   5.统计分析:按分类统计客户信息,包括:客户信息来源统计、按行业统计客户、客户发展数量统计等。
   6.系统管理:系统管理属于crm系统基础功能模块,包括:数据字典、账户管理、角色管理、权限管理、操作日志管理等。
  

六、搭建Hibernate开发环境

 配置SessionFactory过程:
    第一部分:
      连接数据库的信息:
        #hibernate.connection.driver_class com.mysql.jdbc.Driver
        #hibernate.connection.url jdbc:mysql:///test
        #hibernate.connection.username gavin
        #hibernate.connection.password
        #hibernate.dialect org.hibernate.dialect.MySQLDialect
    第二部分:
      hibernate的可选配置:
        #hibernate.show_sql true
        #hibernate.format_sql true
        #hibernate.hbm2ddl.auto update
    第三部分:
      映射文件的位置

Tips:SQL结构化查询语言:一共分为6个部分
      DDL:Data Definition Language  数据定义语言(建库、建表、修改表结构)
      DML:Data Manipulation Language  数据库操作语言
      DQL:Data Query Language  数据库查询语言
      DCL:Data Control Language  数据控制语言(授权)
      CCL:Cursor Control Language  游标控制语言(游标操作)
      TPL:Transaction Processing Language  事务处理语言(开启、提交、回滚事务)

映射文件的配置:

Hibernate常用配置属性:

七、Hibernate入门案例:
   步骤分析:    * 1. 解析主配置文件
          * 2. 根据配置文件SessionFactory
          * 3. 根据SessionFactory创建Session
          * 4. 开启事务
          * 5. 执行操作(保存)
          * 6. 提交事务
          * 7. 释放资源

八、hibernate的常用对象:
  1.Configuartion:(熟练使用)

    常用方法:●  加载核心配置文件:在使用 Hibernate时,首先要创建 Configuration实例,Configuration实例主要用于启动、加载、管理 hibernate的配置文件信息。

            ●  加载映射文件:Hibernate除了可以使用 Configuration对象加载核心配置文件以外,还可以利用该对象加载映射文件。

  2.SessionFactory:(重要)(线程安全,创建单例对象)

    ● 它是线程安全的,它的同一个实例能够供多个线程共享。

    ● 它是重量级的,不能随意的创建和销毁。
    使用细节:
      * 连接数据库信息;
      * hibernate基本配置;
      * 映射文件的位置以及映射文件中的配置;
      * 一些预定义的SQL语句(比如全字段缓存,根据id全字段更新、根据id全字段查询、根据id全字段删除);
      * hibernate的二级缓存。
    使用原则:一个应用应该只有一个SessionFactory,在应用加载时创建,应用卸载时销毁。

  3.Session:(很重要)Session是应用程序与数据库之间交互操作的一个单线程对象,是hibernate运作的中心。
    使用原则:一个线程只能有一个Session对象。
    常用方法:

        ● save( ):保存一个实体到数据库;

        ● update( ):更新一个实体;

        ● delete( ):删除一个实体;

        ● get(Class class,Serializable id)和get(Class class,Serializable id):根据id查询一个实体;

        ● createQuery和createSQLQuery:用于数据库操作对象

        ● createCriteria():条件查询

        ● beginTransaction( ):开启事务,并返回事物对象。

  4.Transaction:(熟练使用)  

    常用方法:

        ● commit( ):提交相关联的session实例;

        ● rollback( ):撤销事务操作。

 九、Hibernate中查询一个实体的方法:(面试考点)

  ● get方法:get(Class class,Serializable id); 

  ● load方法:load(class class,Serializable id);(load方法默认情况下是延迟,可以通过配置的方式改为立即加载)    

    共同点:都是根据id查找一个实体

    区别:
    1.查询的时机不一样:
      1.)get方法的查询时机:每次调用get方法时,马上查询 立即加载;
      2.)  load方法的查询时机:每次真正使用的时候,发起查询 延迟加载(懒加载/惰性加载)。
    2.返回结果不一样:
      1.)  get方法返回的对象是实体类类型;
      2.)  load方法返回的对象是实体类类型的代理对象。

[ 学习笔记 ] Hibernate框架学习之一的更多相关文章

  1. Hibernate学习笔记--Hibernate框架错误集合及解决

    错误1:MappingException: Unknown entity解决方案 http://jingyan.baidu.com/article/e75aca8552761b142edac6cf.h ...

  2. 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

    目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...

  3. HTML+CSS学习笔记 (6) - 开始学习CSS

    HTML+CSS学习笔记 (6) - 开始学习CSS 认识CSS样式 CSS全称为"层叠样式表 (Cascading Style Sheets)",它主要是用于定义HTML内容在浏 ...

  4. 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧

    目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...

  5. 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用

    目录 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用 24.1 expect实现无交互登录 24.1.1 安装和使用expect 24.2 正则表达式的使用 24 ...

  6. 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用

    目录 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用 23.1 跳出循环 23.1.1 break和continue 23.2 Shift参数左移指令 23.3 函数 ...

  7. 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环

    目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...

  8. 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用

    目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...

  9. 学习笔记:CentOS7学习之二十:shell脚本的基础

    目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...

随机推荐

  1. ViurtualBox配置虚拟机Linux的网络环境

    之前可以使用VMware配置成功,让虚拟机和本地通信,虚拟机可以访问外网,但是VMware体积太大了,最后终于把virtualBox也配置成功,也使得两者兼备 环境:本地windows7 64位专业版 ...

  2. jhipster生成项目无法使用restful请求,报access_denied 403错误

    写在前边: 我们的微服务是注册中心.uaa.gateway为基础,添加微服务应用,昨天下午在测试jhipster的增删改查,因为jhipster生成的代码都是restful的,好不容易找到网关配置的映 ...

  3. ajax中设置contentType: “application/json”的作用

    最近在做项目交互的时候,刚开始向后台传递数据返回415,后来百度添加了 contentType:"application/json"之后返回400,然后把传输的数据格式改为json ...

  4. 深入了解GOT,PLT和动态链接

    之前几篇介绍exploit的文章, 有提到return-to-plt的技术. 当时只简单介绍了 GOT和PLT表的基本作用和他们之间的关系, 所以今天就来详细分析下其具体的工作过程. 本文所用的依然是 ...

  5. 阿里云API网关(4)快速入门(开放 API)

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  6. CodeForces 1B-字符串,进制转换与数学

    一个萌新的成长之路 Background 同学们都回家了,只有我和wjh还有邢神在机房敲代码,吃random口味的方便面-- Description Translated by @PC_DOS fro ...

  7. Python 爬虫基础知识

    requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...

  8. Sublime Text3 运行Python 出现Error:Decode error - output not utf-8

    问题描述: Sublime Text 3 在build Python时,如果python源代码输出有中文,例如"print('中文')",Sublime Text 会报 [Deco ...

  9. 工作笔记 | Visual Studio 调用 Web Service

    引言 最近笔者负责ERP财务系统跟中粮集团财务公司的财务系统做对接,鉴于ERP系统中应付结算单结算量比较大,而且管理相对集中,ERP系统与中粮财务公司的支付平台系统对接,实现银企直联,将网银录入的环节 ...

  10. 福利:100G Java全套学习视频免费送了

    嗯 是的 众所周知 java工会自开办以来 一直致力于分享一些 java技术总结 学习方法..等等等 所以 从我做这个公众号以来 我的手机就没有消停过一天 因为 每天都有很多粉丝问我 "您好 ...