zoukankan      html  css  js  c++  java
  • JavaWeb学习之Hibernate入门

    一、Hibernate概述

    1、什么是Hibernate

      Hibernate是一个开放源代码的ORM(对象关系关系映射)框架

        ORM:Object Relational Mapping(对象关系映射)。将Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。

     

     2、Hibernate具有以下几点优势:

      ①、Hibernate对JDBC访问数据库的代码做了轻量级封装,简化了数据访问村层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率。

      ②、Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,很大程度简化了DAO(Data Access Object,数据访问对象)层编码工作。

      ③、Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系

      ④、可扩展性强,由于源码的开源及API的开发,当本身功能不够用时,可用自行编码进行扩展。

    二、Hibernate使用

     1、下载Hibernate的开发环境

       Hibernate5.x(推荐使用)  https://sourceforge.net/projects/hibernate/files/hibernate-orm/

     2、解压Hibernate

      documentation:Hibernate开发的文档

      lib:Hibernate开发包

        required:Hibernate开发的必须的依赖包

        optional:Hibernate开发的可选的jar包

      project:Hibernate提供的项目

    3、创建一个使用Hibernate的项目

    3.1、引入jar包

      ①、数据库驱动包

      ②、Hibernate开发的必须的jar包(required)

      ③、Hibernate日志记录包

      

    3.2、创建表

    CREATE TABLE cst_customer (
      cust_id bigint NOT NULL  IDENTITY(1,1) ,
      cust_name varchar(32) NOT NULL,
      cust_source varchar(32) DEFAULT NULL,
      cust_industry varchar(32) DEFAULT NULL,
      cust_level varchar(32) DEFAULT NULL,
      cust_phone varchar(64) DEFAULT NULL,
      cust_mobile varchar(16) DEFAULT NULL
    ) ON [PRIMARY]

    3.3、创建实体类

    public class Customer {
        private Long cust_id;
        private String cust_name;
        private String cust_source;
        private String cust_industry;
        private String cust_level;
        private String cust_phone;
        private String cust_mobile;
    }

    3.4、创建映射

    映射需要通过XML的配置文件来完成,这个配置文件可以任意命名。尽量统一命名规范(类名.hbm.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <!-- 
            以上规约内容是 hibernate-core-5.x.Final.jar包中
            org.hibernate => hibernate-mapping-3.0.dtd(或hibernate-mapping-5.0.dtd) 
        -->
    <hibernate-mapping>
    <!-- 建立类与表的映射 -->
    <class name="com.marw.util.Customer" table="cst_customer" catalog = "HibernateDB" schema = "dbo">
        <!-- 建立类中的属性与表中的主键对应 -->
        <id name="cust_id" column="cust_id">
            <generator class="native"></generator>
        </id>
        
        <!-- 建立类中的普通属性与表中的字段对应 -->
        <property name="cust_name" column="cust_name"></property>
        <property name="cust_source" column="cust_source"></property>
        <property name="cust_industry" column="cust_industry"></property>
        <property name="cust_level" column="cust_level"></property>
        <property name="cust_phone" column="cust_phone"></property>
        <property name="cust_mobile" column="cust_mobile"></property>
    </class>
    </hibernate-mapping>

    注意:com.microsoft.sqlserver.jdbc.SQLServerException:对象名xxx无效原因:指定catalog = "数据库名" schema =“模式”(正常情况下不用指定catalog、schema)不正

    3.5、创建数据库配置文件

      

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        <!-- 
            以上规约内容是 hibernate-core-5.x.Final.jar包中
            org.hibernate => hibernate-configuration-3.0.dtd 
        -->
    <hibernate-configuration>
        <session-factory>
            <!-- 连接数据库基本参数 -->
            <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
            <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;databaseName=HibernateDB;</property>
            <property name="hibernate.connection.username">sa</property>
            <property name="hibernate.connection.password">AAA@111</property>
            
            <!-- 配置Hibernate的方言 -->
            <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
            <!-- 可选配置start -->
            <!-- 控制台打印sql语句 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 控制台打印sql语句 格式化-->
            <property name="hibernate.format_sql">true</property>
            <!-- 可选配置end -->
            
            <!-- 配置映射 -->
            <mapping resource="com/marw/util/Customer.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    注意:com.microsoft.sqlserver.jdbc.SQLServerException:对象名xxx无效的原因:hibernate.connection.url中的数据库名databaseName=不正

    3.6、编写测试代码

    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.jupiter.api.Test;
    
    /**
    * @Title: HibernateTest
    * @Description: 
    * @author: marw
    * @date 2020/11/03 14:03:48
    */
    public class HibernateTest {
        @Test
        public void demo1() {
        // 1.加载Hibernate的配置文件Hibernate.cfg.xml
        Configuration configuration=new Configuration().configure();
        // 2.获取SessionFactory对象  类似JDBC连接池
        SessionFactory factory=configuration.buildSessionFactory();
        // 3.获取Session对象    类似JDBC中Connection
        Session session=factory.openSession();
        // 4.开启事务(Hibernate版本5不用手动开启事务,要兼容版本3需要手动开启事务)
        Transaction transaction=session.beginTransaction();
        // 5.编写代码
        Customer customer=new Customer();
        customer.setCust_name("zhang");
        
        session.save(customer);
        // 6.提交事务
        transaction.commit();
        // 7.资源释放
        session.close();
        }
    }
  • 相关阅读:
    Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源
    Spring Boot 如何给微信公众号返回消息
    Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
    Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置
    Spring Boot 开发微信公众号后台
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    Spring Boot2 系列教程(十六)定时任务的两种实现方式
    Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
    Spring Boot2 系列教程(十四)CORS 解决跨域问题
    JavaScript二维数组
  • 原文地址:https://www.cnblogs.com/WarBlog/p/13919784.html
Copyright © 2011-2022 走看看