以下是一个Hibernate入门案例,使用Myeclipse开发。
一、环境
1、MyEclipse for Spring 10.0.0
2、jdk 1.6
二、简要说明
数据库为 mysql 5.5
在mysql中创建一个名为mydb的数据库,建立cat表
CREATE TABLE `cat` (
);
插入几条数据。
insert into cat values('002','bb','f','12.6');
三、步骤
a.配置数据源
(请参看 在MyEclipse中配置数据源 )
b.新建Project(可以个Java Project 或者是Web Project 等项目) ,这个的项目名称是:Example
b-1:创建一个名为config的目录,用于放置hibernate.cfg.xml;
b-2:创建一个名为mappings的目录,用于放置映射文件;
如图:
c.增加hibernate应用能力,也可以说增加hibernate需要的包或者库
过程:在Example项目的右击选项菜单中,选择MyEclipse ->Add Hibernate Capabilities...
弹出一个Hibernate Support for MyEclipse 的对话框:
c-1:在“Select the libraries to add to the buildpath”中选择要添加到该工程的包,可以选择默认,也可以勾选Hibernate3.0的Core及Advanced包都勾;
如图:
c-2:是否创建hibernate.cfg.xml,我把configuration folder 设定为src\com.xu.config包中;
如图:
c-3:第三步是指定数据库连接细节(specify database connection details),在这之前请先配置你的数据源。
在DB Driver中选择你的数据源。
如图:
c-4:创建SessionFactory,这个SessionFactory其实是Hibernate提供的一个用于管理Session的类,
他可以确保在每个独立的线程中Session是唯一的。
如图:
点击Finish,完成。
d.创建实体类及该实体类的映射文件。可以自己手动创建,也可以通过Myeclipse开发工具自动创建。这里介绍用Myeclipse工具手动创建。
d-1:在MyEclipse工作区右上角选择进入MyEclipse Database Explorer,打开数据库管理视图。可以看到我们的数据源。
d-2:进入到我们需要生成实体及映射文件的数据库表
如图:
d-3:右击需要的表(如cat表),出现选项单,选择Hibernate Reverse Engineering...
d-4:在 Java src folder 中选择需要生成实体映射文件的项目文件夹,并且选中Hibernate mapping file(*.hbm.xml) for each database table 与
Java Data Object 这两个选择框,前一个生成映射文件,后一个生成实体类。然后下一步。
如图;
然后一直下一步直到完成。
完成后将自动生成对应表中的实体类和映射文件。
如图:
package com.xu.entity;
/**
* Cat entity. @author MyEclipse Persistence Tools
*/
@SuppressWarnings("serial")
public class Cat implements java.io.Serializable {
// Fields
private String catId;
private String name;
private String sex;
private Float weight;
// Constructors
/** default constructor */
public Cat() {
}
/** minimal constructor */
public Cat(String catId, String name) {
this.catId = catId;
this.name = name;
}
/** full constructor */
public Cat(String catId, String name, String sex, Float weight) {
this.catId = catId;
this.name = name;
this.sex = sex;
this.weight = weight;
}
// Property accessors
public String getCatId() {
return this.catId;
}
public void setCatId(String catId) {
this.catId = catId;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Float getWeight() {
return this.weight;
}
public void setWeight(Float weight) {
this.weight = weight;
}
}
对应的映射文件如下:
Cat.hbm.xml:
package com.xu.test;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.xu.entity.Cat;
import com.xu.factory.HibernateSessionFactory;
public class Test {
Session session = null;
Transaction tx = null;
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
Test th = new Test();
List cl = th.getAllCats();
if (cl != null) {
Iterator it = cl.iterator();
while (it.hasNext()) {
Cat cat = (Cat) it.next();
System.out.println("catID:" + cat.getCatId() + "name:"
+ cat.getName() + "sex:" + cat.getSex());
}
}
}
@SuppressWarnings("rawtypes")
public List getAllCats() {
session = HibernateSessionFactory.getSession();
List catlist = null;
try {
tx = session.beginTransaction();
catlist = session.createQuery("from Cat").list();
return catlist;
} catch (Exception ex) {
System.err.println(ex.getMessage());
return null;
} finally {
HibernateSessionFactory.closeSession();
}
}
}
出现错误是因为hibernate是通过log4j进行日志管理的,所以如果没有log4j来管理hibernate日志,到时查找日志将不能成功。
所以需要新建一个log4j.properties文件来管理hibernate日志。
代码如下:
log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n