以下是一个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:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.xu.entity.Cat" table="cat" catalog="mydb"> <id name="catId" type="java.lang.String"> <column name="cat_id" length="32" /> <generator class="assigned" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="16" not-null="true" /> </property> <property name="sex" type="java.lang.String"> <column name="sex" length="1" /> </property> <property name="weight" type="java.lang.Float"> <column name="weight" precision="9" scale="3" /> </property> </class> </hibernate-mapping>
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