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

 

posted @ 2020-11-03 13:34  一杯水M  阅读(229)  评论(0编辑  收藏  举报