Hibernate入门详解(一)

在使用Hibernate的时候使得访问数据库变得非常的容易,因为之前使用JDBC的时候做数据库相关功能开发会有许多重复性的工作,但是Hibernate将会使其变得非常容易简单,代码也比较简洁。

比如我们先创建一个实体类Product,用来映射数据库中的表product_

package com.vipcpi;

public class Product {
    int id;
    String name;
    float price;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }


}

接下来就到我们的重点了,就是配置文件Product.hbm.xml,用来映射Product类对应的数据库中的product_表
注意!!!这里的文件名Product.hbm.xml中的P一定要大写,要和Product实体类的类名保持一致。

<?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">
 <!--这里的package对应的就是实体类Product所在的包-->
<hibernate-mapping package="com.vipcpi">
<!--下面这一句表示类Product对应数据库表product_-->
    <class name="Product" table="product_">
   <!--实体类属性id,映射表中的字段id-->
        <id name="id" column="id">
        <!--下面这标识数据库的自增长方式采用的是数据库的本地方式,如果连接的是oracle数据库,则指定sequence作为id的增长方式-->
            <generator class="native">
            </generator>
        </id>
        <!--这里的配置只是写了name属性,并没有通过column指定字段,那么说明字段的名字也是name-->
        <property name="name" />
        <property name="price" />
    </class>

</hibernate-mapping>

接下来就是配置文件 hibernate.cfg.xml,在src目录下创建此文件,此xml中存放的是数据库的连接信息。

<?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-configuration>

    <session-factory>
        <!-- Database connection settings,依次为:
数据库驱动名称,数据库连接地址,数据库编码格式,数据库用户名,数据库密码
 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
        <property name="connection.characterEncoding">utf-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <!-- SQL dialect
数据库SQL语言类型,设置使用线程,设置是否显示SQL语句,最后一个就是Hibernate的映射文件
 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <mapping resource="com/vipcpi/Product.hbm.xml" />
    </session-factory>

</hibernate-configuration>

接下来说漏掉的那个<property name="hbm2ddl.auto">update</property>的作用:
这个属性标签中有四个参数可以写,这四个参数是对数据库中插入的进行不同的操作,分别为:
(1)create-drop
(2)create
(3)update
(4)validate

下面分别来介绍他们的作用以及对数据库中的影响

(1)<property name="hibernate.hbm2ddl.auto"> create-drop </property>
create-drop:表示在hebarinate初始化时创建表格,程序运行结束的时候会删除相应的表格,在实际项目中不用。

(2)<property name="hibernate.hbm2ddl.auto">create</property>
在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格。

(3)<property name="hibernate.hbm2ddl.auto">update</property>
只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构

(4)<property name="hibernate.hbm2ddl.auto">validate</property>
校验映射文件和数据库中的表是不是能对应起来,不能对应报错,实际中常用

注意:在使用的时候必须要慎重,我就是在当时学习的时候所设置的属性是validate,所以只要改了数据库名就会抛初始化异常,当时我郁闷了半天都不知道是怎么回事,没有往这方面想,后来才知到validate是在没有数据库名的时候不让你创建,会抛异常的。

测试插入收据,Hibernate的基本步骤是:

  1. 获取SessionFctory
  2. 通过SessionFctory获取一个session
  3. 在session基础上开启一个事务【查看事务详解】
  4. 通过调用session的save方法将对象保存到数据库
  5. 提交事务
  6. 关闭session
  7. 关闭sessionfactory
    示例代码
package com.vipcpi.yang;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.vipcpi.Product;

public class TestHibernate {
    public static void main(String[] args) {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();

        Product p=new Product();
        p.setId(2);
        p.setName("CSDN");
        p.setPrice(240);
        s.save(p);

        s.getTransaction().commit();
        s.close();
        sf.close();
    }
}

经过上面实例估计都差不多明白了Hibernate的操作步骤,接下来结合原理估计就更清楚他的机制了。

应用程序通过Hibernate将一个Product对象插入到product_表中,其中Product.cfg.xml提供数据库连接的基本信息
Product.hbm.xml提供对象和表的映射关系
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人圭先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值