今天忙了一整天,终于搭建好了我的第一个Hibernate程序,中间关于hibernate.cfg.xml的问题搞了半天,不过最后还是搞明白了,下面来讲一讲过程。

  首先在你的eclipse中安装Hibernate Tools插件方便创建cfg.cml与hbm.xml文件。然后创建配置hibernate.cfg.xml文件:

奥添加yi

当然在最前面还要添加hibernate jar包,musql driver等,由于我使用maven管理项目,因此直接在maven的pom文件中添加就可以了。

在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">
<hibernate-configuration>
<session-factory name="HibernateSessionFactory">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">admin</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 在控制台输出SQL语句 -->
<property name="show_sql">true</property>
<!-- Hibernate启动时自动创建表结构 -->
<property name="hbm2ddl.auto">create</property>
<!-- 不加 可能出现异常 -->
<property name="current_sesson_context_class">thread</property>
<!-- 指定Cat类为Hibernate实体类 -->
<mapping resource="config/Cat.hbm.xml"/>
</session-factory>
</hibernate-configuration>

第九行url后面的 hibernate?characterEncoding=utf-8 是hibernate要操作的数据库名称,需要你自己先创建:

create database hibernate character set 'utf8'

19行Cat类是需要你自己创建的POJO实体类,实体类(Entity)是指与数据库有映射关系的Java类使用@Entity后Cat就被申明为了一个实体类。实体类还需配置对应的表名(@Table),主键(@Id),普通属性(@Column)对应列名等。

 package com.lxiao.model;

 import java.util.Date;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType; @Entity
@Table(name="tb_cat")
public class Cat { @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer Id; @Column(name = "name")
private String name; @Column(name = "description")
private String description; @Column(name = "age")
private Integer age; @Column(name="sex")
private String sex; @ManyToOne
@JoinColumn(name = "mother_id")
private Cat mother; @Temporal(TemporalType.TIMESTAMP)
@Column(name = "createDate")
private Date createDate; public Integer getId() {
return Id;
} public void setId(Integer id) {
Id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Cat getMother() {
return mother;
} public void setMother(Cat mother) {
this.mother = mother;
} public Date getCreateDate() {
return createDate;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
} }

值得一提的是,该POJO类在定义玩le私有变量后,可以用eclipse自动生成getter,setter方法,免去了手写的枯燥。

然后创建Cat.hbm.xml文件,添加你的POJO类,我这里就是Cat,使用Hibernate tools工具创建时选择添加类,

然后一路next就可以了,最后就在hibernte.cfg.xml中就可以配置实体类了,用<mapping resource="config/Cat.hbm.xml">,这是针对xml文件配置,如果是@注解配置,使用<maping class="com.lxiao.model.Cat">

然后我们写一个HibernateUtil类来加载config文件hibernate.cfg.xml:

 package com.lxiao.hibernate;

 import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static final SessionFactory factory; static{
try{
factory = new Configuration().configure("config/hibernate.cfg.xml").buildSessionFactory();
}catch(Throwable e){
System.out.println("Initial sesionFactory failed..."+e);
throw new ExceptionInInitializerError(e);
}
} public static SessionFactory getSessionFactory(){
return factory;
}
}

加载xml配置的实体类要使用Configuration加载Hibernate配置。

最后我们要使用一下Cat类,让Hibernate自动为我们创建表,执行相应数据库操作。这整个流程是:Hibernate保存数据是,先通过sesonFactory开启一个session会话(作用相当于JDBC中的Connection),然后开启一个事务(Transaction),然后保存代码,提交事务,关闭session。其它数据库操作也是类似的。下面是我的程序:

 package com.lxiao.hibernate;

 import java.awt.Font;
import java.util.Date;
import java.util.List; import javax.swing.JOptionPane; import org.hibernate.Session;
import org.hibernate.Transaction; import com.lxiao.model.Cat; public class CatTest {
public static void main(String[] args){
Cat motherCat = new Cat();
motherCat.setName("Mary White");
motherCat.setDescription("The mama cat...");
motherCat.setCreateDate(new Date()); Cat kitty = new Cat();
kitty.setMother(motherCat);
kitty.setName("Kitty");
kitty.setDescription("Hello Kitty");
kitty.setCreateDate(new Date()); Cat mimmy = new Cat();
mimmy.setMother(motherCat);
mimmy.setName("Mimmy");
mimmy.setDescription("Kitty's little twn sister");
mimmy.setCreateDate(new Date()); Session session = HibernateUtil.getSessionFactory().openSession();//开启一个Hibernate对话
Transaction transaction = session.beginTransaction(); session.persist(motherCat);//将mother保存进数据库
session.persist(kitty);
session.persist(mimmy); List<Cat> catlist = session.createQuery(" from Cat ").list(); StringBuffer resultBuffer = new StringBuffer();
resultBuffer.append("All cat in db: \r\n\r\n"); for(Cat cat : catlist){
resultBuffer.append("Cat: "+cat.getName()+", ");
resultBuffer.append("Mothercat: "+(cat.getMother() == null ? "no record" : cat.getMother().getName()));
resultBuffer.append("\r\n");
}
transaction.commit();//提交事务
session.close();//关闭数据库 JOptionPane.getRootFrame().setFont(new Font("Arial",Font.BOLD,14));
JOptionPane.showMessageDialog(null, resultBuffer.toString()); }
}

运行结果:

我在数据库的查询结果如下:

在hibernate.cfg.xml配置文件中,我们有:

 <!-- Hibernate启动时自动创建表结构 -->
15 <property name="hbm2ddl.auto">create</property>

每次Hibernate会先删掉表然后再创建表。

最后放上我的项目目录结构:

总之我的第一个Hibernate程序总算是可以运行了,也了解了不少Hiernate这个ORM框架的东西,它给开发中关于数据库操作带来了很多便利,很值得学习,了解。

--程序员的道路漫漫,继续努力。。。

参考书籍:Java Web开发王者归来,刘京华编著。

我的Hibernate入门的更多相关文章

  1. 三大框架之hibernate入门

    hibernate入门   1.orm      hibernate是一个经典的开源的orm[数据访问中间件]框架           ORM( Object Relation Mapping)对象关 ...

  2. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  3. Hibernate入门案例 增删改

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  4. Hibernate入门6.Hibernate检索方式

    Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...

  5. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  6. Hibernate入门4.核心技能

    Hibernate入门4.核心技能 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hibernate3的基本知识, ...

  7. Hibernate入门3.配置映射文件深入

    Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...

  8. 简单的Hibernate入门简介

    其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...

  9. Hibernate入门(1)-第一个Hibernate程序

    Hibernate入门(1)-第一个Hibernate程序 Hibernate是最著名的ORM工具之一,本系列文章主要学习Hibernate的用法,不涉及Hibernate的原理.本文介绍第一个Hib ...

  10. hibernate入门之person表

    下面的hibernate入门person表指的是:根据mysql数据库中的test表和其中的元素-->建立映射表==>进而创建持久化类的顺序来操作了,下面为步骤 1.配置MySQL驱动程序 ...

随机推荐

  1. C语言中的宏

    写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_ ...

  2. php 环境变量收集

    常用的PHP环境变量和系统常量列表 是一个包含服务器端相关信息的PHP全局环境变量,在PHP4.1.0之前的版本使用$HTTP_SERVER_VARS.更多信息可以参考这里. $_SERVER['PH ...

  3. spring 最全MAVEN 依赖引入配置

    <properties> <spring.version>4.1.6.RELEASE</spring.version> </properties> &l ...

  4. 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作

    分享一个非常不错的字符串加密和解密的程序. 可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. Java代码如下: package com.app; import java.securi ...

  5. FastDFS 的部署、配置与测试的

    部署篇:http://soartju.iteye.com/blog/803477 配置篇:http://soartju.iteye.com/blog/803524 测试篇:http://soartju ...

  6. [Java Performance] 数据库性能最佳实践 - JPA和读写优化

    数据库性能最佳实践 当应用须要连接数据库时.那么应用的性能就可能收到数据库性能的影响. 比方当数据库的I/O能力存在限制,或者因缺失了索引而导致运行的SQL语句须要对整张表进行遍历.对于这些问题.只相 ...

  7. 启动hadoop,报错Error JAVA_HOME is not set and could not be found

    报如错误:JAVA_HOME is not set and could not be found,可能是因为JAVA_HOME环境没配置正确,还有一种情况是即使各结点都正确地配置了JAVA_HOME, ...

  8. 手动创建Servlet--J2EE学习笔记

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 使用 Serv ...

  9. Shell变量之自定义变量、环境变量

    1:环境变量        环境变量可以帮我们达到很多功能-包括家目录的变换啊.提示字符的显示啊.运行文件搜寻的路径啊等等的那么,既然环境变量有那么多的功能,问一下,目前我的 shell 环境中, 有 ...

  10. 鸟哥的Linux私房菜学习笔记(1)

    2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹 ...