`
nnnnon
  • 浏览: 147663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的hibernate实例(之一)

    博客分类:
  • RORs
阅读更多
一、下载hibernate-3.2 core版本,解压。
二、打开eclipse,建立一个用户库,命名为:hibernate3.2,导入刚解压的hibernate目录下的hibernate3.jar
并\lib目录下的所有jar文件。在Builder path的source and output fold中选择Folder,并默认给出的文件夹名。
在as JRE library use中选择JRE_LIB variable。
三、新建一个java工程。在其属性的Java Build Path中引入刚建立的hibernate3.2用户库并mysql的java驱动(
视你所用的数据库而定,在这我用的是mysql数据库)。
四、在src中建立一个包,设为px.malijun,并在其中建立以下几个Java Class:


User.java
 
  1. package px.malijun;  
  2.   
  3. public class User {  
  4.     private int id;  
  5.     private String name;  
  6.     private String password;  
  7.     private String email;  
  8.     public String getEmail() {  
  9.         return email;  
  10.     }  
  11.     public void setEmail(String email) {  
  12.         this.email = email;  
  13.     }  
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20.     public String getPassword() {  
  21.         return password;  
  22.     }  
  23.     public void setPassword(String password) {  
  24.         this.password = password;  
  25.     }  
  26.     public int getId() {  
  27.         return id;  
  28.     }  
  29.     public void setId(int id) {  
  30.         this.id = id;  
  31.     }  
  32.  
  33. }  


建立相应的xml映射文件:

User.hbm.xml
 
  1. <?xml version="1.0" encoding='utf-8'?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.     <class name="px.malijun.User" table="users">  
  8.     <id name="id">  
  9.      <generator class="identity"/>  
  10.      </id>  
  11.         <property name="name"/>  
  12.         <property name="password"/>  
  13.         <property name="email"/>  
  14.     </class>  
  15. </hibernate-mapping>  


在数据库中建立一个myproject(按你的意思定名)数据库,在其中建立一个users表(向RoR学习):
 
  1. CREATE TABLE `users` (  
  2.   `id` int(11) NOT NULL auto_increment,  
  3.   `namevarchar(255) default NULL,  
  4.   `passwordvarchar(255) default NULL,  
  5.   `email` varchar(255) default NULL,  
  6.   PRIMARY KEY  (`id`)  



注:我是用phpmyadmin对mysql数据库进行管理的,在建立的时候我特意为其选择了utf-8编码。


在src的根目录下(以上的user.hbm.xml映射文件与User.java在同一目录下)建立hibernate的配置文件:

hibernate.cfg.xml
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <!DOCTYPE hibernate-configuration PUBLIC  
  4.   
  5. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  6.   
  7. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  8.   
  9. <hibernate-configuration>  
  10.   
  11.     <session-factory>  
  12.       
  13.         <!-- 显示实际操作数据库时的SQL -->  
  14.           
  15.         <property name="show_sql">true</property>  
  16.           
  17.         <!-- SQL 方言,这边设定的是MySQL -->  
  18.           
  19.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  20.           
  21.         <!-- JDBC 驱动程序 -->  
  22.           
  23.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
  24.           
  25.         <!-- JDBC URL 注意这边我设定的所使用的编码 -->  
  26.           
  27.         <property name="connection.url">jdbc:mysql://localhost:3306/myproject?useUnicode=true&amp;characterEncoding=utf8</property>  
  28.           
  29.         <!-- 数据库使用者 -->  
  30.           
  31.         <property name="connection.username">root</property>  
  32.           
  33.         <!-- 数据库密码 -->  
  34.           
  35.         <property name="connection.password"></property>  
  36.           
  37.         <!-- 以下设置对象与数据库表格映像文件 -->  
  38.         <mapping resource="px/malijun/User.hbm.xml"/>  
  39.       
  40.     </session-factory>  
  41.   
  42. </hibernate-configuration>
  43.   


ok 了,下面我们就进入我们的实际使用阶段了:


由于常规操作都类似,我们建立了一个抽象类:

HibernateBase.java
 
  1. package px.malijun;  
  2.   
  3. import org.hibernate.*;  
  4. import org.hibernate.cfg.*;  
  5. import java.util.*;  
  6. import java.io.IOException;  
  7. import java.io.PrintWriter;  
  8.        
  9.      public abstract class HibernateBase   
  10.      {  
  11.      protected SessionFactory sessionFactory;//会话工厂,用于创建会话  
  12.      protected Session session;//hibernate会话  
  13.      protected Transaction transaction; //hiberante事务  
  14.        
  15.      public HibernateBase()throws HibernateException  
  16.      {  
  17.      this.initHibernate();  
  18.      }  
  19.      // 帮助方法  
  20.      protected void initHibernate()  
  21.      throws HibernateException {  
  22.        
  23.      // 装载配置,构造SessionFactory对象  
  24.      sessionFactory = new Configuration().configure().buildSessionFactory();  
  25.      }  
  26.        
  27.      /** 
  28.      *开始一个hibernate事务 
  29.      */  
  30.      protected void beginTransaction()  
  31.      throws HibernateException {  
  32.        
  33.      session = sessionFactory.openSession();  
  34.      transaction = session.beginTransaction();  
  35.      }  
  36.        
  37.      /** 
  38.      *结束一个hibernate事务。 
  39.      */  
  40.      protected void endTransaction(boolean commit)  
  41.      throws HibernateException {  
  42.        
  43.      if (commit) {  
  44.      transaction.commit();  
  45.      } else {  
  46.      //如果是只读的操作,不需要commit这个事务。  
  47.      transaction.rollback();  
  48.      }  
  49.      session.close();  
  50.      }  
  51. }  


然后建立一个具体针对User操作的一个类:
UserBean.java
 
  1. package px.malijun;  
  2.   
  3. import org.hibernate.*;  
  4. import org.hibernate.cfg.*;  
  5. import java.util.*;  
  6.   
  7. /** 
  8.  * 和course相关的业务逻辑 
  9.  */  
  10. public class UserBean extends HibernateBase {  
  11.     public UserBean() throws HibernateException {  
  12.         super();  
  13.     }  
  14.   
  15.     /** 
  16.      * 增加一个Course 
  17.      */  
  18.     public void addUser(User user) throws HibernateException {  
  19.         beginTransaction();  
  20.         session.save(user);  
  21.         endTransaction(true);  
  22.     }  
  23.   
  24.     /** 
  25.      * 查询系统中所有的Course,返回的是包含有Course持久对象的Iterator。 
  26.      */  
  27.     public Iterator getAllUsers() throws HibernateException {  
  28.         String queryString = "select users from User as user";  
  29.         beginTransaction();  
  30.         Query query = session.createQuery(queryString);  
  31.         Iterator it = query.iterate();  
  32.         return it;  
  33.     }  
  34.   
  35.     /** 
  36.      * 删除给定ID的course 
  37.      */  
  38.     public void deleteUser(String id) throws HibernateException {  
  39.         beginTransaction();  
  40.         User user = (User) session.load(User.class, id);  
  41.         session.delete(user);  
  42.         endTransaction(true);  
  43.     }  
  44.   
  45.     /** 
  46.      * 按course的名字进行模糊查找,返回的是包含有Course持久对象的Iterator。 
  47.      */  
  48.     public Iterator getSomeUser(String name) throws HibernateException {  
  49.         String queryString = "select u from User as u where u.name like :name";  
  50.         beginTransaction();  
  51.         Query query = session.createQuery(queryString);  
  52.         query.setString("name""%" + name + "%");  
  53.         Iterator it = query.iterate();  
  54.         return it;  
  55.     }  
  56. }  

万事大吉,所欠的事情就是调用UerBean中定义的操作进行我们实际所要针对User所做的事情了。我们写一个简单的
测试:

Test.java
 
  1. package px.malijun;  
  2.   
  3. public class Test {  
  4.   
  5.     /** 
  6.      * @param args 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         // TODO Auto-generated method stub  
  10.         UserBean ub=new UserBean();  
  11.         User user = new User();  
  12.         user.setName("你好,世界!");  
  13.         user.setPassword("123456");  
  14.         user.setEmail("ok@ujs.edu.cn");  
  15.         ub.addUser(user);  
  16.   
  17.     }  
  18.   
  19. }  


哦,好简洁的代码。这个测试在执行以后,你查看一下数据库中的users表,你就会发现,我们真的add一个user了,其它的
操作,我们就略了。

下一篇幅我们介绍如何在web环境下使用我们以上编写的程序。
分享到:
评论
3 楼 lin02127 2013-03-10  
UserBean 的deleteUser(String id)
id 的参数类型应该是 id
学习了 基本上看懂了一点 Hibernate的操作 多谢分享
2 楼 luobiao 2012-04-24  
不错,简洁明了!好久没弄了,都忘记了~看一下,又记起来很多了!
1 楼 wyyjava2008 2009-12-14  
,恩,谢谢楼主了。。
很简洁,不错,值得借鉴。。

相关推荐

    Struts2、Spring和Hibernate应用实例.

    现在就将笔者使用Myeclipse工具应用struts2 + spring2 + hibernate3 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过...

    hibernate_5.1包

    hibernate-swarmcache:支持SwarmCache,一个简单而功能强大的分布式缓存机制。它使用IP组播来有效地在缓存的实例之间进行通信。它是快速提高集群式Web应用程序的性能的理想选择。 hibernate-proxool:支持Proxool...

    struts+spring+hibernate架构实例

    本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都 有详细的注释,供入门者学生参考,未经作者允许不得用于...程序只是整个系统中的一个模块,用于和各位程序爱好者交流之用。

    JSP开发之hibernate之单向多对一关联的实例

    JSP开发之hibernate之单向多对一关联的实例 一对多的基础上来测试单向多对一的关联 hibernate多对一的关联关系定义: 和单向一对多不同的是:一对多是在意的一方的一方定义set集合,在映射文件中 :单向多...

    (3.0版本)自己写的struts2+hibernate+spring实例

    我专门申请了一个网盘.所有下载地址在下载下来的这个rar包里面都有详细的介绍和说明. 说一下这个rar里面带的东西.除了源码外带了几篇文档.分别是关于项目中所使用的dwr的配置.table组件的配置说明文档.junit单元...

    Struts+Hibernate+Spring整合分页实例(带排序功能)part1

    这是Java常用框架阶段在为学生答疑时做的一个SSH整合分页实例(第一部分),涉及了SSH整合、日期模糊查询、查询条件绑定、查询结果排序等功能,希望能为大家提供一些思路。 分页是绝大多数MIS系统必需的功能之一,...

    struts+hibernate增删显实例

    我自己做的一个整合struts+hibernate实现的增加,显示,删除的全功能的例子。希望可以给初学者提供一些参考。其中定有不足之处.希望得到您的批评

    Struts+Spring+Hibernate之选课系统

    本文并不想介绍Struts,Spring,Hibernate的原理系统架构等,本文的目的是通过一个较复杂地实例介绍如何整合Struts,Spring,Hibernate,网上很多资料介绍的例子虽然也能达到目的,但功能都比较单一,复杂的例子时会...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    最全Hibernate 参考文档

    4.1. 一个简单的POJO例子 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可...

    hibernate 教程

    创建一个Criteria实例 12.2. 缩小结果集范围 12.3. 对结果排序 12.4. 关联(Associations) 12.5. 动态关联对象获取(Dynamic association fetching) 12.6. 根据示例查询(Example queries) 13...

    Hibernate教程

    5.1. 一个简单的POJO例子 5.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    ssh2整合应用之入门实例

    ssh2整合应用之入门实例 一个struts2+hibernate3+spring2.5的整合

    Hibernate注释大全收藏

    整个层次结构中的所有父类和子类属性都映射到同一个表中,他们的实例通过一个辨别符列(discriminator)来区分。 Plane 是父类。@DiscriminatorColumn 注解定义了辨别符列。对于继承层次结构中的每个类, @...

    Hibernate框架包

    轻量级JavaEE应用的持久层框架,是一个完全的ORM框架。(说完这句话,肯定有很多人懵圈了,下面我来一个个解释) ... 知道了一些大概的名词解释,现在来看看hibernate在一个工程中到底处于一个什么样的地位

    Struts+Hibernate+Spring整合分页实例(带排序功能)part2

    这是Java常用框架阶段在为学生答疑时做的一个SSH整合分页实例(第二部分),涉及了SSH整合、日期模糊查询、查询条件绑定、查询结果排序等功能,希望能为大家提供一些思路。 分页是绝大多数MIS系统必需的功能之一,...

Global site tag (gtag.js) - Google Analytics