框架--hibernate框架之简单入门

本文介绍Hibernate框架,一个开放源代码的对象关系映射框架,用于简化数据库操作。文章详细讲解了Hibernate的特点,如线程和进程缓存、数据库差异屏蔽等,并提供了从配置到测试的完整入门案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是hibernate框架(开放源代码的对象关系映射框架)

  • 概念

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

    • 将对数据库的操作转换为对Java对象的操作,从而简化开发。通过修改一个“持久化”对象的属性从而修改数据库表中对应的记录数据。
    • 提供线程和进程两个级别的缓存提升应用程序性能。
    • 有丰富的映射方式将Java对象之间的关系转换为数据库表之间的关系。
    • 屏蔽不同数据库实现之间的差异。在Hibernate中只需要通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句。
    • 非侵入式:Hibernate不要求持久化类实现任何接口或继承任何类,POJO即可。
  • hibernate 体系概要图
    在这里插入图片描述

  • ORM(Object Relational Mapping)是对象到关系的映射,它的作用是在关系数据库和对象之间做一个自动映射,将数据库中数据表映射成为对象,也就是持久化类,对关系型数据以对象的形式进行操作,减少应用开发过程中数据持久化的编程任务。可以把ORM理解成关系型数据和对象的一个纽带,开发人员只需关注纽带的一端映射的对象即可。ORM原理如下图示。
    在这里插入图片描述

  • 核心API

    • Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通过这些接口,可以对持久化对象进行存取、事务控制。
    • Session
      Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
    • SessionFactory
      SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
    • Transaction
      Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。
    • Query
      Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
    • Criteria
      Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
    • Configuration
      Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。

简单案例入门

  • 步骤一
    我这里的表结构如下
    在这里插入图片描述

  • 步骤二,创建表对应的实体类

    	/*
     * 这是hibernate持久层框架的数据库表的一个映射实体类
     * 该类中的属性对应着表里的每个字段
     * 并生成它的get set方法,必须要有它的无参构造器
     *这个实体类映射数据库表中的user01
     * */
    public class User {
    
    private String name;
    private String password;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
        }
    }
    
    
  • 步骤三,核心配置文件,一般名字都为hibernate.cfg.xml 这个,,代码如下

    	<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    	<hibernate-configuration>
        <!--第一步,设置数据库连接属性-->
        <!--name="datasouce"配置这个属性的时候如果没有jndi这个包,如果没有这个包就会报
        Need to specify class name in environment or system property, or as an
         applet parameter, or in an application resource file:  java.naming.factory.initial
         这个错误信息-->
    <!--    <session-factory name="datasouce">-->
        <session-factory>
            <!-- 配置关于数据库连接的四个项:driverClass  url username password -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
           <property name="connection.username">root</property>
         <property name="connection.password">123456</property>
    
    <!--        第二步,设置数据库方言-->
         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <!--        设置是否显示sql语句-->
         <property name="show_sql">true</property>
    <!--        设置是否格式化sql语句-->
     	   <property name="hibernate.format_sql">true</property>
    <!--        第三步,加载你的表和类的关系映射配置文件-->
          <mapping resource="User.hbm.xml"></mapping>
        </session-factory>
    </hibernate-configuration>
    
  • 步骤四,配置映射文件,一般文件名为实体类名.hbm.xml,代码如下

    	<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!--把实体类的每个属性和表中的字段进行关联-->
    <hibernate-mapping package="com.wdhcr.po">
        <!--把实体类和数据库表进行映射-->
        <class name="User" table="user01">
    <!--        这里注意hibernate映射关系中必须要有id这个标签一般是映射表中的主键使用-->
            <!-- class下必须要有一个id的子元素 id是用于描述主键的 -->
            <id name="name" type="java.lang.String" column="name">
               <!-- 主键生成策略 -->
                <generator class="native"></generator>
            </id>
            <!--使用property来描述属性与字段的对应关系-->
          <property name="password" type="java.lang.String" column="password"></property>
      </class>
    </hibernate-mapping>
    
  • 步骤五,测试

    import com.wdhcr.po.User;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.query.Query;
    
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {
        Configuration configuration = new Configuration();
        //配置你的全局配置文件
        configuration.configure("hibernate.cfg.xml");
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        //添加用户
    //        User user = new User();
    //        user.setName("eee");
    //        user.setPassword("123456");
    //        //开启事务
    //        Transaction transaction = session.beginTransaction();
    //        session.save(user);
    //        //提交事务
    //        transaction.commit();
    //        //关闭资源
    //        session.close();
            //删除用户
            //获取session中的指定的数据并返回
    //        User qqq = session.get(User.class, "qqq");
    //        Transaction transaction = session.beginTransaction();
    //        session.delete(qqq);
    //        transaction.commit();
    //        session.close();
            //更新用户
    //        User user = new User();
    //        user.setName("www");
    //        user.setPassword("000000");
    //        Transaction transaction = session.beginTransaction();
    //        session.update(user);
    //        transaction.commit();
    //        session.close();
            //查询数据
           Query from_user01 = session.createQuery("from User");// HQL语句,它类似于SQL语句
           List<User> list = from_user01.list();
            for (User user : list) {
                System.out.println(user.getName()+"\t"+user.getPassword());
            }
        }
    }
    
    
  • 以上就是hibernate的简单入门程序啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值