【IT168技术文档】
本篇是建立在前两篇即《入门知识篇》和《环境配置篇》基础之上的,本篇通过对MySQL数据库中test数据库中Users表的操作,这里主要是向表中增加记录,来展示如何在Eclipse中使用Hibernate.
准备工作:
在进行创建项目之前,先将《环境配置篇》中下载的Hibernate3.1构建到eclipse中来,将下载的Hibernate-3.1.3.zip解压.解压后目录为:
Hibernate3.jar这个文件复制到lib文件夹中,同时也将上篇中下载的MySQL Connector/J解压,解压后将其目录下的mysql-connector-java-5.0.3-bin.jar这个文件复制到lib文件中去。一会创建项目时要用到这个lib文件。
在eclipse中,通过”窗口—>首选项-Java—构建路径-用户库”。
然后单击“添加JAR”,将Hibernate-3.1.3.zip解压目录中的lib文件中所有的jar文件(当然包括上面复制到该文件夹中的Hibernate3.jar和mysql-connector-java-3.0.10-stable-bin.jar)添加进来。
这里的lib文件夹是上面提到的Hibernate-3.1.3.zip解压目录中的lib文件。
1. 创建项目
启动eclipse,,通过”文件->新建->项目”来建立Java项目,弹出如下图所示的对话框:
选择”Java项目”,点击”下一步”,给项目命名,这里命名为:HibernateDemo,同时将”创建单独的源文件夹和输出文件夹”选上,如下图:
【IT168技术文档】
点击”下一步”,选择”库”标签中的”添加库”
勾选先前设置好的hibernate3.1用户库
点击”完成”,从而完成对Java项目HibernateDemo的创建.
2. 建立可持久化类User.java
将刚建立的HibernateDemo项目展开
右键点击src,通过”新建—>类”来创建User.java
包名用useradmin,类的名称是User.
在User的类中添加三个变量:
通过点击工具栏上的”源代码—>生成Getter和Setter方法”,弹出对话框。package userdmin; /**//* * Copyright (c) 2006,Science and Technology Of NCEPU * All rights reserved. * * FileName:User * Description:description of the file * * Version:1.0 * Author:gmplayer * FinishDate:2006.9.1 * */ public class User ...{ private int id; private String username; private String password; }
【IT168技术文档】
点击“确定”,生成如下代码.
好了,这个类完成了。它是一个普通的Java对象(Plain Old Java Objects,就是POJOs,有时候也称作Plain Ordinary Java Objects),表示一个数据集合。下面建立一个Hbm文件将这个类映射到数据库的表格上。package userdmin; /**//* * Copyright (c) 2006,Science and Technology Of NCEPU * All rights reserved. * * FileName:User * Description:description of the file * * Version:1.0 * Author:gmplayer * FinishDate:2006.9.1 * */ public class User ...{ private int id; private String username; private String password; /**//** * @return id */ public int getId() ...{ return id; } /**//** * @param id 要设置的 id */ public void setId(int id) ...{ this.id = id; } /**//** * @return password */ public String getPassword() ...{ return password; } /**//** * @param password 要设置的 password */ public void setPassword(String password) ...{ this.password = password; } /**//** * @return username */ public String getUsername() ...{ return username; } /**//** * @param username 要设置的 username */ public void setUsername(String username) ...{ this.username = username; } }
3. 映射文件
右键点击HibernateDemo下的src文件,通过”新建—>文件”,来建立一个名为”User.hbm.xml”的文件,文件内容如下:
其中,代码中useradmin.User表示,类名为useradmin包下的User类,表为数据库中的Users表.<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.1.dtd"> <hibernate-mapping> <class name="useradmin.User" table="Users"><!--把类和数表关联起来--> <id name="id" unsaved-value="null"> <!--id的产生方式是assigned--> <generator class="assigned" /> </id> <property name="username" type="string" /><!--映射用户姓名--> <property name="password" type="string" /><!--映射用户密码--> </class> </hibernate-mapping>
这个XML文件定义了对象属性映射到数据库表的关系,这里采用了assigned(程序设置)方式生成主键。
4. 配置文件
Hibernate可以使用XML或属性文件来进行配置,配置文件名默认为“hibernate.cfg.xml”, 在src目录下,新建一个hibernate.cfg.xml文件,与User.hbm.xml文件在同一目录下,内容如下:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.1.dtd"> <hibernate-configuration> <session-factory > <property name="show_sql">true</property><!--显示SQL语言--> <property name="connection.driver_class"><!--指定连接MySQL的驱动--> com.mysql.jdbc.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK
<!--连接数据库的URL,库名是schoolProject,”useUnicode=true&characterEncoding=GBK”
意思是采用中文编码--> </property> <property name="connection.username"> <!--连接的登录名--> root </property> <property name="connection.password"><!--登录密码--> root </property> <property name="dialect"> <!--指定连接的语言--> org.hibernate.dialect.MySQLDialect </property> <mapping resource="User.hbm.xml" /><!--映射User这个资源--> </session-factory> </hibernate-configuration>
如果hibernate.cfg.xml文件和User.hbm.xml文件不在同一目录下,可以通过修改hibernate.cfg.xml文件中的<mapping resource="User.hbm.xml" />来映射User这个资源.如果User.hbm.xml这个文件在useradmin目录下, User.hbm.xml与hibernate.cfg.xml在同级目录下,<mapping resource="User.hbm.xml" />应改为<mapping resource="useradmin/User.hbm.xml" />
另外注意hibernate.cfg.xml文件和User.hbm.xml文件中的”http://hibernate.sourceforge.net/hibernate-mapping-3.1.dtd”,其中3.1要与hibernate的版本一致,我们使用的是hibernate3.1.
【IT168技术文档】
5. 测试程序
在useradmin包下新建一个Test类,即右键点击useradmin,通过”新建—>类”来建立一个Test类,同时将public static void main(String[] args)这个选项勾上。
Test类的代码如下:
这里简单说说一下流程,首先初始化Configuration,加载Hibernate的配置信息,然后Configuration取得SessionFactory对象,并由它来开启一个Session,它代表对象与表格的一次会话操作,而 Transaction则表示一组会话操作,我们只需要直接操作User对象,并进行Session与Transaction的相关操作, Hibernate就会自动完成对数据库的操作。package useradmin; /**//* * Copyright (c) 2006,Science and Technology Of NCEPU * All rights reserved. * * FileName:filename * Description:description of the file * * Version:1.0 * Author:gmplayer * FinishDate:2006.9.1 * */ import org.hibernate.*; import org.hibernate.cfg.*; public class Test ...{ public static void main(String[] args) throws Exception ...{ try ...{ SessionFactory sf = new Configuration().configure().buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); user.setUsername("gmplayer"); user.setPassword("admin"); session.save(user); tx.commit(); session.close(); } catch (HibernateException e) ...{ e.printStackTrace(); } } }
最后建立完所有的文件以后,文件的结构如图:
6. 运行程序
右键点击Test.java,选择”运行—>运行方式—>Java应用程序”.
控制台中最后一行输出为: Hibernate: insert into Users (username, password, id) values (?, ?, ?)表示运行成功.
同时查看数据库中的Users表,发现Users表中已经增加了一条记录,其中username为gmplayer,password为admin.
7. 小结
Hibernate原理方面网上有很多资料,比如Hibernate本身自带的中文文档、夏昕编写的《Hibernate开
发指南》,陈刚编写的《Eclipse插件开发指南》和蔡雪焘编写的《Hibernate开发及整合应用大全》等都是
非常不错的,现在关于Hibetnate的书籍也多了起来。
我所作的工作就是要使新手能尽快上手Hibernate,理论方面我不想过多纠缠,尽量以实例说话。我想
,与其凭空说一个技术多好多好,倒不如给我一个可以上手的实例操作一下。