麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

利用Java Reflection(反射)原理,在hibernate里面實現對單表、視圖的動態組合查詢

2019-11-18 13:50:52
字體:
來源:轉載
供稿:網友

    Reflection 是 java 程序開發語言的特征之一,它答應運行中的程序對自身進行訪問,并能直接操作程序的內部屬性。



    Hibernate是一個面向Java環境的對象/關系數據庫映射工具,基本上,每個表或者視圖在hibernate里面都可以對應一個類,在此處,我們通過充分的利用這個類,來實現動態組合查詢。



首先我們一起來看看這個函數的源代碼:



    /**     * 組合查詢     * @param object 包含查詢條件的對象     * @param firstResult 第一個返回的位置(從0開始)     * @param maxResults 最大返回數     * @param orderField 排序的字段     * @param isAbs 是否正序排列     * @return     * @throws HibernateException     */    public List queryList(Object object, int firstResult, int maxResults,String orderField ,boolean isAsc) throws HibernateException,IllegalArgumentException,IllegalaccessException,InvocationTargetException {        List list=null;        Class c = object.getClass();        Method method[] = c.getMethods();        try {            session session = currentSession();            Criteria criteria = session.createCriteria(object.getClass());            for (int i = 0; i < method.length; i++) {                String name = method[i].getName();                if(name.indexOf("getMin")==0){    //大于                    String fieldName = name.substring(6, 7).toLowerCase() + name.substring(7);                    Object retObj = method[i].invoke(object, null);                    if (retObj != null && !retObj.equals(""))                         criteria.add(EXPRession.ge(fieldName, retObj));                    continue;                }                if(name.indexOf("getMax")==0){//小于                    String fieldName = name.substring(6, 7).toLowerCase() + name.substring(7);                    Object retObj = method[i].invoke(object, null);                    if (retObj != null && !retObj.equals(""))                         criteria.add(Expression.le(fieldName, retObj));                    continue;                }                if (name.indexOf("get") != 0 name.indexOf("getClass") == 0)  //假如不是需要的方法,跳出                    continue;                String fieldName = name.substring(3, 4).toLowerCase() + name.substring(4);                String returnType = method[i].getReturnType().toString();                Object retObj = method[i].invoke(object, null);                if (retObj != null) {     //假如為null,沒有賦值,跳出                    if (returnType.indexOf("String") != -1){                        if(retObj.equals(""))     //假如為""的String字段,跳出                           continue;                        criteria.add(Expression.like(fieldName, "%" + retObj + "%"));   //對String的字段,使用like模糊查詢                    }else                        criteria.add(Expression.like(fieldName, retObj));                   }            }            if(isAsc)                criteria.addOrder(Order.asc(orderField));    //升序            else                criteria.addOrder(Order.desc(orderField));    //降序            criteria.setFirstResult(firstResult);            criteria.setMaxResults(maxResults);            list = criteria.list();        } finally {            closeSession();        }



        return list;    }



   假設關系數據庫里面有一個物理表,其結構如下:



STAFF(員工表) 



列名



類型



Null



說明



Id(pk)



VARCHAR2(20)



NOT NULL



員工工號



name



VARCHAR2(20)



NOT NULL



員工姓名



Dept



INTEGER



NULL



員工所屬部門(p3)



PassWord



VARCHAR2(20)



NOT NULL



密碼



Post

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产二区三区四区 | 日本网站一区二区三区 | 欧美日韩在线视频一区二区 | 黄色一级片毛片 | 色播av在线 | 一级黄色av电影 | 亚洲视频综合网 | 久久久久久99 | 一区二区三区日韩 | 日韩一级免费 | 性猛交ⅹxxx乱巴西 在线播放中文 | 久久久一区二区 | www深夜成人| 久草在线视频看看 | 99re66热这里只有精品8 | 在线观看第一区 | 欧美特一级片 | 日本成人一区二区三区 | 九九热精品视频在线免费观看 | 久久免费视频一区二区三区 | 亚洲最新黄色网址 | 国内性爱视频 | 少妇一级淫片免费放4p | 大片毛片 | 999久久国精品免费观看网站 | 久久久精品综合 | 成人毛片在线免费观看 | 伦理三区 | 成人国产精品免费 | www.91成人 | 欧美成人se01短视频在线看 | 伊人久操视频 | 亚洲精品3 | 热99精品视频| 精品久久中文网址 | 大西瓜永久免费av在线 | 爱看久久 | 九九精品久久 | 黄色片网站在线看 | 羞羞色在线观看 | 性明星video另类hd |