Hibernate和MyBatis的简单入门

Hibernate

Hibernate是开发者社区比较流行的持久化框架
它不仅提供了基本的对象关系映射,还提供了作为ORM工具所应有的复杂功能
比如:缓存、延迟加载、预先抓取和分布式缓存

使用Hibernate的主要接口是org.hibernate.Session
Session接口提供了基本的数据访问功能
如保存、更新、删除以及从数据库中加载对象的功能

获取Hibernaate Session对象的标准方式是借助于Hibernate的Session Factory接口的实现类
除了一些其它的任务,SessionFactory主要负责Hibernate Session的打开、关闭以及管理

OK,那么我们开始创建一个最简单的例子来学习Hibernate
环境:IDEA 2019 3.3、Maven、Mysql

1.工程建立

借助IDEA先创建一个maven的quick start工程
Hibernate和MyBatis的简单入门

然后最终的得到的完整的项目结构为:
Hibernate和MyBatis的简单入门

** *.xml文件直接通过new->file的方式建立 **

2.导入依赖

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.4.9.Final</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.19</version>
    </dependency>

3.持久化类的建立

所谓的持久化类,即是需要将该类的对象存储到数据库中

package org.example;

public class User {
    private String id;
    private String username;
    private int password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }
}

4.hibernate.cfg.xml

hibernate.cfg.xml配置文件是Hibernate的全局配置文件
它主要包含了与数据库连接的基本信息
hibernate.cfg.xml的配置内容如下:

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!--数据库连接的基本信息-->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?serverTimezone=UTC</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="connection.characterEncoding">utf8</property>
        <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器-->   
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--是否在后台显示Hibernate用到的SQL语句-->
        <property name="show_sql">true</property>
        <!--将SQL脚本进行格式化后再输出-->
        <property name="format_sql">true</property>

        <!--指定自动生成数据表的策略 -->
        <property name="hbm2ddl.auto">update</property>
        <!--
           create: 先删表,再建表。
           create-drop: 启动时建表,退出前删表。
           update: 如果表结构不一致,就创建或更新。
           validate: 启动时验证表结构,如果不致就抛异常。
        -->

        <!--映射文件,可指定多个-->
        <mapping resource="mapping/User.hbm.xml"/> 
        <!--一个持久化的类对应一个映射文件-->
    </session-factory>
</hibernate-configuration>

5. User.hbm.xml

*.hbm.xml配置文件包含了Hibernate的基本映射信息
即每一个需要持久化的类与其对应的数据库表之间的关联信息
在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xml的mapping节点
加载到Configuration和SessionFactory实例

<?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="org.example.User" table="user" schema="hibernate">
        <id name="id" column="id"/>
        <property name="username" column="username"/>
        <property name="password" column="password"/>
    </class>
</hibernate-mapping>

6.数据库表的生成

在Hibernate中,不需要自己手动在数据库中生成持久化的表
因为在hibernate.cfg.xml配置文件中,我们设置了
<property name="hbm2ddl.auto">update</property>
而update意味着:如果表结构不一致,就创建或更新
所以,我们可以不创建数据库表,等着Hibernate给我们创建

7.测试

// 加载Hibernate默认配置文件
Configuration configuration = new Configuration().configure();
// 用Configuration创建SessionFactory
SessionFactory factory = configuration.buildSessionFactory();
// 创建Session
Session session = factory.openSession();
// 开启事务
Transaction transaction = session.beginTransaction();
// 实例化持久化类
User user = new User();
user.setId("3");
user.setUsername("you");
user.setPassword(123456);
session.persist(user);
//session.delete(user);
//session.update(user);
// 提交事务
transaction.commit();
// 关闭Session,释放资源
session.close();
factory.close();

Mybatis

Hibernate和Mybatis的区别

相关推荐