Hibernate 的环境搭建
一、环境搭建
1.开发平台介绍
<1>此处使用的开发工具是Myeclipse2014,其他支持Java EE 的开发平台也可。
<2>数据库:MySQL
<3>navicat ,是MySQL 的可视化软件。
说明:
其他支持数据库的可视化软件也可。数据库也不局限与MySQL。
2.搭建步骤介绍
Hibernate 环境搭建一般可通过三步骤实现:
<1>导入开发jar 包
<2>创建Hibernate 的配置文件hibernate.cfg.xml
<3>创建对应数据库中标的model 类及相应的文件*.hbm.xml 文件
配置文件*.hbm.xml 的通配符指代类名,一般配置文件通配符的位置和对应的类名一致。
例如:
Student.java 的配置文件为Student.hbm.xml
二、实现Hibernate 环境搭建
以下相关包、类及文件命名自定义
1.创建Java Project 工程,命名为HibernateProject
图2-1-1.HibernateProject 工程图
2.导入相关jar 包
<1>选中工程HibernateProject 鼠标右键新建文件夹,依次选择菜单命令New --> Folder 新建文件夹命名为lib 将MySQL 驱动jar 包mysql-connector-java-5.1.7-bin.jar复制到该文件夹下;
<2>选中该驱动包鼠标右键,依次选择菜单命令 Build Path --> Add to Build Path 将jar 导入此Java Project 工程。
说明:
导入相关包,因为我们要完成hibernate 环境的搭建,不需要更多的功能。此处只需导入MySQL 的数据库驱动jar 包,并build path即可。更多开发功能需要导入对应的开发工具包。
3.创建配置文件hibernate.cfg.xml
选中工程HibernateProject 鼠标右键,依次选择菜单命令MyEclipse --> Project Facets [Capabilities] --> Install Hibernate Facet。
选择Install Hibernate Facet 菜单命令后,会自定义创建Hibernate 配置文件。图示如下:
图2-3-1.配置Hibernate 版本图
图2-3-2.创建hibernate.cfg.xml 文件图
图2-3-3.配置jdbc图
说明:创建hibernate.cfg.xml 配置文件,
URL:配置连接的数据库,此处数据库为mysql2
此处配置的是MySQL ,所以驱动为com.jdbc.mysql.Driver
username:数据库账户名,一般为root(如果你没有修改的话)
password:数据库账户密码(安装数据库时自己设置的密码,这个应该只有自己知道)
Dialect:此处选择MySQL
图2-3-4.选择Hibernate 包图
这个过程结束后,会在java project 项目的src 下存在新建的Hibernate 配置文件hibernate.cfg.xml
图2-3-5.hibernate.cfg.xml 文件图
4.创建model 类并创建对应的*.hbm.xml 文件
<1>在src 下创建包cn.edu.hpu.model,在该包下新建类Student
私有属性id,name,gender,并添加setter() 与getter() 方法,
创建无参构造方法、有参构造方法及重写toString() 方法。
说明:
Hibernate 在创建对应model 类的*.hbm.xml 文件后,还需要在hibernate.cfg.xml 中配置映射*.hbm.xml 之后可根据配置生成表策略及设计表(*.hbm.xml 文件即设计表结构)来创建对应的数据表。
代码如下:
package cn.edu.hpu.model;
public class Student {
private Integer id;
private String name;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", gender=" + gender
+ "]";
}
public Student(Integer id, String name, String gender) {
super();
this.id = id;
this.name = name;
this.gender = gender;
}
public Student() {
// TODO Auto-generated constructor stub
}
}
<2>创建该model 类对应的*.hbm.xml 文件
默认该新建的配置文件名为Student.hbm.xml
代码如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.edu.hpu.model">
<class name="Student" table="STUDENT" dynamic-insert="true">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" /><!-- 指定主键的生成方式, native: 使用数据库本地方式 -->
</id>
<property name="name" type="java.lang.String" not-null="true">
<column name="NAME"></column>
</property>
<property name="gender" type="java.lang.String">
<column name="GENDER" />
</property>
</class>
</hibernate-mapping>
<3>节点说明
Student.hbm.xml 文件配置了model 的相关属性,指定了该Java 类对应的表名,列名、类型及主键。
(1)package 属性值是当前类Student.java 所在包的包名
(2)class节点
-- name 属性值为对应的类的类名
-- table 属性值为数据表的表名
说明:
如果package 属性未设置,此处class 的属性值应为类的全类名:name="cn.edu.hpu.model.Student"
(3)id 节点
一般id 节点为主键,通过子节点generator 设置主键的生成方式。
column 节点设置列名,name 属性值为列名
(4)property
普通属性节点。
-- name 属性值一般为对应model 类中的属性;
-- type 对应属性的数据类型;
-- not-null 指定数据表中此字段不为空;
-- column 指定数据表中对应该属性的列名。
<4>配置hibernate.cfg.xml
model 类及对应的*.hbm.xml 文件都已处理好。此时在hibernate.cfg.xml 配置映射*.hbm.xml 文件,让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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="hbm2ddl.auto">update</property><!-- 设置生成表策略 -->
<!-- 设置本地数据库方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/mysql2
</property>
<property name="connection.username">root</property>
<property name="connection.password">739150</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="format_sql">true</property><!-- 格式化良好的sql 语句 -->
<property name="show_sql">true</property><!-- 在控制台显示hql 语句 -->
<!-- 配置映射*.hbm.xml -->
<mapping resource="cn/edu/hpu/model/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
配置完成后此时其视图如下:
图2-4-4.hibernate.cfg.xml 配置文件图
三、环境测试
以上配置数据及相关参数不出错的情况下,这样hibernate 基本的配置就完成了。项目结构图如下:
图3-1-1.项目结构图
1.测试环境搭建是否成功
在src 下新建包cn.edu.hpu.test 新建测试类HbmTest (此测试类需要导入Junit 4 包支持)
代码如下:
package cn.edu.hpu.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;
import cn.edu.hpu.model.Student;
public class HbmTest {
@Test
public void test(){}
/**
* 测试hibernate 本地数据库连接
* 方法功能:
* 通过生成表策略创建或更新表,实例化一个student 对象。
* 并插入一条对应该student 对象的记录到数据表中。
*/
@Test
public void testSave(){
SessionFactory sessionFactory = null;
//创建一个Configuration对象:对应hbm的基本配置信息和关系映射信息
Configuration configuration = new Configuration().configure();
//创建ServiceRegistry对象,用于注册hbm的配置信息
ServiceRegistry serviceRegistry =
new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();//1.创建Session 对象
Transaction trans = session.beginTransaction();//2.创建Transaction 对象
Student student = new Student(1,"zhangsan","male");//3.实例化一个对象
session.save(student);
trans.commit();//4.提交事务
session.close();
sessionFactory.close();//5.关闭Session 和SessionFactory
}
}
测试testSave() 方法,运行成功无异常抛出。
2.测试过程描述
<1>测试类HbmTest 中testSave 方法测试了,hibernate 环境下相关对象的创建与使用;
<2>创建Session 对象,通过beginTransaction() 方法开始事务。
<3>实例化一个对应Student 对象,
<4>调用session 对象的save() 方法,然后提交事务commit()
<5>Hibernate 会根据配置文件hibernate.cfg.xml 中设置的生成表策略,数据库方言及jdbc 连接等配置。
<6>根据Student.hbm.xml 设计表STUDENT,在数据库mysql2 下创建表STUDENT;
<7>执行提交事务后方法save() 的直接结果就是在创建的表中存入了一条记录1,zhangsan,male
<8>最后关闭session 及SessionFactory。
3.测试结果
打开MySQL 的可视化软件,刷新数据库mysql2,发现该数据库下有新建表student ,查看其表设计,如下图:和*.hbm.xml 文件中配置一致。
图3-3-1.表STUDENT的表设计图
图3-3-2.表STUDENT 中的记录图
4.说明:
表STUDENT 是由Hibernate 环境支持创建,配置文件hibernate.cfg.xml 中配置的创建表策略为update
update:当数据库存在此表时则更新表student;此表时不存在则创建表student。
create:当前表不存在则创建表;若当前表若存在则先删除表,而后再创建。
<2>表结构设计
表结构的设计就是*.hbm.xml 文件中的配置,可自定义修改相关属性及属性值。所以说model 类一般也对应了数据表。
<3>lib 文件下的jar 包
此处是MySQL 的驱动包,用来连接MySQL,不同的数据库驱动包不一致。若不是MySQL 数据库且需修改hibernate.cfg.xml 文件中的数据库驱动Driver 等数据库相关参数。
<4>Hibernate 环境下的项目
关键是配置文件hibernate.cfg.xml,Hibernate 的重要配置需在此文件中设置。且相关*.hbm.xml 需要在此文件中配置映射。
项目需导入Hibernate 相关开发工具jar 包,此处在创建hibernate.cfg.xml 时已导入相关工具包。如图3-1-1中的Hibernate 4.1.4 Libraries