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();
        }
    }
  • 相关阅读:
    kafka控制测试发送接收消息
    Kafka 启动报错java.io.IOException: Can't resolve address.
    java问题 2019
    java各种面试问题
    java 架构师
    开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽!
    Dubbo 18 问
    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。
    XMind2TestCase 工具,提供了一个高效测试用例设计的解决方案(开源)
    windows下面安装Python和pip终极教程
  • 原文地址:https://www.cnblogs.com/WarBlog/p/13919784.html
Copyright © 2011-2022 走看看