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();
                }
            }

    相关文章

      网友评论

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

      本文标题:Hibernate 入门

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