深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架
这篇博客是hibernate学习的第一篇,主要简介hibernate框架,之后简单说一下hibernate的文件夹结构,最后写一个简单的hibernate实例。通过这三步来简单的认识一下hibernate。
废话不多说,步入正题。首先简介一下hibernate框架,它是一种基于JDBC的主流持久化框架,是一个优秀的orm实现;它对JDBC进行了轻量级的封装,大大简化了数据訪问层繁杂的反复代码;并且它利用了java反射机制来实现程序的透明性;它的本意是从对象出发而非关系数据库出发,这一点也就是说明它是以面向对象思维解决数据库的操作问题。
以上是从概念上说的hibernate,以下来看一下hibernate文件夹结构:

这就是解压出来的hibernate的文件夹文件,在这里面doc文件夹为文档,lib文件夹为所用的库文件,src为hibernate源码,hibernate3.jar为打包后的字节码文件。另外一些随后博客遇到再介绍。
这里要说的学习hibernate框架始终和3个比較关键的文件打交道,即hibernate本身的配置文件hibernate.cfg.xml文件,这个文件用来配置hibernate自身属性,数据库驱动、数据库连接和数据库方言;另外一个是对象关系映射配置文件,如UserInfo.hbm.xml。此文件负责实体对象到关系数据库映射。最后一个就是我们常见的持久化类了,也就是对象现实中的实体。
有了上面的基础,我们来一步一步的实现一个hibernate实例。
1. 在eclipse中配置hibernate环境:
我们首先建立一个项目,名叫hibernate_first,之后自己定义个存放jar包的库,就取名为UserLibrary;导入相关的包,这些包包含对应数据库驱动、hibernate文件夹下lib文件夹下的jar包,还有hibernate文件夹下的hibernate3.jar。
2. 导入hibernate.cfg.xml,并且配置数据库连接:
将hibernate文件夹下的hibernate.cfg.xml文件导入项目的src文件夹下,之后配置数据库连接信息,我们这个实例选取的是用Mysql作为数据库,所以我们就要在hibernate.cfg.xml下配置例如以下信息。
<!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/User</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> </session-factory>
</hibernate-configuration>
3. 建立实体类User.java
import java.util.Date;
public class User {
	private String id;
	private String name;
	private String password;
	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;
	}
}
4. 提供User.hbm.xml文件,完毕实体类的映射(编写对象关系映射文件,把对象关系映射的逻辑放在此处,这个文件包含表和字段的对象关系,当操作对象时,该文件通过java反射机制产生的方法,会把对象的方法转为关系的方法)
<?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.cjq.hibernate.User">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name"/>
<property name="password"/>
</class>
</hibernate-mapping>
这里完毕实体类映射的时候数据就要建立了,建立数据库一定要和配置文件里的相符合。
5. 将User.hbm.xml文件增加到hibernate.cfg.xml文件里
<mapping resource="com/cjq/hibernate/User.hbm.xml"/>
6. 编写执行測试类
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateTest { 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("张三");
user.setPassword("123"); //保存User对象
session.save(user);
User u1=(User)session.load(User.class, new String("402881e4361533e901361533eb920001"));
System.out.print("从数据库载入数据的用户名为"+u1.getPassword());
//提交事务
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally {
if (session != null) {
if (session.isOpen()) {
//关闭session
session.close();
}
}
}
}
}
7. 建议
最好增加例如以下配置项,方便观察hibernate sql的生成:
<propertyname="hibernate.show_sql">true</property>
<propertyname="hibernate.format_sql">true</property>
最好增加log4j配置文件,将该配置文件复制到src下,便于程序的调试。
8. 结果

通过一些概念和文件夹还有实例实现,如今对hibernate有所了解,以下的博客要对JDBC和反射机制做一些简单的介绍,这些知识是hibernate框架的基础,所以有必要在深入学习hibernate框架之前介绍一下。敬请期待!!!
深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架的更多相关文章
- 深入浅出学习Hibernate框架(二):JDBC基础操作
		
上篇博客<深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架>简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate.这篇博客将介绍JD ...
 - 深入浅出学习hibernate框架(三):java的反射机制
		
上篇博客写到了JDBC的基本操作,今天准备写一篇关于JAVA反射机制的文章,因为java的反射机制和上一篇JDBC都是Hibernate框架的基本要素.在Hibernate的运行机制中,这两块的内容正 ...
 - 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置
		
在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...
 - Struts2 + Spring + hibernate 框架搭成实例
		
1.准备Jar包: struts2.hibernate.spring所需jar包 struts-core-2.x.x.jar ----struts核心包 xwork-core-2.x.x.jar ...
 - 大师养成计划之二:hibernate框架的使用------实例演示
		
搭建hibernate项目框架的步骤: 一.导入jar包 二.new .cfg.xml配置文件 <?xml version="1.0" encoding="U ...
 - Hibernate(二)__简单实例入门
		
首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...
 - Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session
		
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCur ...
 - [Spring框架]Spring开发实例: XML+注解.
		
前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. ...
 - 跳水Hibernate(一)实例解说
		
此语一与高二接触SSH三框架,但是,当能力有限.我们没有继续下行.今天,我们正在采取的优势Java金痴迷,随即再次上调,另一项研究SSH.让我们先从SSH中间Hibernate说起. 或许你会问.为什 ...
 
随机推荐
- Spring Bean的作用域(转)
			
Spring Bean的作用域 .singleton [单例] eg:<bean id="personService" class="com.yinger.ser ...
 - 跨平台移动框架iMAG开发入门
			
iMAG是一个非常简洁高效的移动跨平台开发框架,开发一次能够同一时候兼容Android和iOS平台,有点儿Web开发基础就能非常快上手.当前移动端跨平台开发的框架有非常多,但用iMAG另一个优点,就是 ...
 - 【PHP】PHP5.4.0版本号ChangeLog具体解释(上)
			
前言 随着大量的框架使用composer和namespace,渐渐的线上环境也从之前的5.3变成了5.4或者5.5甚至5.6,随着7月份PHP7的公布,会有很多其它的公司採用新版本号. 之前好久就想写 ...
 - 高仿快车100--实战RadioGroup和RadioButton应用
			
1.RadioButtonCheckBox的差别: a.单个RadioButton在选中后,通过点击无法变为未选中 单个CheckBox在选中后.通过点击能够变为未选中 b.一组RadioButton ...
 - HDU 4951 Multiplication table 阅读题
			
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4951 题意:给一个P进制的乘法表.行和列分别代表0~p-1,第i行第j*2+1和第j*2+2列代表的是第i ...
 - Oracle 11g client安装和配置。
			
数据库和client在不同的机器. 安装前的准备.在安装过程中Oracle数据库server导航到下面的文件夹. 将listener.ora和tnsnames.ora中的host中的localhost ...
 - 给Ubuntu安装KDE桌面 [转]
			
自ubuntu5.10发布以来,我非常难得的让她在我的硬盘上顽强生存了近3个月,仔细想想就连当年我第一个接触的红旗Linux也不过坚持了一个月,呵呵,又写了一段废话── 所 谓的“重回Kununtu” ...
 - 【原创】leetCodeOj --- Interleaving String 解题报告
			
题目地址: https://oj.leetcode.com/problems/interleaving-string/ 题目内容: Given s1, s2, s3, find whether s3 ...
 - POJ 2538 WERTYU水的问题
			
[题目简述]:题意非常easy,没有trick. [分析]:事实上这题还是挺有趣的,在 算法竞赛入门经典中也有这一题. 详见代码: // 120K 0Ms /* 边学边做 -- */ // 字符串:W ...
 - GCD code block
			
在这里积累一些片段,由于备忘录. + (DRClass *)sharedDR{ //创建小黑.正常ap模式仅仅有一个小黑,so static DRClass *aDR = nil; static di ...
 
			
		