上篇Hibernate(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hibernate的优势所在。在此之前,读者有必要了解一下Hibernate中的每个jar包的作用和每个jar文件包主要负责的工作,这里我们不做过多的解释。

1、导入jar文件

导入antlr-2.7.6.jar

导入commons-collections-3.1.jar

导入dom4j-1.6.1.jar

导入hibernate-jpa-2.0-api-1.0.1.Final.jar

导入hibernate3.jar

导入javassist-3.12.0.GA.jar

导入jta-1.1.jar

导入mysql-connector-java-3.1.13-bin.jar

导入slf4j-api-1.6.1.jar

这一部分没有过多的解释,只需要大家了解每个jar文件包的作用即可。

2、编辑实体

package com.entity;    

import java.util.Date;    

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;
}
}

这一步与普通的JDBC没有太大的区别,在JDBC中我们也可以通过实体封装需要的信息,如果你对面向对象编程有一定的了解相信不难理解。

3、创建数据库、表

创建数据库

创建表

显示表结构

这一步就是一个创建数据库的过程,与我们平常做项目使用的数据库结构和过程也没有区别。

4、创建实体映射文件User.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.entity.User">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>

从这一步开始,JDBC开始与Hibernate有一定的区别,这里我们重点讲一下User.hbm.xml的作用。User.hbm.xml的作用简而言之就是对实体和数据库中的表进行相呼应,保证我们对实体对象进行的操作都会在数据库中产生与之对应响应的结果。但仅这样的配置还有一个问题那就是我们如何将能够将数据库中的表与对象进行关联。这就需要接下来的配置了。

5、创建数据库连接和映射配置文件 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/hibernate_first</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property> <mapping resource="com/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

这里的重点区别在于,通过映射说明<mapping resource="com/entity/User.hbm.xml"/>我们可以将数据库连接和映射进行联系,也就是说通过 hibernate.cfg.xml的配置,我们就可以找到具体的实体和数据库表对应关系。到此为止我们所有的配置就进行完毕了,接下来做一个测试。

6、创建测试文件 Client.java

package test;    

import java.util.Date;    

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; import com.entity.User; 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("NAME1");
user.setPassword("PWD1");
user.setCreateTime(new Date());
user.setExpireTime(new Date()); //保存User对象
session.save(user); //提交事务
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally {
if (session != null) {
if (session.isOpen()) {
//关闭session
session.close();
}
}
}
}
}

程序执行结果如下:

通过上述实例的演示,对比上一篇Hibernate从入门到精通(一)JDBC简介文章中我们提到的JDBC操作的缺陷可以看出,我们向数据库中添加一个对象只需要通过HibernateAPI中最核心的Session接口,调用save()方法即可,不需要我们在代码中编写SQL语句,也不需要程序员对SQL语言过多的了解,这就体现了Hibernate完全面向对象编程。

到此为止,我们已经基本了解了Hibernate的基本使用步骤,接下来我们会分别讲解一些Hibernate中的一些重点概念和使用。

Hibernate(二)Hibernate 实例的更多相关文章

  1. Hibernate框架搭建实例

    一,Hibernate是一个持久层,是一个专门负责管理数据库连接的框架: 二,Hibernate的搭建实例: 1.在Hibernate的官方网站(http://www.hibernate.org)可以 ...

  2. Hibernate基础学习(二)—Hibernate相关API介绍

    一.Hibernate的核心接口      所有的Hibernate应用中都会访问Hibernate的5个核心接口.      (1)Configuration接口: 配置Hibernate,启动Hi ...

  3. Hibernate简介与实例

    一.Hibernate简介 1.什么是Hibernate? Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等 ...

  4. Spring整合Hibernate 二 - 声明式的事务管理

    Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: <bean id="txManager" class="o ...

  5. Hibernate二次学习一----------Hibernate简单搭建

    因为博客园自带的markdown不太好用,因此所有markdown笔记都使用cmd_markdown发布 Hibernate二次学习一----------Hibernate简单搭建: https:// ...

  6. 一起学习Hibernate: Hibernate01 —— Hibernate的概述与入门案例

    一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ...

  7. Hibernate笔记——Hibernate介绍和初次环境配置

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...

  8. Hibernate之Hibernate环境搭建

    Hibernate之Hibernate环境搭建 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar d ...

  9. 【hibernate】hibernate和mybatis的比较

    理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉 ...

  10. 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法

    问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...

随机推荐

  1. WCF学习笔记一(概述)

    WCF  Windows Communication Foundation 分布式通信框架.WCF是对现有分布式通信技术的整合.是各种分布式计算的集大成者.主要整合技术如下图: WCF的服务不能孤立的 ...

  2. 解读zookeeper的配置项

    zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:CS通信心跳数 Zoo ...

  3. NFC手机

    NFC手机 NFC手机内置NFC芯片,比原先仅作为标签使用的RFID更增加了数据双向传送的功能,这个进步使得其更加适合用于电子货币支付:特别是RFID所不能实现的,相互认证和动态加密以及一次性钥匙(O ...

  4. PLSQL常用时间函数

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  5. jQuery无刷新上传学习心得

    记得刚离开大学,进入目前这家公司不到一个月时,有一位前辈给我们当时的新人讲了下JS无刷新上传的相关知识. 在此之前,一直都是在使用C#提供的服务器上传控件FileUpload,但是每次使用时,都会刷新 ...

  6. 【AngularJS】——0.分析

    [引导分析]1.什么是AngularJS? 2.为什么要使用它? 3.应用场合? 4.基本思想? 5.四大核心特征? 6.优缺点是什么? 1.定义:AngularJS是一个用于设计动态web应用的前端 ...

  7. PHP设计模式之:建造者模式

    建造者模式: 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式; 目的: 消除其他对象复杂的创建过程 结构图: 优点: 建造者模式可以很好的将一个对象的实现与相关的“业 ...

  8. Object layout in C++ and access control

    The variables are guaranteed to be laid out contiguously, as in C. However, the access blocks may no ...

  9. #Leet Code# Divide Two Integers

    描述:不使用 * / % 完成除法操作.O(n)复杂度会超时,需要O(lg(n))复杂度. 代码: class Solution: # @return an integer def dividePos ...

  10. iOS: 学习笔记, Swift与Objective-C混用总结

    Swift与Objective-C交互总结 在Swift中使用Objective-C(简单) 在创建OjbC文件时, XCode会提示创建XXX-Bridging-Header.h文件, 创建之 在创 ...