J2EE系列之Hibernate4学习笔记(一)--Hibernate简介

本文是J2EE系列中关于Hibernate4的学习笔记,介绍了如何下载Hibernate4,配置相关jar包,创建Hibernate配置文件,建立对象关系映射,并通过HelloWorld示例展示其基本操作。通过这些步骤,读者可以了解Hibernate4的初步使用。

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

现在开始学习Hibernate4的相关知识。

一、登录到hibernate4官网:http://hibernate.org/


hibernate有很多产品,这里主要使用ORM,点击More:


可以看到当前最新版本是5.2.10,点击下载hibernate4的jar包。

我这里使用的是4.3.5;

二.下载hibernate包解压缩:


这里documentation中是一些说明文档,lib中是jar包,我们工程中用到的是lib/required文件夹下面的jar包:



看一下百度百科对hibernate的介绍:



这里要清楚的是hibernate4是ORM框架,使用的数据库是关系型数据库。


二、Hibernate4之HelloWorld实现

1.新建一个Java Project:Hibernate01;

2.添加驱动包:

2.1项目根目录下新建hibernate4目录,把required文件夹里面的jar包复制到该文件夹:


2.2把这些包添加到Add to Build Path:


2.3工程根目录下新建mysql目录,把mysql的驱动jar包复制进去,并把这个jar包Add to Build Path;

3.添加hibernate配置文件:由于hibernate要连接数据库,所以必须有个文件来配置要连接的数据库的名字以及密码等信息。这个文件就是hibernate的配置文件。


这个配置文件如下:

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

        <!--数据库连接设置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>

       
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>

        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        
  

    </session-factory>

</hibernate-configuration>

这个配置文件的名字是默认固定的,建议就使用这个名字。如果修改的话,还需要指定配置文件。

数据库连接设置中依次配置的是:连接mysql数据库的驱动、要连接的数据库、登录mysql的用户名、登录mysql的密码;


方言配置:这里要根据连接的数据库进行配置,如果使用的是mysql就使用mysql的方言,如果使用的是oracle就使用oracle方言。设置了方言后,hibernate底层就会根据相应的数据库规则来工作。比如说这里配置了mysql的方言,hibernate底层就会使用mysql数据库的规则来操作数据库。


控制台显示sql:这里设为TRUE的话,hibernate对数据库的操作都会在控制台打印出来。


自动更新表结构:当数据表发生变化的时候对数据库中的表格自动更新。


4.既然hibernate是对象关系框架,这里首先建一个类Student:

package com.test.model;

public class Student {
	
	private long id;
	private String name;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

5.写这个类的映射文件:Student.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.test.model">

	<class name="Student" table="t_student">
		<id name="id" column="stuId">
			<generator class="native"></generator>
		</id>
		
		<property name="name"></property>
	</class>

</hibernate-mapping>

这里<hibernate-mapping package="com.test.model">标签标示将model这个包下面的类映射到数据库中,每个类映射成数据库中的一个表。

<class>标签对包下的各个类进行映射配置。这里<class name="Student" table="t_student">表示将Student这个类映射成表t_student。

<id>表示对主键进行配置。这里<id name="id" column="stuId"><generator class="native"></generator></id>表示把Student类中的id属性作为主键,对应到表格中的列名为stuId,<generator class="native"></generator>表示主键的定义方式为本地方式,也就是自增方式。


<property>标签对普通属性进行配置。这里<property name="name"></property>表示将Student类中的name属性映射成表中的name列,这里没有指定映射后的列名,默认为与属性同名。


6.将映射文件添加到配置文件中:

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

        <!--数据库连接设置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>

       
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>

        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        
        <mapping resource="com/test/model/Student.hbm.xml"/>
        
  

    </session-factory>

</hibernate-configuration>

使用<mapping resource="com/test/model/Student.hbm.xml"/>将映射文件添加到配置文件中。


当hibernate读取配置文件的时候会发现这个映射文件,如果数据库中还没有t_student这个表,由于已经设置了自动更新表结构,hibernate就会根据映射文件自动生成这个表。


7.写一个测试类:StudentTest

package com.test.service;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import com.test.model.Student;

public class StudentTest {

	public static void main(String[] args) {
		
		Configuration configuration=new Configuration().configure(); // 实例化配置文件
		ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
	    SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
	    Session session=sessionFactory.openSession(); // 生成一个session
	    session.beginTransaction(); // 开启事务
	    
	    
	    session.getTransaction().commit(); // 提交事务
	    session.close(); // 关闭session
	    sessionFactory.close(); // 关闭session工厂
	}
}


上面的代码是固定的,用来启动hibernate和关闭hibernate。

运行上述程序,查看mysql数据库:


发现hibernate数据库中多了t_student这个表。查看一下表结构如下:



现在往表中添加数据,修改StudentTest代码如下:

package com.test.service;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import com.test.model.Student;

public class StudentTest {

	public static void main(String[] args) {
		
		Configuration configuration=new Configuration().configure(); // 实例化配置文件
		ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
	    SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
	    Session session=sessionFactory.openSession(); // 生成一个session
	    session.beginTransaction(); // 开启事务
	    
	    Student s=new Student();
	    s.setName("张三");
	    session.save(s);
	    
	    session.getTransaction().commit(); // 提交事务
	    session.close(); // 关闭session
	    sessionFactory.close(); // 关闭session工厂
	}
}

这里新建了一个Student对象,把这个对象保存到session中。重新运行程序:


发现表中添加了数据。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值