您的位置:首页 > 其它

Hibernate学习笔记(一)——简单的Hibernate实例入门

2018-03-28 09:57 639 查看

一、Hibernate简介

Hibernate是一个开源的对象/关系映射(ORM)框架,它对JDBC进行了轻量级的封装。所谓ORM就是Object/Relationship Mapping,为什么要使用对象/关系映射呢?因为使用面向对象思想编写的数据库应用程序都是要把信息存储到关系型数据库中的,使用Hibernate就可以使用面向对象的方法来操作和使用数据库了。

二、Hibernate简单实例

下面通过一个简单的例子来介绍一下使用Hibernate的基本步骤,本实例使用了MySQL数据库,并使用JUnit来进行测试。首先要引入使用的jar包,在本例中需要引入Hibernate使用的相关jar包、MySQL数据库连接jar包和JUnit测试jar包,在pom文件中添加以下依赖。[html] view plain copy <dependencies>  
    <dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-core</artifactId>  
    <version>5.2.0.Final</version>  
</dependency>  
<dependency>  
    <groupId>mysql</groupId>  
    <artifactId>mysql-connector-java</artifactId>  
    <version>5.1.38</version>  
</dependency>  
   <dependency>  
     <groupId>junit</groupId>  
     <artifactId>junit</artifactId>  
     <versi
20000
on>4.10</version>  
     <scope>test</scope>  
   </dependency>  
 </dependencies>  
引入了相关jar包之后就可以进行编码了。编写一个Hibernate例子分为以下几个步骤:(1)创建Hibernate的配置文件(hibernate.cfg.xml);(2)创建持久化类;(3)创建对象/关系映射文件;(4)通过Hibernate的API来编写操作数据库的代码。下面将通过代码依次来讲解每一个步骤。

1、创建Hibernate的配置文件(hibernate.cfg.xml)

首先我们需要创建Hibernate的配置文件hibernate.cfg.xml,配置文件的内容如下:[html] view plain copy<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
<hibernate-configuration>  
    <session-factory>  
        <!-- 对应的数据库驱动 -->  
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
        <!-- 数据库密码 -->  
        <property name="hibernate.connection.password">root</property>  
        <!-- 数据库用户名 -->  
        <property name="hibernate.connection.username">root</property>  
        <!-- 数据库url,类似于JDBC中连接数据库的url -->  
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=UTF-8</property>  
        <!-- 数据库使用的方言 -->  
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
          
        <!-- 是否把输出到控制台的sql进行格式化 -->  
        <property name="format_sql">true</property>  
        <!-- 是否将Hibernate运行时的sql输出到控制台 -->  
        <property name="show_sql">true</property>  
        <!-- 自动创建|更新|验证数据库表结构 -->  
        <property name="hbm2ddl.auto">create</property>  
        
    </session-factory>  
</hibernate-configuration>  
通过观察配置文件的内容我们发现,这个配置文件其实主要是在配置数据库的一些基本信息,包括数据库驱动、用户名密码等。

2、创建持久化类

接下来我们就需要创建一个持久化类User,里面包含了一些基本的用户信息。[java] view plain copypackage com.imooc.vo;  
  
import java.util.Date;  
  
public class User {  
  
    private int id;  
      
    private String name;  
      
    private int age;  
      
    private String sex;  
      
    private Date birthday;  
      
    private String address;  
      
  
    public User() {  
    }  
  
    public User(int id, String name, int age, String sex, Date birthday, String address) {  
        this.id = id;  
        this.name = name;  
        this.age = age;  
        this.sex = sex;  
        this.birthday = birthday;  
        this.address = address;  
    }  
  
    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 int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public String getSex() {  
        return sex;  
    }  
  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
  
    public Date getBirthday() {  
        return birthday;  
    }  
  
    public void setBirthday(Date birthday) {  
        this.birthday = birthday;  
    }  
  
    public String getAddress() {  
        return address;  
    }  
  
    public void setAddress(String address) {  
        this.address = address;  
    }  
  
  
    @Override  
    public String toString() {  
        return "Student [id=" + id + ", name=" + name + ", age=" + age  
                + ", sex=" + sex + ", birthday=" + birthday + ", address="  
                + address + "]";  
    }  
      
}  
我们发现所谓的持久化类其实就是一个基本的JavaBean,里面包含了一些属性和相应的get和set方法。

3、创建对象/关系映射文件

接下来我们就需要根据持久化类创建一个对象/关系映射文件User.hbm.xml。[html] view plain copy<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<!-- Generated 2016-9-19 19:59:35 by Hibernate Tools 3.4.0.CR1 -->  
<hibernate-mapping>  
    <class name="com.imooc.vo.User" table="USER">  
        <id name="id" type="int">  
            <column name="ID" />  
            <generator class="assigned" />  
        </id>  
        <property name="name" type="java.lang.String">  
            <column name="NAME" />  
        </property>  
        <property name="age" type="int">  
            <column name="AGE" />  
        </property>  
        <property name="sex" type="java.lang.String">  
            <column name="SEX" />  
        </property>  
        <property name="birthday" type="java.util.Date">  
            <column name="BIRTHDAY" />  
        </property>  
        <property name="address" type="java.lang.String">  
            <column name="ADDRESS" />  
        </property>  
    </class>  
</hibernate-mapping>  
这个对象/关系映射文件其实就是将定义的持久化类与数据库表进行映射,这里将User类映射为一个名为USER的表,将对象的属性映射为数据库的列,将属性的类型映射为数据库列的类型。在创建了这个对象/关系映射文件之后,我们需要在Hibernate配置文件hibernate.cfg.xml中声明这个映射关系,在session-factory标签下声明如下内容。[html] view plain copy<mapping resource="com/imooc/map/User.hbm.xml"/>  

4、通过Hibernate的API来编写操作数据库的代码

在上面一系列的配置完成之后我们就可以使用JUnit来编写一个测试类UserTest来使用Hibernate了。[java] view plain copypackage com.imooc.test;  
  
import java.util.Date;  
  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.Configuration;  
import org.junit.After;  
import org.junit.Before;  
import org.junit.Test;  
  
import com.imooc.vo.User;  
  
public class UserTest {  
      
    private SessionFactory sessionFactory;  
    private Session session;  
    private Transaction transaction;  
  
    @Before  
    public void init() {  
        //创建配置对象  
        Configuration config = new Configuration().configure();   
        //创建会话工厂对象  
        sessionFactory = config.buildSessionFactory();  
        //创建会话对象  
        session = sessionFactory.openSession();  
        //开启事务  
        transaction = session.beginTransaction();  
    }  
      
    @After  
    public void destory() {  
        //提交事务  
        transaction.commit();  
        //关闭会话  
        session.close();  
        //关闭会话工厂  
        sessionFactory.close();       
    }  
      
      
    @Test  
    public void saveNewUser() throws Exception{  
        User s = new User(1, "张三", 12, "男", new Date(), "上海市");  
        session.save(s);  
    }  
      
}  
我们来分析一下代码,在执行数据库操作方法之前需要执行一个初始化方法init(),这个初始化方法主要是对Hibernate进行初始化操作,包括读取配置文件,创建会话工厂和会话、开启事务等。然后执行测试方法,测试方法很简单,只是新建了一个对象,然后将对象保存进数据库,我们可以发现这里将对象保存进数据库没有写复杂的SQL语句,而是直接使用了一个save方法就完成了插入操作,这也体现了Hibernate的优势,不用在代码中编写复杂的SQL语句,代码的可移植性和复用性大大增强了。最后当测试方法执行结束之后执行一个销毁方法destory(),这个方法主要用于提交事务和关闭资源。下面使用JUnit执行saveNewUser()方法,执行完成后,我们去数据库中会发现新生成了一张表USER,查询表中的内容,我们会发现刚刚定义的名为张三的用户已经插入成功了,这说明使用Hibernate操作数据库成功了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: