要开发Hibernate应用程序,首先需要到Hibernate官方网站http://www.hibernate.org下载Hibernate,本例子基于Hibernate-3.2.5,解压缩从Hibernate网站下载的Hibernate发布包,并把/lib目录下所有需要的库文件拷到我们新建开发目录下的/lib目录下。(包括hibernate3.jar)
接下来我们创建一个类,用来代表那些我们希望储存在数据库里的数据,本例中用到的User类如下:
package org.hibernate.domain; import java.util.Date; /** * 实体类 */ public class User { private int id; private String name; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", birthday=" + birthday + "]"; } }
为了通过反射机制(Reflection)来实例化这个类的对象,我们需要提供一个无参的构造器(no-argument constructor)。 其实User把这个无参的构造器省略了。如果User类有其他有参数的构造器,则无参的构造器必须提供。
映射文件:
Hibernate需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是Hibernate映射文件发挥作用的地方。映射文件告诉Hibernate它,应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。配置文件有XML(hibernate.cfg.xml)和properties(hibernate.properties)两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下有示例配置文件。可以在配置文件指定:数据库的URL、用户名、密码、JDBC驱动类、方言等。启动时Hibernate会在CLASSPATH里找这个配置文件。在hibernate-mapping标签(tag)之间, 含有一个class元素。所有的持久化实体类(再次声明,或许接下来会有依赖类,就是那些次要的实体)都需要一个这样的映射,来把类对象映射到SQL数据库里的表。 本例中的User类对应的配置文件如下:
User.hbm.xml:
<?xml version="1.0"?> <!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.domain"> <class name="User" table="user"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <property name="birthday" /> </class> </hibernate-mapping>
应该把这个映射文件保存为User.hbm.xml,且就在User类的源文件目录下。映射文件可随意地命名,但hbm.xml的后缀已成为Hibernate开发者社区的约定。
有了持久化类和它的映射文件,现在我们需要Hibernate了,Hibernate配置文件如下:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory name="foo"> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///hibernate</property> <!-- 用户名与密码根据实际情况填写 --> <property name="connection.username">root</property> <property name="connection.password">mysql</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hbm2ddl.auto">create</property> <property name="show_sql">true</property> <mapping resource="org/hibernate/domain/User.hbm.xml" /> </session-factory> </hibernate-configuration>
Hibernate基于配置文件的,所以我们下面需要调用Hibernate的api编写一个工具类来对前面定义的User类进行操作,工具类如下:
package org.hibernate.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /** * 工具类 */ public class HibernateUitl { private static SessionFactory sessionFactory; private HibernateUitl() { } static { /* * 读取默认的配置文件(hibernate.properties或者hibernate.cfg.xml) * 来创建并初始化一个Configuration类的实例 */ Configuration cfg = new Configuration(); cfg.configure(); sessionFactory = cfg.buildSessionFactory(); /* * sessionFactory = Configuration.class.newInstance().configure() * .buildSessionFactory(); */ } public static SessionFactory getSessionFactory() { return sessionFactory; } public static Session getSession() { return sessionFactory.openSession(); } }
接下来编写实体对象User的接口类:
package org.hibernate.dao; import org.hibernate.domain.User; public interface UserDao { public void saveUser(User user); public User findUserByNameByCriteria(String name); public User findUserByNameByHQL(String name); public User findUserById(int id); public void updateUser(User user); public void remove(User user); }
实体接口的实现类:
package org.hibernate.dao.imp; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import org.hibernate.dao.UserDao; import org.hibernate.domain.User; import org.hibernate.util.HibernateUitl; /*UserDao实现类*/ public class UserDaoHibernateImpl implements UserDao { /* 按id号查找用户 */ public User findUserById(int id) { Session session = null; try { session = HibernateUitl.getSession(); User user = (User) session.get(User.class, id); return user; } finally { if (session != null) session.close(); } } /* 按名字查找用户Criteria方式 */ public User findUserByNameByCriteria(String name) { Session session = null; try { session = HibernateUitl.getSession(); Criteria c = session.createCriteria(User.class); c.add(Restrictions.eq("name", name)); User user = (User) c.uniqueResult(); return user; } finally { if (session != null) session.close(); } } /* 按名字查找用户HQL方式 */ public User findUserByNameByHQL(String name) { Session session = null; try { session = HibernateUitl.getSession(); String hql = "from User as user where user.name=:name"; Query q = session.createQuery(hql); /* 使用别名方式 */ q.setString("name", name); User user = (User) q.uniqueResult(); return user; } finally { if (session != null) session.close(); } } /* 删除用户 */ public void remove(User user) { Session session = null; Transaction tx = null; try { session = HibernateUitl.getSession(); tx = session.beginTransaction(); session.delete(user); tx.commit(); } finally { if (session != null) session.close(); } } /* 保存用户 */ public void saveUser(User user) { Session session = null; Transaction tx = null; try { session = HibernateUitl.getSession(); tx = session.beginTransaction(); session.save(user); tx.commit(); } finally { if (session != null) session.close(); } } /* 更新用户 */ public void updateUser(User user) { Session session = null; Transaction tx = null; try { session = HibernateUitl.getSession(); tx = session.beginTransaction(); session.update(user); tx.commit(); } finally { if (session != null) session.close(); } } }
接下来我们就可以对刚才编写的对象的实现类进行测试,测试类如下:
package org.hibernate.test; import java.util.Date; import org.hibernate.dao.UserDao; import org.hibernate.dao.imp.UserDaoHibernateImpl; import org.hibernate.domain.User; public class TestHibernate { public static void main(String[] args) { UserDao userDao = new UserDaoHibernateImpl(); System.out.println("**********插入用户操作**********"); User user = new User(); user.setName("user"); user.setBirthday(new Date()); userDao.saveUser(user); System.out.println("保存后的用户信息:" + user); System.out.println(); System.out.println("**********查询用户操作**********"); user = userDao.findUserByNameByCriteria("user"); // user = userDao.findUserByNameByHQL("user"); System.out.println("依据名字查询的用户信息:" + user); System.out.println(); System.out.println("**********更新用户操作**********"); user.setName("new user"); userDao.updateUser(user); System.out.println("更新名字后的用户信息:" + user); System.out.println(); System.out.println("**********删除用户操作**********"); userDao.remove(user); } }
测试后的结果打印在控制台的信息如下:
工程的目录结构如下:
相关推荐
【hibernate_HelloWorld】项目是一个入门级的教程,旨在帮助初学者了解并实践Hibernate框架的基本用法。Hibernate是一个强大的Java对象关系映射(ORM)框架,它简化了数据库与Java应用程序之间的交互,使开发者可以...
Hibernate教程01_Hibernate的HelloWorld及基本配置 http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
《Hibernate HelloWorld:初识持久化框架的奥秘》 Hibernate,作为Java领域中的一款主流对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式来处理数据库,而无需直接编写SQL语句,...
在`hibernate4_HelloWorld`示例中,你可能找到了类似的代码片段,它们演示了上述的CRUD操作。运行这个示例,你可以看到Hibernate如何自动化处理与数据库的交互,使得代码更加简洁和易读。 通过以上步骤,你已经成功...
【标题】"一个简单的hibernate helloworld"指的是在Java编程环境中使用Hibernate框架进行的初次实践,这个项目是为了帮助开发者快速理解并上手Hibernate。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发...
**标题:“Hibernate的HelloWorld版”** 在Java世界中,Hibernate是一个非常著名的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以用Java对象来处理数据,而无需直接编写SQL语句。"Hibernate的Hello...
这个简单的HelloWorld实例展示了Spring MVC和Hibernate的集成,以及如何进行基本的数据验证。 通过这个实例,你可以了解到如何将Spring MVC用于处理HTTP请求,使用Hibernate进行数据库操作,以及如何结合Spring的...
版本差异太难搞了,找半天才找到错误,主要是包冲突 NoSuchMethodError: org.jboss....NoClassDefFoundError: org/hibernate/cache/spi/RegionFactory org.hibernate.cache.spi.RegionFactory 记录下来,以备不时
**Hibernate 4.0版HelloWorld** 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用Java对象来处理数据,而无需关心底层SQL语法。本教程将详细介绍如何在...
本篇文章将带你入门Struts2,通过创建一个简单的"HelloWorld"示例来理解其核心概念。 首先,了解Struts2框架的基本组成: 1. **Action类**:这是业务逻辑的入口点,处理用户请求并返回结果。在我们的"HelloWorld...
【标题】"Hibernate_HelloWorld:使用NetBeans和SQL Server的Hibernate 4.2.6"是一个关于在Java开发环境中,利用NetBeans IDE和SQL Server数据库进行Hibernate框架基础应用的项目。这个项目旨在帮助初学者了解如何...
【标题】"Hibernate_01_HelloWorld.rar"是一个压缩包文件,主要涵盖了关于Hibernate框架的基础使用以及如何将其与Oracle数据库进行连接的教程。Hibernate是一个非常流行的Java对象关系映射(ORM)框架,它简化了Java...
**SpringBoot之HelloWorld的Maven项目(Eclipse)** SpringBoot是由Pivotal团队开发的一个框架,旨在简化Spring应用程序的初始搭建以及开发过程。它集成了大量的常用库,如数据访问、安全、Web等,使得开发者可以...
在"SpringMVC入门很简单之HelloWorld"这个主题中,我们将探讨如何设置一个基本的SpringMVC项目并实现简单的"Hello, World!"展示。 首先,项目结构至关重要。在给定的文件名称列表中,我们看到了几个关键目录: 1. ...
在"ssh_helloworld"中,你可能会看到实体类、Hibernate的配置文件(hibernate.cfg.xml)以及数据访问对象(DAO)的实现,它们共同构成了数据访问层。 为了将这三个框架整合起来,通常会使用Spring作为“粘合剂”,...
在“Hibernate01-简介和HelloWorld 例子代码”中,通常会包含以下步骤: 1. **配置Hibernate**: 创建`hibernate.cfg.xml`配置文件,指定数据库连接信息,如URL、用户名、密码等。 2. **创建实体类**: 假设我们有一...
在本例中,提供的“Struts2_HelloWorld”压缩包中应该包含了所有必要的库文件,确保项目能够正常运行。 接下来,创建一个简单的Action类。在Struts2中,Action类需要继承自`com.opensymphony.xwork2.ActionSupport`...
在“1、springboot入门案例helloworld与集成hibernate”这个主题中,我们将学习如何创建一个简单的 SpringBoot 项目,并集成 Hibernate 进行数据库操作。Hibernate 是一个强大的 ORM(对象关系映射)框架,它可以将 ...
这个“SSH整合案例 helloworld 很经典”应该是为了帮助初学者理解和掌握如何将这三个框架协同工作,创建一个简单的应用程序。下面将详细解释SSH框架以及它们的整合过程。 1. **Spring框架**:Spring是一个全面的...