Hibernate 基本使用

Hibernate框架概述

什么是框架

  • 软件的一个半成品,已经帮你完成了部分功能。
  • 把一些不确定的东西,按照框架要求,达到相应的功能

JavaEE技术三层架构所用到的技术

hibernate简介

hibernate是什么框架

  • Hibernate是一个开放源代码的对象关系映射框架
  • 它对JDBC进行了非常轻量级的对象封装
  • 它将POJO与数据库表建立映射关系,是一个全自动的orm框架
  • hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
  • Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用
  • 持久层的ORM框架

ORM

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

hibernate好处

  • 对JDBC访问数据库的代码进行了轻量级封装,简化了数据访问层繁琐重复性的代码,减少了内存消耗,加快了运行效率
  • 是一个基本JDBC的主流持久化框架,很大程度上简化了DAO层的编码工作
  • 性能非常好, 映射灵活性比较好,支持多关系数据库,一对一,一对多,多对多的各种复杂关系
  • 可扩展性强,源代码及API开放,当本身功能不够用时,可以自行编码进行扩展

Hibernate基本使用

下载框架

下载地址

Hibernate目录

documentation

  • Hibernate开发的文档

lib

  • Hibernate开发的文档
  • required:Hibernate开发的必须的依赖包
  • optional:Hibernate开发的可选的jar包

project

  • Hibernate提供的参考项目

使用

1.创建一个项目

  • 可以Java项目中使用
  • 可以在Web项目中使用都可以

2.引入必须的jar包

  • 数据库的驱动包
  • Hibernate开发必须的Jar包

3.建表

CREATE TABLE `customer` (
  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
  `cust_level` varchar(32) 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=1 DEFAULT CHARSET=utf8;

4.创建ORM类

可以用lombok插件自动生成set和get方法。

5.创建Hibernate的核心配置文件

  • 通常都叫hibernate.cfg.xml
  • 创建完毕后, 也有一个约束要引入
  • 在org.hibernate包当中可以找到对应的dtd configuration.dtd
  • 属性名记不住
    • 在目录提供的project当中有一个etc
    • 在etc当中 有一个hibernate.properties的文件打开
    • 打开后,会看到连接各种数据库时需要的属性参数
  • 需要配置方言
    • 不同的数据库,使用的语言不一样
    • 在hibnate当中,sql语句会自动帮你生成
    • 设置方言,就是设置自动生成的语言是哪个数据库当中的sql
  • 配置核心配置文件要加载哪一个映射
    • 映射的路径就是上面创建的跟表相对应的配置文件
    • 把全路径的点,要换成斜杠
  • 配置演示
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- 连接数据库的基本参数 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3307/hibernate</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">abcd</property>
        <!-- 配置Hibernate的方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 打印SQL -->
        <property name="hibernate.show_sql">true</property>
        <!-- 格式化SQL -->
        <property name="hibernate.format_sql">true</property>
        <!-- 自动创建表 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        
        <!--加载映射文件 -->
        <mapping resource="com/xzh/hibernate/domain/Customer.hbm.xml" />
    </session-factory>
</hibernate-configuration>

6.创建映射关系

  • 通过XML的配置文件来进行配置
  • 这个配置文件可以任意命名
    • 类名.hbm.xml
    • 别人一看,就能够知道是哪个类的映射文件
  • 在xml当中引入dtd
    • 在hibernate-core.jar包当中
    • 在org.hibernate包当中可以找到对应的dtd
    • 打开mapping.dtd
    • 把里面的约束复制一份,放到xml当中
  • 建立类与表的映射
    1.建立表与类的映射
    2.建立主键的映射
    3.建立普通属性的映射

  • 配置演示

<?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-mapping>
    <class name="com.xzh.hibernate.domain.Customer" table="customer">
        <!--建立类属性哪一个是主键 还要跟数据库当中主键进行对应 -->
        <id name="cust_id" column="cust_id">
            <generator class="native" />
        </id>
        <!--建立类中的普通属性与数据库当中字段进行关联 -->
        <property name="cust_name" column="cust_name" />
        <property name="cust_source" column="cust_source" />
        <property name="cust_industry" column="cust_industry" />
        <property name="cust_level" column="cust_level" />
        <property name="cust_phone" column="cust_phone" />
        <property name="cust_mobile" column="cust_mobile" />
    </class>
</hibernate-mapping>

7.创建类执行

@Test
public void test1() {
    // 1.加载配置文件
    Configuration configure = new Configuration().configure();
    // 2.创建sessionFactory --JDBC链接池
    SessionFactory sessionFactory = configure.buildSessionFactory();
    // 3.获取session --连接对象
    Session session = sessionFactory.openSession();

    Customer customer = new Customer();
    customer.setCust_name("myxq");
    customer.setCust_level("2");
    // 4.保存
    session.save(customer);
    // 5.释放资源
    session.close();
    sessionFactory.close();
    }

常见配置

映射配置

class标签

  • 作用:建立类与表的映射关系
  • 属性
    • name:类的全路径
    • table:表名;类名与表名一致,table可以省略;如果没有该表,或自动创建一个表。
    • catalog:数据库名,可以不写

ID标签

  • 作用:建立类中的属性与表中主键的对应关系
  • 属性
    • name
    • column
    • length
    • type

property

  • 作用:用于建立类中普通属性与表的对应关系
  • 属性
    • name:类中的属性名
    • column:表中的字段名;如果字段名与类中的属性名一致,column是可以省略
    • length:字段的长度
      • 默认数据库当中已经有长度了
      • hibernate是可以根据映射自动建表
      • 建表是没有设定长度,就使用默认的长度
    • type:类型;可以不用写,会自动帮你装换
    • not-null:不允许为空
    • unique:唯一的

核心配置

必须配置

  1. 连接数据库的基本的property参数
  • 驱动类
  • url路径
  • 用户名
  • 密码
  1. 方言

可选配置

  • 显示SQL
    hibernate.show_sql

  • 格式化SQL
    hibernate.format_sql

  • 自动建表
    hibernate.hbm2ddl.auto
    属性:
    • none
      不使用hibernate的自动建表
    • create
      如果数据库中已经有表,删除原有表,重新创建,如果没有表,新建表
    • create-drop
      如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。
      最后数据库中一个表没有,为了做测试用
      把sessionFactory也close掉时才有效果
    • update
      如果数据库中有表,使用原有表,如果没有表,创建新表
      更新表结构,如果column没有时会创建新的一列
    • validate
      如果没有表,不会创建表。只会使用数据库中原有的表
      校验映射和表结构是否一致,不一致就会报错
上一篇:创建触发器


下一篇:SQLite Expert 删除表数据并重置自动增长列