一、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. 可空类型 Nullable<T>

    Nullable<T> 内部实现了显示和隐式转换 显示转换: public static explicit operator T(T? value) { return value.Valu ...

  2. Python-面向对象(一)-Day7

    Day7-面向对象基础 1一.isinstance(obj, cls) 1二.issubclass(sub, super) 1三.异常处理 11.异常基础 12.异常种类 23.异常其他结构 54.主 ...

  3. [phpvia/via] PHP多进程服务器模型中的惊群

    [ 概述 ] 典型的多进程服务器模型是这样的,主进程绑定ip,监听port,fork几个子进程,子进程安装信号处理器,随后轮询资源描述符检查是否可读可写: 子进程的轮询又涉及到 IO复用,accept ...

  4. JAVA中的Log4j

    Log4j的简介: 使用异常处理机制==>异常 使用debug调试(必须掌握)    System.out.Print(); 001.控制台行数有限制        002.影响性能      ...

  5. CentOS ping www.baidu.com 报错 name or service not know

    今天尝试安装了centos系统 玩一玩 刚刚装好的操作系统 ping www.baidu.com的时候  报出 name or service not known 查了好多资料,都没有很好的解决 最后 ...

  6. python运算符重载(二)

    一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...

  7. 前段 format方法

    a.为字符串创建format方法,用于字符串格式化 String.prototype.format=function (arg) { //console.log(this,arg); //this,当 ...

  8. CSS属性操作

    CSS属性操作 1 属性选择器 Elenment(元素) E[att] 匹配所有具有att属性的E元素,不考虑它的值.(注意:E在此处可以省略)(推荐使用) 例如:[po]{ font-size: 5 ...

  9. 竞赛基础篇---部分和问题(DFS)

    问题链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1058 描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使 ...

  10. 完成 bass 库的频谱显示效果图

    效果如图所示,比 bass 官方自带的例子效果要好那么一点点(峰值有滞留)...