以下是一个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 {
- // 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>
最后创建一个测试类进行测试 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, 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
最后项目运行结果如下: