Hibernate3入门指南
来源:互联网 发布:js随机数 编辑:程序博客网 时间:2024/06/01 16:01
谨以此文献给还没使用但准备使用hibernate的朋友,万事开头难,我就以自己的经历来帮助大家迈出这最难的一步吧!
跟很多朋友一样,我初学hibernate时大费周折,看过众多的书也参与过几个跟hibernate有关的项目,但是从来没有自己去创建过一个hibernate的项目,因此我对hibernate的认识是非常肤浅的。终于有一天,我再也坐不住了,我必须创建自己的hibernate项目,我要加深对hibernate的认识,于是,我静下心来,开始了我的hibernate之旅。
一、建立第一个hibernate工程
准备工作:
1、首先到hibernate官方网(http://www.hibernate.org/)下载最新的发布版,目前是
2、准备一个IDE,我个人比较喜欢eclipse,现在最新是3.3版,在eclipse官方网上有下:http://www.eclipse.org/,解压到任意目录即可;
3、下载hibernate tools,一个eclipse的插件,jboss tools的一部分。它具有:向导生成hibernate.cfg.xml文件,动态予览hql,java类映射ddl等功能;下载完后解压,然后采用link方式安装eclipse插件;
建立工程:
1、 启动eclipse,在工作台上打开Navigator透视图,然后“file”-“new”-“Java Project”,弹出如图窗口:
在“Project name”栏输入工程名称“hibernate tutorial”,然后按“finish”完成新建工程;
2、 在Navigator透视图中选中新建的工程根目录,右键-“new”-“Folder”来创建一个“lib”文件夹,用于存放工程依赖的jar文件,如图:
因为数据库我用的是mysql,所以这里用的是mysql的驱动包(lib中最下面那个文件);
3、 将必需的jar包加载到build path中:
选中工程跟目录,右键-“properties”,弹出属性窗口,如图:
按照红色标注部分进行操作,最后按两次“ok”完成build path的加载;
4、 创建域模型:
选中工程,右键-“new”-“class”,弹出新建类的对话框,如图:
设置好包名跟类名后按“finish”完成类的创建;之后eclipse会自动打开该类的.java文件,我们创建一些简单属性并生成其getter跟setter方法,这里我们用到了hibernate annotation来代替hbm.xml完成类的映射(注意:要使用annotation必须要求JDK为5.0或以上版本);
@Table
public class Message ...{
private Long id;
private String text;
private Message nextMessage;
@Id
@GeneratedValue
public Long getId() ...{
return id;
}
public String getText() ...{
return text;
}
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "NEXT_MESSAGE_ID")
public Message getNextMessage() ...{
return nextMessage;
}
// 省略setter方法
}
其中元注解的意义可以参考hibernate annotation文档,在其发行包的doc下就有;如果你想使用hbm.xml文件,那么也给你一个参考(Message.hbm.xml):
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name=" com.enrising.hibenatetutorial.model.Message">
<id name="id">
<generator class="native"/>
</id>
<property name="text"/>
<many-to-one name="nextMessage" cascade="all" column="NEXT_MESSAGE_ID" foreign-key="FK_NEXT_MESSAGE"/>
</class>
</hibernate-mapping>
5、 配置hibernate:
有两种方式:hibernate.properties跟hibernate.cfg.xml,官方推荐是前者,因为其比较灵活,但是在创建session工厂时需要用add方法将模型类加载到hibernate配置中,否则hibernate是找不到模型类的;而cfg.xml文件可以通过mapping标签将模型类映射到hibernate配置中,如果模型类比较多,则这种方式非常灵活,所以这里我们选用cfg.xml方式;cfg.xml文件配置相当简单,只需声明如何连数据库及映射模型类即可,如果觉得写xml麻烦,那么就使用hibernate tools来向导生成cfg.xml吧;选中工程下的src目录,右键-“new”-“other”-“hibernate”-“hibernate Configuration File”,按两次“next”按钮,来到配置界面,如图:
其中配置根据个人具体情况而定,留空的地方最好不要填写,以免出现不必要的错误;按“finish”完成hibernate配置;这时eclipse会自动打开hibernate.cfg.xml文件供你手动编辑;这里我们在</session-factory>之前加上如下配置:
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- auto schema export -->
<!-- 如果第一次启动hibernate并希望自动映射数据库表;则取消掉这段注释,否则请将其注释掉,免去不必要的开销
<property name="hibernate.hbm2ddl.auto">update</property>
-->
<!-- mapping class -->
<mapping class="com.enrising.hibenatetutorial.model.Message" />
<!-- 如果是使用hbm.xml文件,则需要把这句该成:
<mapping resource="com/enrising/hibenatetutorial/model/Message.hbm.xml"/>
-->
如果还有其它模型类,依次加到后面即可,到此为止,hibernate的配置已经完成;
6、 创建启动hibernate跟监听session工厂的辅助类HibernateUtil.java:
* Startup Hibernate and provide access to the singleton SessionFactory
*/
public class HibernateUtil ...{
private static SessionFactory sessionFactory;
static ...{
try ...{
sessionFactory = new AnnotationConfiguration().configure()
.buildSessionFactory();
} catch (Throwable ex) ...{
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() ...{
// Alternatively, we could look up in JNDI here
return sessionFactory;
}
public static void shutdown() ...{
// Close caches and connection pools
getSessionFactory().close();
}
}
这个类是官方推荐的,只是因为我们要用到annotation,所以将原来的Configuration换成了AnnotationConfiguration;如果使用hbm.xml文件,则需要改成Configuration;
7、 创建一个测试类Test.java:
/** *//**
* @param args
*/
public static void main(String[] args) ...{
// 获得session
Session session = HibernateUtil.getSessionFactory().openSession();
// 创建一个模型的实例
Message message = new Message();
message.setText("hello world.");
message.setNextMessage((Message) session
.get(Message.class, new Long(1)));
// 调用session保存模型
session.save(message);
session.flush();
// 提交事务
session.beginTransaction().commit();
// 执行一些收尾工作
session.close();
HibernateUtil.shutdown();
}
}
8、 准备一个日志配置文件log4j.properties,用于监视hibernate如何启动及查看hibernate映射的sql语句;这个文件网上海的很,随便搜索一个即可,这里提供一个参考版本:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug
到此为止,我们的第一个hibernate工程已经建立起,接下来就测试我们的项目是否正确工作,运行Test.java文件,然后查看控制台,如果看到如下信息说明运行正常:
18:30:51,339 INFO SchemaUpdate:115 - Running hbm2ddl schema update
18:30:51,339 INFO SchemaUpdate:126 - fetching database metadata
18:30:51,349 INFO SchemaUpdate:138 - updating schema
18:30:51,689 INFO TableMetadata:40 - table found: hibernatedemo.message
18:30:51,699 INFO TableMetadata:41 - columns: [id, text, next_message_id]
18:30:51,699 INFO TableMetadata:43 - foreign keys: [fk
18:30:51,699 INFO TableMetadata:44 - indexes: [fk
18:30:51,699 DEBUG SchemaUpdate:149 - alter table Message add index FK
18:30:52,380 INFO SchemaUpdate:160 - schema update complete
……
hibernate:
insert
into
Message
(NEXT_MESSAGE_ID, text)
values
(?, ?)
信息的上半部分是利用hibernate tools更新表结构;下半部分是hibernate执行保存操作时生成的sql语句。这时你可以打开你的数据库,查看数据是否已经保存成功吧~It’s here~
到此为止,整篇hibernate3入门文章已经结束,由于不太会写文章,所以尽量以图片跟代码来代替文字,还望大家见谅。加之本人水平有限,文中如有不足或者错误之处,还望大家不吝赐教,谢谢!最后祝大家暑假愉快,工作顺利!
- Hibernate3入门指南
- hibernate3入门
- hibernate3-maven-plugin插件入门
- 入门指南
- 入门指南
- 入门指南
- 入门指南
- Ajax+Struts2+Spring2+Hibernate3入门实例
- Hibernate3.X—HelloWorld篇(入门篇)
- struts2+spring+hibernate3入门整合Demo
- hibernate3.4 注解 oracle简单入门例子
- Hibernate3.6 入门(笔记二):映射_inverse_lazy
- Hibernate3
- hibernate3
- Hibernate3
- Hibernate3
- hibernate3
- Hibernate3
- 有没有把数组直接转成以逗号分隔的字符串的函数
- VC开发多语言界面支持的简单方法
- Opencv播放视频的问题
- Ant十五大最佳实践
- H.323协议简介
- Hibernate3入门指南
- LIBSVM中参数的意义
- sql server数据库编码(varchar,nvarchar的区别)
- Vba 用NOTES发送邮件 不会有XP的安全警告
- 移植qpdf2到qtopia-1.7.0
- #include " mysql.h " 出错解决方法之一
- EclipseRCP技术积累
- 3CREPORT -- 中国3C消费报告 -- 3C类消费品投诉门户(电脑 通讯 消费类电子)
- C#调用存储过程