Hibernate 入门

作者: 廖少少 | 来源:发表于2017-02-06 15:55 被阅读1431次

本文包括:

1、CRM 项目的整体介绍

2、Hibernate 框架概述

3、Hibernate 快速入门

4、Hibernate 常用的配置文件

5、Hibernate 常用的接口和类

1、CRM 项目的整体介绍

  1. 什么是 CRM

    • CRM(Customer Relationship Management)客户关系管理,是利用相应的信息技术以及互联网技术来协调企业与顾客间在销售、营销和服务上的交互,向客户提供创新式的个性化的客户交互和服务的过程

    • 其最终目标是将面向客户的各项信息和活动集成起来,组建一个以客户为中心的企业,实现对面向客户的活动的全面管理

  2. CRM 的模块

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

    • CRM 系统功能涵盖企业销售、营销、用户服务等各各业务流程,业务流程中与客户相关活动都会在 CRM 系统统一管理。

    • 下边列出一些基本的功能模块,包括:

      • 客户信息管理

      • 联系人管理

      • 商机管理

      • 统计分析等

  3. 模块的具体功能

    • 客户信息管理

      • 对客户信息统一维护,客户是指存量客户或拟营销的客户,通过员工录入形成公司的“客户库”是公司最重要的数据资源。
    • 联系人管理

      • 对客户的联系人信息统一管理,联系人是指客户企业的联系人,即企业的业务人员和客户的哪些人在打交道。
    • 客户拜访管理

      • 业务员要开发客户需要去拜访客户,客户拜访信息记录了业务员与客户沟通交流方面的不足、采取的策略不当、有待改进的地方或值得分享的沟通技巧等方面的信息。
    • 综合查询

      • 客户相关信息查询,包括:客户信息查询、联系人信息查询、商机信息查询等
    • 统计分析

      • 按分类统计客户信息,包括:客户信息来源统计、按行业统计客户、客户发展数量统计等
    • 系统管理

      系统管理属于crm系统基础功能模块,包括:数据字典、账户管理、角色管理、权限管理、操作日志管理等

  4. SSH 框架

  5. Hibernate 的开发位置

    学习路线:

    • Hibernate 入门:主要是学习框架的入门,自己搭建框架,完成增删改查的操作

    • Hibernate 一级缓存:主要学习一级缓存、事务管理和基本的查询

    • Hibernate 进阶:主要学习一对多和多对多的操作等

    • Hibernate 查询优化:基本查询和查询的优化

2、Hibernate 框架概述

  1. Hibernate 框架的概述

    • Hibernate 是一个开放源代码的对象关系映射(ORM)框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    • Hibernate 可以应用在任何使用 JDBC 的场合,既可以在 Java 的客户端程序使用,也可以在 Servlet/JSP 的 Web 应用中使用。

    • Hibernate 是轻量级 JavaEE 应用的持久层解决方案,是一个关系数据库ORM框架

  2. 记住:Hibernate 是一个持久层的 ORM 框架!!!

  3. 什么是ORM(对象关系映射)

    • ORM映射:Object Relational Mapping

      • O:面向对象领域的 Object(JavaBean 对象)
      • R:关系数据库领域的 Relational(表的结构)
      • M:映射 Mapping(XML 的配置文件)
    • 简单一句话:Hibernate 使程序员通过操作对象的方式来操作数据库表记录

  4. Hibernate 优点:

    • Hibernate 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

    • Hibernate 是一个基于 jdbc 的主流持久化框架,是一个优秀的 ORM 实现,它很大程度的简化了 DAO 层编码工作。

    • Hibernate 的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。

3、Hibernate 快速入门

  1. 下载Hibernate 5的运行环境

  2. 创建表结构

    • 建表语句如下

        Create database hibernate_day01;
        Use hibernate_day01;
        CREATE TABLE `cst_customer` (
          `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
          `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
          `cust_user_id` bigint(32) DEFAULT NULL COMMENT '负责人id',
          `cust_create_id` bigint(32) DEFAULT NULL COMMENT '创建人id',
          `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
          `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
          `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
          `cust_linkman` varchar(64) DEFAULT NULL COMMENT '联系人',
          `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
          `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
          PRIMARY KEY (`cust_id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8;
      
  3. 搭建 Hibernate 的开发环境

    • 创建 WEB 工程,引入 Hibernate 开发所需要的 jar 包

      • MySQL的驱动jar包

      • Hibernate开发需要的jar包(资料/hibernate-release-5.0.7.Final/lib/required/所有jar包)

      • 日志jar包(资料/jar包/log4j/所有jar包)

    • 编写HibernateUtil的工具类

      • 正因为 SessionFactory 比较特别,每次使用时都是固定的代码,所以可以把代码抽取出来,编写工具类。

      • 具体代码如下

          public class HibernateUtil {
              private static final Configuration cfg;
              private static final SessionFactory factory;
              static{
                  // 给常量赋值 
                  // 加载配置文件
                  cfg = new Configuration().configure();
                  // 生成factory对象
                  factory = cfg.buildSessionFactory();
              }
              // 获取Session对象
              public static Session openSession(){
                  return factory.openSession();
              }
          }
        
    • Session 接口

      • 概述

        • Session 是在 Hibernate 中使用最频繁的接口。也被称之为持久化管理器。它提供了和持久化有关的操作,比如添加、修改、删除、加载和查询实体对象

        • Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心

        • Session是线程不安全的

        • 所有持久化对象必须在 session 的管理下才可以进行持久化操作

        • Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处

        • 持久化类与 Session 关联起来后就具有了持久化的能力

      • 特点

        • 不是线程安全的。应避免多个线程使用同一个 Session 实例

        • Session 是轻量级的,它的创建和销毁不会消耗太多的资源。应为每次客户请求分配独立的 Session 实例

        • Session 有一个缓存,被称之为 Hibernate 的一级缓存。每个 Session 实例都有自己的缓存

      • 常用的方法

        • save(obj)

            /**
             * 测试工具类
             */
            @Test
            public void testSave2(){
                // 使用工具类简化代码
                Session session = HibernateUtils.getSession();
                Transaction tr = session.beginTransaction();
          
                Customer c = new Customer();
                c.setCust_name("小风");
                session.save(c);
          
                // 提交事务
                tr.commit();
                // 释放资源
                session.close();
            }
          
        • get(Class,id)

          2个参数:class 表示要查询的 JavaBean 的 class 对象,id 为主键的值。

          例如,需要查 Customer 对应的表中主键值为7(Long 类型)的记录,代码如下:

            Customer c = session.get(Customer.class, 7L);
          
        • delete(obj)

          注意:在这里是对数据库进行操作,所以删除的是数据库的表中的某一行记录,所以首先要调用上面的 get 方法,得到对象后,再删除。

            Customer c = session.get(Customer.class, 7L);
            
            // 删除客户
            session.delete(c);
          
        • update(obj)

            Customer c = session.get(Customer.class, 95L);
            
            // 设置客户的信息
            c.setCust_name("小苍");
            c.setCust_level("3");
            
            // 修改
            session.update(c);
          
        • saveOrUpdate(obj) -- 保存或者修改(如果没有数据,保存数据。如果有,修改数据)

          • 保存

              Customer c = new Customer();
              // c.setCust_id(10L);   这是错误做法!千万不能自己设置主键去保存!
              c.setCust_name("测试");
              session.saveOrUpdate(c);
            
          • 修改

              // 先查询再改
              Customer c = session.get(Customer.class, 6L);
              c.setCust_name("小泽");
              session.saveOrUpdate(c);
            
        • createQuery() -- HQL语句的查询的方式

            // 创建查询的接口
            Query query = session.createQuery("from Customer");
            // 查询该表所有的数据
            List<Customer> list = query.list();
            for (Customer customer : list) {
                System.out.println(customer);
            }
          
    • Transaction 接口

      • Transaction 是事务的接口

      • 常用的方法

        • commit() -- 提交事务

        • rollback() -- 回滚事务

      • 特点

        • Hibernate 框架默认情况下事务不自动提交.需要手动提交事务

        • 如果没有开启事务,那么每个 Session 的操作,都相当于一个独立的事务

        在如上的代码中,都开启了事务,并且手动提交了事务。

      • 示例:

          /**
           * 测试保存
           */
          @Test
          public void testSave3(){
              Session session = null;
              Transaction tr = null;
              try {
                  // 获取session
                  session = HibernateUtils.getSession();
                  // 开启事务
                  tr = session.beginTransaction();
                  // 执行代码
                  Customer c = new Customer();
                  c.setCust_name("哈哈");
                  // 保存
                  session.save(c);
                  // 提交事务事务
                  tr.commit();
              } catch (Exception e) {
                  // 回滚事务
                  tr.rollback();
                  e.printStackTrace();
              }finally{
                  // 释放资源
                  session.close();
              }
          }

相关文章

  • 【Java中级】5.0 SSH之Hibernate框架(一)——

    1.0 Hibernate框架学习路线 Hibernate入门包括Hibernate的环境搭建、Hibernate...

  • Hibernate

    hibernate简介Hibernatehibernate简介hibernate快速入门session查询api实...

  • 一、Hibernate框架快速入门

    Hibernate快速入门 一、Hibernate的介绍 Hibernate是轻量级JavaEE应用的持久层解决方...

  • Hibernate入门1-基本用法

    Hibernate 快速入门1 - 基本用法 Hibernate简介 ORM:对象关系映射(ORM, Object...

  • Hibernate 入门

    本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...

  • Hibernate入门

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架(ORM),它对JDBC进行了非常轻量...

  • Hibernate入门

    大家好,我是IT修真院郑州分院第6期的学员,一枚正直纯洁善良的JAVA程序员今天给大家分享一下,Hibernate...

  • Hibernate入门

    慕课网Hibernate学习笔记 开发环境 eclipse mars hibernate toos 最简单的例子 ...

  • Hibernate入门复习资料

    Hibernate入门 什么是orm思想: 1.hibernate使用orm思想对数据库进行crud操作 2.在w...

  • Hibernate入门这一篇就够了

    前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibe...

网友评论

  • e027f4621b0c:让我加深印象了 挺不错的一篇文章
  • a1e94c030792:哈哈哈,是黑马的视频,我也正在看
    c801a6c839d0:@廖少少 你好,请问这是黑马哪一期的视频笔记?
    廖少少:@Matthew222 不过我现在没在看了,你加油
  • 3cc24d5f172f:代码,只显示一半😂想看另外一半,怎么办呢
    廖少少:@Java菜鸟来袭 我回复你简信了,可是你没回,你是想要这篇文章的相关代码吗?你给我邮箱吧
    3cc24d5f172f: @帅聪聪 左拉不动,有的可以拉动。有的根本就拉不动😂
    帅聪聪: @Java菜鸟来袭 左拉一下不就可以了

本文标题:Hibernate 入门

本文链接:https://www.haomeiwen.com/subject/jqkuittx.html