Hibernate是java领域的一款开源的ORM框架技术
Hibernate对JDBC进行了非常轻量级的对象封装
准备前的工作
导入Hibernate必须的jar包 hibernate-core.zip
导入MySQL的JDBC驱动 mysql-connector-java-5.1.7-bin.jar
导入Junit4的jar包 Junit-4.10.jar
我们可以把上面的jar包 添加自定义用户类库,方便每次导入jar包。添加后最好就不要移动这些jar包的位置了哦 不然你就要重新修改用户类库了
基本步骤
- 在MyEclipse Datebase Explorer 创建数据库连接
- 创建hibernate的配置文件
- 根据数据库表自动生成持久化类和对象关系映射文件
- 使用junit通过Hibernate API编写访问数据库的代码
在MyEclipse Datebase Explorer 创建数据库连接
点击myeclipse的右上角图标open Perspective 选择MyEclipse Database Explorer
在DB Browser界面鼠标右键new 新建数据库驱动
我用的是mysql数据库,使用其它数据库请相应修改,把数据库帐号密码 驱动添加后点击finsh即可。
创建hibernate的配置文件
点击你创建的java项目 右键 MyEclipse->Add Hibernate Capabilities
导入自定义类库的三个jar包 next
这里就是生成的hibernate配置文件位置和名称 点击next
选择我们刚刚在MyEclipse Database Explorer新建的数据库 点击next
create SessionFactory class是否创建SessionFactory类我取消勾选了 因为我在下面自己实例化了
点击finish即成功创建了hibernate的配置文件hibernate.cfg.xml
<?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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/susu</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="myeclipse.connection.profile">MySQLDriver</property>
</session-factory>
</hibernate-configuration>
根据数据库表自动生成持久化类和对象关系映射文件
点击myeclipse的右上角图标open Perspective 选择MyEclipse Database Explorer
在DB Browser界面打开我们创键的数据库连接
选中我们需要生成持久化类的表,右键选择Hibernate Reverse Engineering
java src folder 持久化类生成的项目位置
java package 持久化类的包名
点击next
id generator 选择native 点击finish
在你选择的项目里即成功生成了持久化类和对象关系映射文件
持久化类
package com.susu.entity;
import java.util.Date;
/**
* Students entity. @author MyEclipse Persistence Tools
*/
public class Students implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private String gender;
private Date date;
private String address;
// Constructors
/** default constructor */
public Students() {
}
/** full constructor */
public Students(String name, String gender, Date date, String address) {
this.name = name;
this.gender = gender;
this.date = date;
this.address = address;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getDate() {
return this.date;
}
public void setDate(Date date) {
this.date = date;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
}
对象关系映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.susu.entity.Students" table="students" catalog="susu">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
<property name="gender" type="java.lang.String">
<column name="gender" length="2" />
</property>
<property name="date" type="java.util.Date">
<column name="date" length="0" />
</property>
<property name="address" type="java.lang.String">
<column name="address" length="30" />
</property>
</class>
</hibernate-mapping>
这个时候会在hibernate.cfg.xml 新增一个映射 指向刚刚生成的关系映射文件
<mapping resource="com/susu/entity/Students.hbm.xml" />
通常我们还会加上
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
在控制台输出sql 语句并对Sql语句进行排版
具体作用请看这篇文章点击打开链接
使用junit通过Hibernate API编写访问数据库的代码
import java.util.Date;
import java.util.Properties;
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.After;
import org.junit.Before;
import org.junit.Test;
import com.susu.entity.Students;
public class StudentsTest {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init() {
// 创建配置对象
Configuration config = new Configuration().configure();
// 创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(config.getProperties()).buildServiceRegistry();
// 创建会话工厂对象
sessionFactory = config.buildSessionFactory(serviceRegistry);
// 会话对象
session = sessionFactory.openSession();
// 开启事务
transaction = session.beginTransaction();
}
@Test
public void testSaveStudents() {
Students stu=new Students("张三", "男", new Date(), "河南省信阳市");
session.save(stu);
}
@After
public void destroy() {
transaction.commit();// 提交事务
session.close();
sessionFactory.close();
}
}
运行结果:
打开mysql数据库会发现我们成功在Students表中插入了一条数据。