国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于Hibernate編程的特點與思考

2019-11-18 12:57:57
字體:
來源:轉載
供稿:網友

  Hibernate的一些弱點:比如對象關系的映射配置過多,控制復雜;事務處理面臨各種兼容問題;HQL語言增加學習成本等。并提出了一些減化和退化方案,具體請看下面的原文,你的建議又如何?

  想了很長時間hibernate的一些弱點

  1.對象與數據庫的映射,要害在于對象關系的映射,但是沒做到很理想,配置過多,控制復雜,另外還會出錯。其實本質在于對象不夠自由。

  2.事務處理。這點上更輕易出問題,相對于各種各樣的事務治理器,要兼容是一個大問題,總歸在各種應用服務器上有很多問題。其本質在于創建了一個自我數據存取小環境,必然面臨各種兼容問題。

  3.HQL語言。建立對象查詢語言,類SQL,但是不同于任何一種SQL,調試環境復雜。本質在于創建了一種語言,增加學習成本。

  減化hibernate,將其退化成一個sql生成器,既可以保留原有的主要功能,又可以兼容各種應用服務器和數據庫服務器,另外還不需要學習HQL語言。

  只需要一系列的功能函數,作一下包裝,再根據不同數據庫生成不同的SQL即可,連數據庫類型都不用指定,因為從Connection中可以獲得數據庫類型屬性。

  假想中的API:

  public Object ResultMapObject(ResultSet rs,String xml) //一行映射單個對象,可以用XML綁定,也可以不用。

  public List SQLMapObjects(Connection conn,String []sqls,String xml)  //將一堆SQL映射成一個對象樹,可以用xml來描述綁定,也可以不用,僅使用ror方式的約定。

  借助JDBC和SQL可以構建整個數據存取層。

  映射單個對象的代碼,將一行記錄映射成單個對象。sql可以是任意的。

    Connection conn=DriverManager.getConnection(url);
    PReparedStatement ps = conn.prepareStatement(sql);
    
    ResultSet rs = ps.executeQuery();
    while(rs.next())
    {
      user=(Users)ResultMapObject(rs);
      //TODO 可以使用user
    }

  映射對象樹。

    /*
    sale_orders銷售訂單表
    sale_order_details銷售訂單細表
    prodUCts商品表
    product_catalogs商品類別表
    從sql中就可以分析出
    id是主鍵
    sale_order_details.sale_order_id===>sale_orders.id
    sale_order_details.product_catalog_id==>product_catalogs.id
    sale_order_details.product_id==>products.id
     */
    String []sqls=new String []{
        " select id, total_sum, memo, state, modify_date, creator, checker from sale_orders ",
        " select id, sale_order_id, product_id, product_name, product_catalog_id, model, product_unit, product_amount, product_price, product_sum, memo from sale_order_details ",
        " select id, name, catalog, model, price, unit, memo, createtime, state, code, productno from products ",
        " select id, name, memo from product_catalogs"
    };
    //不帶XML映射的,但是無法得知一對一還是一對多還是多對多的關系,所以一律建成多對多關系。
    List l=SQLMapObjects(conn,sqls);
    /*
    l的結構:
    sale_orders[]
        -----sale_order_details[](sale_order_details.sale_order_id===>sale_orders.id)
                -----products[](sale_order_details.product_id==>products.id)
                -----product_catalogs[](sale_order_details.product_catalog_id==>product_catalogs.id)                
     */
  /*帶xml */



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凉城县| 洛扎县| 青川县| 深泽县| 偏关县| 玉屏| 武鸣县| 定州市| 新蔡县| 绥德县| 五大连池市| 淄博市| 安丘市| 武清区| 乌审旗| 涡阳县| 镇江市| 静乐县| 长宁县| 昔阳县| 庐江县| 唐海县| 沐川县| 芜湖县| 惠水县| 松江区| 高唐县| 贵南县| 安图县| 永昌县| 泗阳县| 灯塔市| 克什克腾旗| 奉节县| 和田市| 彭泽县| 内江市| 徐闻县| 瑞丽市| 元氏县| 册亨县|