以下是一個Hibernate入門案例,使用Myeclipse開發。
一、環境
1、MyEclipse for Spring 10.0.0
2、jdk 1.6
二、簡要說明
資料庫為 mysql 5.5
在mysql中建立一個名為mydb的資料庫,建立cat表
CREATE TABLE `cat` (
`cat_id` varchar(32) NOT NULL,
`name` varchar(16) NOT NULL,
`sex` varchar(1) default NULL,
`weight` float(9,3) default NULL,
PRIMARY KEY (`cat_id`)
);
插入幾條資料。
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 {// Fieldsprivate 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 accessorspublic 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>
最後建立一個測試類別進行測試Test.java:
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, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
最後項目運行結果如下: