学习了两天的Hibernate3,感觉迷迷糊糊的,这个东西不太好理解,所以还是通过写下学习总结来在次理解吧!我是看动力节点王老师的视频学习的,感觉老师讲解的很基础,很详细。呵呵!
首先学习什么东西我都是这样想的:(1)这东西是什么 (2)这东西能做什么 (3)研究这东西的核心。
Hibernate是什么呢?
Hibernate又称为开源O/R映射框架。我们以前就学习过JDBC,我们使用JDBC来对数据层实现通信,但是您是否注意到了使用JDBC来操作数据库的步骤有些繁琐吗?是的,so,我们聪明的Gavin King大师就开发出了这框当前业界流行的开源框架。应用百度百科上对这个框架的描述如下:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
几个基本的概念:
(1)什么是关系模型(Relational Model)?
把世界看作实体(Entity)和联系(Relationship)构成。
所谓的实体就是现实世界中具有区分与其他事物的特征或属性并与其他实体有联系的对象。在关系模型中实体通常使用表的形式来表现。表的每一行描述实体的一个实例,表的每一列描述实体的特征或属性。
所谓联系就是实体之间的关系。即实体之间的对应关系。如:1:1 1:n m:n
(2)什么是面向对象(这个,相信大家伙都知道)
(3)对象关系映射(Object Relational Mapping,简称ORM)
在学习Hibernate这个概念非常重要。
ORM是一种为了解决面向对象与关系数据库之间存在互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转化成另一种形式。那为什么要学习ORM呢,毕竟我们在学习java的时候是用面向对象的思想去分析问题的,而且面向对象的开发方法是当今企业级开发环境中的主流开发方法。关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。
Hibernate能做什么?
Hibernate 能帮助我们利用面向对象的思想,开发基于关系型数据库的应用程序。
第一:将对象数据保存到数据库中。
第二:将数据库数据读入对象中。
图示:
说了那么多,我们应该动手搭建开发环境,写我们的第一个程序了。
OK,开发所需要的资料。
很多jar包,其中很重要的一个就是:,这些在网上都可以找到。
我是在MyEclipse中自定义了一个Lib,将所有的有关Hibernate的jar包整合成了一个Hibernate包,这样利于引用。另外还需要MySQL的jar包。
开发步骤:
(1)首先在MySQL中建立了一个数据库myhibernate
(2)在MyEclipse中创建一个项目,在这里创建java项目或Web项目都可以,没有限制。
(3)创建Hibernate配置文件: Hibernate.cfg.xml,注意应该将这个配置文件放在src目录下,如图:
那么这个配置文件有什么作用呢?我先贴出代码。
<!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.url">jdbc:mysql://localhost:3306/myhibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">mysqladmin</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/ynsf/ta/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
在这个配置文件中你发现我们以前在写JDBC 时用到的一些东东,没错,Hibernate就是通过这个配置文件与关系型数据库取得通信的。另外你还要写一个.xml文件,也就是.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>
<class name="com.ynsf.ta.hibernate.User">
<id name="id">
<generator class="uuid"></generator>
</id>
<property name="name"></property>
<property name="password"></property>
<property name="createTime"></property>
<property name="expireTime"></property>
</class>
</hibernate-mapping>
持久化类:
public class User {
private String id;
private String name;
private String password;
private Date createTime;
private Date expireTime;//失效时间
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
}
可以看的出.hbm.xml文件中有东西是和持久化类中的属性相对应的,呵呵,废话不多说了。
导出表的工具类:
public class ExportDB {
public static void main(String[] args) {
//默认读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
}
}
在这个类中,通过读取hibernate.cfg.xml文件就可以导出一张表,也就是表名为user的表,其中的原理,我也不知道,还有待进一步的学习。
这时候我们就可以利用面向对象的思想来实现对关系数据库的操作了。
在这里写一个main方法来小试一下!
/**
*
*/
package com.ynsf.ta.hibernate;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @projectName Hibernate
* @packageName com.ynsf.ta.hibernate
* @className Client
* @time Nov 17, 2013 10:15:17 PM
* @describe
* @author huangyuze
* @version 1.0
*/
public class Client {
public static void main(String[] args) {
//默认读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
//建立SessionFactory
SessionFactory factory = cfg.buildSessionFactory();
//取得Session
Session session = null;
try {
session = factory.openSession();
session.beginTransaction();//开启事务
User user = new User();
user.setName("lee");
user.setPassword("123456");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
/* user.setName("张三");
user.setPassword("123456");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
*/
session.save(user);//保存对象
session.getTransaction().commit();//提交事务
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.getTransaction().rollback();//回滚事务
}finally{
if(session != null){
if(session.isOpen()){
//关闭Session
session.close();
}
}
}
}
}
利用上面的代码,我们就可以实现往数据库添加数据了。
在这里只是简单的做了下学习笔记,其中还有许多问题值得思考,还需不断的学习!