网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  编程技术分享:hibernate开发心得     
  文章作者:未知  文章来源:水木森林  
  查看:69次  录入:管理员--2007-11-17  
 

    hibernate核心接口:

    session 、 transaction 、 query 、configuration

    configuration :配置、根启动hibernate 创建sessionfactory对象

    sessionfactory :初始化hibernate创建session对象

    sesssion :负责保存、更新、删除、加载和查询对象

    transaction :管理事务

    query和criteria : 执行数据库查询

    query query = session.createquery("from customer c where c.name =:name");
    query.setparameter("name","tom",hibernate.string);

    sessin 接口方法 :

    save();
    updata();
    delete();
    load();
    find();

    session 通过 sessionfactory.opensession()方法获得;
    控制事务一起transaction
    session session = sessionfactory.opensession();
    transaction tx = null ;
    try{
        tx = session.begiontransaction();
        //逻辑方法
        tx.commit();
    }
    catch(exception e){
          e.printstacktace();
          if(tx != null)tx.rollback();
          thows e ;
    }
    finlly{
          session.close();
    }

    //session.save(customers)执行下列sql语句:

    insert into custmers (id , name , email , password , phone , address , sex , is_married , description ,
      image , birthday , registered_time ) values (1 , 'tom' , '1234', 55556666 ,'shanghai','m' , 0 ,
      'i am very honest' @ ,'1980-05-06' , null);

    //session.find("from customer as c order by c.name asc")执行下列sql语句:
    select * from customers order by name asc ;

    //(customer)session.load(customer.class,customer_id)执行下列sql语句:
    select * from customers where id = 1 ;
    update customers set name = 'tom' ,email ='tom@yahoo.com' ,address = 'beijing' where id = 1;

    //session.delete("from customer as c");执行下列sql语句:
    select * from customers ;
    delete from customers where id = 1;
    或是:session.load(customers.class,id);
          session.delete(customer);
    或是:
          session.load(customers.class,new int(1));

    /////////////////映射对象标识符

    hib中的标识符来建立内存中的对象和数据库表中记录的对应关系,对象的oid和数据库表的主键对应。为了保证oid的唯一性和不可变性,应该让hib给oid赋值。

    /////////////////映射一对多关联关系

    在关系数据库中,只存在外键参照关系,而且总是由many方参照one方。为了消除数据冗余,关系性数据库只能支持多对一或是一对一的单向关联。

    /////////////////操作持久化对象

    session的实体对象状态分为三种:游离对象,持久化对象,临时对象

    临时对象 :不处于session的缓存中,不和任何的session实例关联,数据库中无记录。

           例:order o = new order();通过new刚刚创建的java对象处于临时状态

               session的delete方法使游离态,持久化的对象转变为临时状态

    持久化对象:位于session的缓存中,总是被一个session实例关联,和数据库中记录对应

               session的save方法使临时态变为持久化

               session的load,get方法返回对象总是处于持久化状态

               session的find方法返回list存放的都是持久化对象

               session的update,saveorupdate,lock方法使游离态转换为持久态对象

               一个持久化对象和临时对象有级联保存的时候session在清空缓存的时候会

               把临时对象转化为持久对象

    游离态对象:不位于session的缓存中,不被session关联,数据库中可能有记录

               session的close方法使缓存清空,缓存中的所有持久化对象变为游离态

               session的evict方法从缓存中删除一些持久化对象,不推荐使用应该通过

               查询语句来控制对象的深度。
          

    ////////////////session的保存,更新,删除和查询

    保存:session.save();
      customer c = new coustomer();
      c.setid(new log(9)) ;
      c.setname ("tom");
      session s = sessionf.opensession();
      transaction tx = s.begintransaction();
      s.save(c);
      tx.commit();
      session.close();
 
      如果想改变oid的值应使用save的重载save(customer,new long(9));不推荐使用
 
      save方法是当session清理缓存时才会执行insert语句,如果在save以后又对对象进行   修改session会再执行一次update操作。

      如果save方法已执行不能修改其oid属性。

    更新:session.update();
      customer c = new customer();
      c.setname("tom");
      session s = sessionf.opensession();
      transaction tx = s.begintransaction();
      s.save(c);
      tx.commit();
      session.close();//游离态
      c.setname("too");
      session2.update(c);
      session2.close();//使session2和c关联都会执行一次update修改操作。
 
     session的saveorupdate方法同时包含了save和update方法,如果传入的是临时对象调  用save方法,如果传入是游离态就调用update方法如果传入是持久化,就直接返回。

    查询:session的load,get和find方法

      session的load和get方法根据给定的oid从数据库中加载一个对象,load方法在没有找  到对象时抛出notfoundexception异常,get方法返回null。

      get和load和其他查询方法返回的对象位于session的缓存中,修改了对象的属性后,  session清理缓存时,会根据持久化对象的属性来更新数据库。

      list customer = session.find("from customer as c where c.id = 1")返回关于 customer的一个集合。

    删除:session.delete方法,由于从数据库中删除对象对应的记录,如果出入的是持久化对象session就计划执行一个delete语句。如果出入的参数是游离态对象,先使它成为持久化对象,然后计划执行一个delete语句。session只有在清理缓存的时候才会执行delete语句。只有当调用session的close()方法时才会从session的缓存中删除对象。

      session.delete("from customer as c where c.id > 8") ;

    /////////////session的检索机制 load(),get(),find();

    用来对数据库中检索对象,load()和get()方法按照给定的oid加载一个持久化对象,find方法按照参数指定的hql语句加载一个或多个持久化对象

    customer c = (customer)session.load(customer.class,new loag(1));
    customer c = (customer)session.get(customer.class,new loag(2));
    list customer = session.find("from customer as c where c.id = 1");

 
 
上一篇: 如何在java se中使用hibernate    下一篇: 关于hibernate编程的特点与思考
  相关文档
jdom使用指南 11-17
在j2me中实现基于udp协议通讯程序 11-17
全面认识junit 4的新特征 11-17
j2ee 探险者:持久数据管理 11-17
jsf和struts基于框架的错误控制与封装处理 11-17
用 for/in 在 java 5.0 中增强循环 11-17
把java类变成windows nt服务的3中方法 11-17
新手入门:java数据库接口jdbc驱动设置 11-16
servlets简介 11-17
j2me游戏开发技巧:用setclip分割图片 11-16
ramdom的应用 11-17
jdbc系列教程(三)---语句 11-17
java批注的发明起因及代码应用实例 11-17
scsa exam questions 06/10/02 11-17
java初学者实践教程8—jdk5的拆箱与装箱 11-17
java界面框架swingwt发布0.87版 11-16
xde中模式驱动的设计与开发(三) 11-17
关于eclipse插件开发之定制向导(图) 11-17
the xlet application model 11-17
实战java多线程编程精要之实现线程 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息