在Eclipse中写第一个hibernate小例子
在hibernate自带的文档中,包含了一个很简单的小例子,不过这个小例子是基于ant的,而且说的不是很详细,不利于新手学习。在这里,我将在Eclipse中实现这个例子,并给出详细的实现步骤。
首先,我们要创建一个数据库,并生成一个表,来供hibernate访问。在这里我们采用MySQL作为DBMS。我们的数据库取名为 hbtest,生成一个名叫EVENTS的表。生成数据库的操作比较简单,我就不介绍了,生成表的sql语句为:
接下来,我们在Eclipse中创建一个java项目。之后我们要写一个javabean类,来和数据库中的这个表来进行映射。很显然,在上面的表中,包还3个字段,所以我们的这个javabean类中也包含3个属性,具体代码如下:
接下来,我们要写一个配置文件,将上述javabean类和数据库表映射起来。这个配置文件的名字叫做Event.hbm.xml,具体内容如下:
在上述配置文件中,我们要注意如下事项:如果数据库字段和javabean类属性名字不同,则要明确指定映射关系,就像上面的第11行;名字相同就不用指定指定了,就像第12行。这个配置文件要放在哪里呢?我们只需在源代码文件夹中新建一个文件夹,将其放进去就好了。具体在Eclipse中的操作为,建立一个名叫mapping的包(一个包就相当于一个文件夹),然后把这个配置文件放进去。
接下来,我们在src文件夹中创建一个名叫hibernate.cfg.xml的文档,来对hibernate进行综合配置,内容如下:
大家注意上面的第25行,"mapping/Event.hbm.xml"这个路径要和我们上面讲的对应起来,也就是我们新建了一个mapping包,然后把 Event.hbm.xml这个配置文件放了进去。如果你的配置文件放在其他地方,这个设置就要修改。
接下来我们写一个工具类。因为hibernate在执行的时候,总是要用到SessionFactory这个东西,而得到这个东西的方法稍微有点复杂,因此我们写一个工具类,唯一的功能就是得到SessionFactory,这样使用起来就很方便了,代码如下:
接下来,我们写一个main函数,来检测一下hibernate是否能够成功运行,代码如下:
最后,特别注意,hibernate的运行是需要大量第三方类库支持的,因此我们还需要将这些类库导入到我们的这个项目中,同时还要把hibernate自带的log4j配置文件也复制过来。这些内容都在hibernate的发布包中,大家自己找。
当所有的工作都做完后,这个项目的布局是如下图所示:
至此,最简单的hibernate小例子就完成了,应该可以运行了
- create
table EVENTS ( - EVENT_ID
int(6) AUTO_INCREMENT, - EVENT_DATE
date, - TITLE
varchar( 20), - primary
key (EVENT_ID));
- package
org.hibernate.tutorial.domain; - //上面的这个包路径比较长,因为原例子中就是这样,我没有修改
- import
java.util.Date; - public
class Event { -
privateLong id; -
privateString title; -
privateDate date; -
publicEvent() {} -
publicLong getId() { -
returnid; -
} -
privatevoid setId(Long id) { -
//这里要注意,这个set方法是private的, -
//目的是不让普通的程序员使用它, -
//但是hibernate框架还是可以通过反射机制访问私有属性id -
this.id= id; -
} -
publicDate getDate() { -
returndate; -
} -
publicvoid setDate(Date date) { -
this.date= date; -
} -
publicString getTitle() { -
returntitle; -
} -
publicvoid setTitle(String title) { -
this.title= title; -
} - }
- <?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"> - <hibernate-mapping
package="org.hibernate.tutorial.domain"> -
<classname="Event" table="EVENTS"> -
<idname="id" column="EVENT_ID"> -
<generatorclass="native" /> -
</id> -
<propertyname="date" type="timestamp" column="EVENT_DATE" /> -
<propertyname="title" /> -
</class> - </hibernate-mapping>
- <?xml
version='1.0' encoding='utf-8'?> - <!DOCTYPE
hibernate-configuration PUBLIC -
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" -
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> -
- <hibernate-configuration>
-
<session-factory> -
<!--数据库连接设置,根据具体情况来,特别是用户名和密码 --> -
<propertyname="connection.driver_class">com.mysql.jdbc.Driver</property> -
<propertyname="connection.url">jdbc:mysql://localhost:3306/hbtest</property> -
<propertyname="connection.username">root</property> -
<propertyname="connection.password">123456</property> -
<!--JDBC连接池(内置的) --> -
<propertyname="connection.pool_size">1</property> -
<!--SQL语句的方言 --> -
<propertyname="dialect">org.hibernate.dialect.HSQLDialect</property> -
<!--Enable Hibernate's automatic session context management --> -
<propertyname="current_session_context_class">thread</property> -
<!--Disable the second-level cache --> -
<propertyname="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> -
<!--Echo all executed SQL to stdout --> -
<propertyname="show_sql">true</property> -
<!--Drop and re-create the database schema on startup --> -
<propertyname="hbm2ddl.auto">create</property> -
<mappingresource="mapping/Event.hbm.xml"/> -
</session-factory> - </hibernate-configuration>
- package
util; - import
org.hibernate.*; - import
org.hibernate.cfg.*; - public
class HibernateUtil { -
privatestatic final SessionFactory sessionFactory; -
static{ -
try{ -
//Create the SessionFactory from hibernate.cfg.xml -
newsessionFactory = Configuration().configure().buildSessionFactory(); -
catch} (Throwable ex) { -
//Make sure you log the exception, as it might be swallowed -
"InitialSystem.err.println( SessionFactory creation failed." + ex); -
thrownew ExceptionInInitializerEr ror(ex); -
} -
} -
publicstatic SessionFactory getSessionFactory() { -
returnsessionFactory; -
} - }
- package
events; -
import
org.hibernate.Session; -
import
java.util.Date; -
import
util.HibernateUtil; -
import
org.hibernate.tutorial.domain.Event; -
public
class EventManager { -
publicstatic void main(String[] args) { -
newEventManager mgr = EventManager(); -
"Mymgr.createAndStoreEvent( Event" ,new Date()); -
HibernateUtil.getSessionFactory().close(); -
} -
privatevoid createAndStoreEvent(String title, Date theDate) { -
Session session = HibernateUtil.getSessionFactory().getCurrentSession(); -
session.beginTransaction(); -
//建立一个Event对象并进行赋值 -
newEvent theEvent = Event(); -
theEvent.setTitle(title); -
theEvent.setDate(theDate); -
//将该对象写入数据库 -
session.save(theEvent); -
session.getTransaction().commit(); -
} - }

浙公网安备 33010602011771号