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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-18 13:50:52
字體:
供稿:網(wǎng)友

    Reflection 是 java 程序開發(fā)語言的特征之一,它答應(yīng)運(yùn)行中的程序?qū)ψ陨磉M(jìn)行訪問,并能直接操作程序的內(nèi)部屬性。



    Hibernate是一個(gè)面向Java環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具,基本上,每個(gè)表或者視圖在hibernate里面都可以對應(yīng)一個(gè)類,在此處,我們通過充分的利用這個(gè)類,來實(shí)現(xiàn)動態(tài)組合查詢。



首先我們一起來看看這個(gè)函數(shù)的源代碼:



    /**     * 組合查詢     * @param object 包含查詢條件的對象     * @param firstResult 第一個(gè)返回的位置(從0開始)     * @param maxResults 最大返回?cái)?shù)     * @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;    }



   假設(shè)關(guān)系數(shù)據(jù)庫里面有一個(gè)物理表,其結(jié)構(gòu)如下:



STAFF(員工表) 



列名



類型



Null



說明



Id(pk)



VARCHAR2(20)



NOT NULL



員工工號



name



VARCHAR2(20)



NOT NULL



員工姓名



Dept



INTEGER



NULL



員工所屬部門(p3)



PassWord



VARCHAR2(20)



NOT NULL



密碼



Post

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁都县| 得荣县| 丰都县| 手游| 鞍山市| 巫山县| 东乌珠穆沁旗| 揭东县| 衡水市| 万载县| 台江县| 简阳市| 宽城| 乌拉特中旗| 蓬安县| 壶关县| 额济纳旗| 左云县| 永川市| 额尔古纳市| 措美县| 宜春市| 疏附县| 桃江县| 东乌珠穆沁旗| 兴海县| 康保县| 建昌县| 赣州市| 顺昌县| 遵义县| 潮州市| 扬州市| 宁乡县| 石狮市| 丰镇市| 武穴市| 广元市| 六盘水市| 城固县| 抚宁县|