一个简单的hibernate的实例

本文详细介绍如何使用Hibernate 3.2版本进行数据库操作,包括环境搭建、实体类与映射文件创建、配置文件设置及基本CRUD操作实现。

一、下载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. packagepx.malijun;
  2. publicclassUser{
  3. privateintid;
  4. privateStringname;
  5. privateStringpassword;
  6. privateStringemail;
  7. publicStringgetEmail(){
  8. returnemail;
  9. }
  10. publicvoidsetEmail(Stringemail){
  11. this.email=email;
  12. }
  13. publicStringgetName(){
  14. returnname;
  15. }
  16. publicvoidsetName(Stringname){
  17. this.name=name;
  18. }
  19. publicStringgetPassword(){
  20. returnpassword;
  21. }
  22. publicvoidsetPassword(Stringpassword){
  23. this.password=password;
  24. }
  25. publicintgetId(){
  26. returnid;
  27. }
  28. publicvoidsetId(intid){
  29. this.id=id;
  30. }
  31. }



建立相应的xml映射文件:

User.hbm.xml
  1. <?xmlversion="1.0"encoding='utf-8'?>
  2. <!DOCTYPEhibernate-mappingPUBLIC
  3. "-//Hibernate/HibernateMappingDTD3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <classname="px.malijun.User"table="users">
  7. <idname="id">
  8. <generatorclass="identity"/>
  9. </id>
  10. <propertyname="name"/>
  11. <propertyname="password"/>
  12. <propertyname="email"/>
  13. </class>
  14. </hibernate-mapping>



在数据库中建立一个myproject(按你的意思定名)数据库,在其中建立一个users表(向RoR学习):

  1. CREATETABLE`users`(
  2. `id`int(11)NOTNULLauto_increment,
  3. `name`varchar(255)defaultNULL,
  4. `password`varchar(255)defaultNULL,
  5. `email`varchar(255)defaultNULL,
  6. PRIMARYKEY(`id`)
  7. )



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


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

hibernate.cfg.xml
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <!DOCTYPEhibernate-configurationPUBLIC
  3. "-//Hibernate/HibernateConfigurationDTD3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <!--显示实际操作数据库时的SQL-->
  8. <propertyname="show_sql">true</property>
  9. <!--SQL方言,这边设定的是MySQL-->
  10. <propertyname="dialect">org.hibernate.dialect.MySQLDialect</property>
  11. <!--JDBC驱动程序-->
  12. <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>
  13. <!--JDBCURL 注意这边我设定的所使用的编码 -->
  14. <propertyname="connection.url">jdbc:mysql://localhost:3306/myproject?useUnicode=true&amp;characterEncoding=utf8</property>
  15. <!--数据库使用者-->
  16. <propertyname="connection.username">root</property>
  17. <!--数据库密码-->
  18. <propertyname="connection.password"></property>
  19. <!--以下设置对象与数据库表格映像文件-->
  20. <mappingresource="px/malijun/User.hbm.xml"/>
  21. </session-factory>
  22. </hibernate-configuration>



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


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

HibernateBase.java
  1. packagepx.malijun;
  2. importorg.hibernate.*;
  3. importorg.hibernate.cfg.*;
  4. importjava.util.*;
  5. importjava.io.IOException;
  6. importjava.io.PrintWriter;
  7. publicabstractclassHibernateBase
  8. {
  9. protectedSessionFactorysessionFactory;//会话工厂,用于创建会话
  10. protectedSessionsession;//hibernate会话
  11. protectedTransactiontransaction;//hiberante事务
  12. publicHibernateBase()throwsHibernateException
  13. {
  14. this.initHibernate();
  15. }
  16. //帮助方法
  17. protectedvoidinitHibernate()
  18. throwsHibernateException{
  19. //装载配置,构造SessionFactory对象
  20. sessionFactory=newConfiguration().configure().buildSessionFactory();
  21. }
  22. /**
  23. *开始一个hibernate事务
  24. */
  25. protectedvoidbeginTransaction()
  26. throwsHibernateException{
  27. session=sessionFactory.openSession();
  28. transaction=session.beginTransaction();
  29. }
  30. /**
  31. *结束一个hibernate事务。
  32. */
  33. protectedvoidendTransaction(booleancommit)
  34. throwsHibernateException{
  35. if(commit){
  36. transaction.commit();
  37. }else{
  38. //如果是只读的操作,不需要commit这个事务。
  39. transaction.rollback();
  40. }
  41. session.close();
  42. }
  43. }



然后建立一个具体针对User操作的一个类:

UserBean.java
  1. packagepx.malijun;
  2. importorg.hibernate.*;
  3. importorg.hibernate.cfg.*;
  4. importjava.util.*;
  5. /**
  6. *和course相关的业务逻辑
  7. */
  8. publicclassUserBeanextendsHibernateBase{
  9. publicUserBean()throwsHibernateException{
  10. super();
  11. }
  12. /**
  13. *增加一个Course
  14. */
  15. publicvoidaddUser(Useruser)throwsHibernateException{
  16. beginTransaction();
  17. session.save(user);
  18. endTransaction(true);
  19. }
  20. /**
  21. *查询系统中所有的Course,返回的是包含有Course持久对象的Iterator。
  22. */
  23. publicIteratorgetAllUsers()throwsHibernateException{
  24. StringqueryString="selectusersfromUserasuser";
  25. beginTransaction();
  26. Queryquery=session.createQuery(queryString);
  27. Iteratorit=query.iterate();
  28. returnit;
  29. }
  30. /**
  31. *删除给定ID的course
  32. */
  33. publicvoiddeleteUser(Stringid)throwsHibernateException{
  34. beginTransaction();
  35. Useruser=(User)session.load(User.class,id);
  36. session.delete(user);
  37. endTransaction(true);
  38. }
  39. /**
  40. *按course的名字进行模糊查找,返回的是包含有Course持久对象的Iterator。
  41. */
  42. publicIteratorgetSomeUser(Stringname)throwsHibernateException{
  43. StringqueryString="selectufromUserasuwhereu.namelike:name";
  44. beginTransaction();
  45. Queryquery=session.createQuery(queryString);
  46. query.setString("name","%"+name+"%");
  47. Iteratorit=query.iterate();
  48. returnit;
  49. }
  50. }


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

Test.java
  1. packagepx.malijun;
  2. publicclassTest {
  3. /**
  4. *@paramargs
  5. */
  6. publicstaticvoidmain(String[]args){
  7. //TODOAuto-generatedmethodstub
  8. UserBeanub=newUserBean();
  9. Useruser=newUser();
  10. user.setName("你好,世界!");
  11. user.setPassword("123456");
  12. user.setEmail("ok@ujs.edu.cn");
  13. ub.addUser(user);
  14. }
  15. }


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值