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

来源:互联网 发布:天正建筑2014 for mac 编辑:程序博客网 时间:2024/06/05 06:17

现在开始学习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中。重新运行程序:


发现表中添加了数据。





0 0