日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询

發布時間:2024/10/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目中使用Hibernate和JPA對數據庫對象進行實例化,但是生成的方法不支持多條件查詢。而如果針對每一個數據庫對象進行多條件查詢編碼,則會變得很麻煩,而且一旦以后發生表結構發生變化,這些方法可能還需要進行重新編碼。所以考慮編寫一個方法可以對數據庫對象進行多條件查詢,并返回泛型對象,這樣就可以方便使用。具體實現思路如下:

第一步:編寫數據庫查詢參數對象,此部分包含兩個,一個是查詢實體名稱(QueryCondition.java),一個是數據庫查詢條件對象(QueryParameter.java)。

數據庫查詢條件對象(QueryParameter.java)包含三個參數,分別為參數名、參數值、查詢條件表達式

package?com.imstudio.jpa;

public?class?QueryParameter?{

public?enum?QueryOperateType?{

Equal,?CharIn

}

public?String?ParameterName;

public?Object?ParameterValue;

public?QueryOperateType?ParameterType;

public?QueryParameter()?{

}

public?QueryParameter(String?parameterName,?Object?parameterValue,

QueryOperateType?parameterType)?{

this.ParameterName?=?parameterName;

this.ParameterValue?=?parameterValue;

this.ParameterType?=?parameterType;

}

public?String?getParameterName()?{

return?ParameterName;

}

public?QueryOperateType?getParameterType()?{

return?ParameterType;

}

public?Object?getParameterValue()?{

return?ParameterValue;

}

public?void?setParameterName(String?parameterName)?{

ParameterName?=?parameterName;

}

public?void?setParameterType(QueryOperateType?parameterType)?{

this.ParameterType?=?parameterType;

}

public?void?setParameterValue(Object?parameterValue)?{

ParameterValue?=?parameterValue;

}

}

查詢對象實體(QueryCondition.java)包含查詢實體名稱以及查詢參數對象

package?com.imstudio.jpa;

import?java.util.ArrayList;

import?java.util.List;

public?class?QueryCondition?{

public?String?ModelName;

public?List?Parameters?=?new?ArrayList();

public?QueryCondition()?{

}

public?QueryCondition(String?modelName)?{

this.ModelName?=?modelName;

}

public?QueryCondition(String?modelName,?List?parameters)?{

this.ModelName?=?modelName;

this.Parameters?=?parameters;

}

public?void?add(QueryParameter?queryParameter)?{

this.Parameters.add(queryParameter);

}

public?String?getModelName()?{

return?ModelName;

}

public?List?getParameters()?{

return?Parameters;

}

public?void?setModelName(String?modelName)?{

ModelName?=?modelName;

}

public?void?setParameters(List?parameters)?{

Parameters?=?parameters;

}

}

在完成上述兩個實體對象之后就可以具體查詢方法的編寫了,在查詢中使用到一個變量querySymbols,下述編碼是從配置文件web.xml中獲取,這里主要是為了在使用不同數據庫的時候查詢關鍵字標示符的修改。同時為了增加查詢方法的通用性,查詢返回數據這里定義為泛型。

package?com.imstudio.jpa;import?java.util.ArrayList;

import?java.util.List;

import?java.util.logging.Level;

import?javax.persistence.EntityManager;

import?javax.persistence.Query;

import?org.apache.struts2.ServletActionContext;

import?com.imstudio.jpa.QueryParameter.QueryOperateType;

public?class?QueryDataAction?{

public?String?errorCode;

public?QueryDataAction()?{

}

public?QueryDataAction(String?errorCode)?{

this.errorCode?=?errorCode;

}

public?String?getErrorCode()?{

return?errorCode;

};

@SuppressWarnings("unchecked")

public??List?queryByPropertys(QueryCondition?queryCondition)?{

String?querySymbols?=?ServletActionContext.getServletContext()

.getInitParameter("QuerySymbols");

StringBuffer?sqlBuffer?=?new?StringBuffer();

sqlBuffer.append("select?model?\n");

sqlBuffer.append("from?"?+?queryCondition.ModelName?+?"?as?model?\n");

boolean?first?=?true;

for?(int?pi?=?0;?pi?

if?(queryCondition.Parameters.get(pi).getParameterName()?!=?null)?{????????????????????????????????if?(first)?{

sqlBuffer.append("where?");

first?=?false;

}?else?{

sqlBuffer.append("and?");

}

if?(queryCondition.Parameters.get(pi).getParameterType()?==?QueryOperateType.Equal)?{

sqlBuffer.append("model."

+?queryCondition.Parameters.get(pi)

.getParameterName()????????????????????????????+?"?=?"

+?querySymbols????????????????????????????+?queryCondition.Parameters.get(pi)

.getParameterName()?+?"?\n");

}?else?if?(queryCondition.Parameters.get(pi).getParameterType()?==?QueryOperateType.CharIn)?{

sqlBuffer.append("InStr(model."

+?queryCondition.Parameters.get(pi)

.getParameterName()????????????????????????????+?"?,?"

+?querySymbols????????????????????????????+?queryCondition.Parameters.get(pi)

.getParameterName()?+?"?)?>?0?\n");

}

}

}

List?list?=?new?ArrayList();

try?{

EntityManagerHelper.log(sqlBuffer.toString(),?Level.INFO,?null);

EntityManager?emEntityManager?=?EntityManagerHelper

.getEntityManager();

Query?queryObject?=?emEntityManager.createQuery(sqlBuffer

.toString());

for?(int?li?=?0;?li?

queryObject.setParameter(queryCondition.Parameters.get(li)

.getParameterName(),?queryCondition.Parameters.get(li)

.getParameterValue());

}

list?=?queryObject.getResultList();

emEntityManager.close();

}?catch?(RuntimeException?re)?{

errorCode?+=?"CM000006";

EntityManagerHelper.log("queryByPropertys?error",?Level.SEVERE,?re);

throw?re;

}????????return?list;

}

public?void?setErrorCode(String?errorCode)?{

this.errorCode?=?errorCode;

}

}

總結

以上是生活随笔為你收集整理的java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97人妻天天摸天天爽天天 | 午夜视频免费在线观看 | 国产黄色片免费 | www.99av| 欧美一区二区三区四区视频 | 国产在线视视频有精品 | 三级第一页 | 91看片黄色| 春日野结衣av | 免费播放毛片精品视频 | 日本美女操| 久久成人综合 | chinesepron hd videos国产91 | 波多野结衣在线看 | 69亚洲精品 | 国产91精品ai换脸 | 四虎影院一区二区 | 与子敌伦刺激对白播放的优点 | 男人av网站 | 亚洲高清福利 | 婷婷欧美 | 国产99在线 | 亚洲 | 91精品国产自产精品男人的天堂 | 日韩黄色一区二区 | 综合婷婷久久 | 91中文在线观看 | 91视频精品 | 精品免费观看 | 99av视频| 波多野42部无码喷潮在线 | 成人公开免费视频 | 在线成人看片 | 日韩精品一区二区三区视频在线观看 | a√天堂在线 | 蜜桃成人免费视频 | 国产精品无码免费在线观看 | 亚洲成熟毛多妇女av毛片 | 成人毛片18女人 | 99在线看 | 黄黄的网站 | 四虎网址在线 | 亚洲一区二区在线观看视频 | 操夜夜操 | 日本黄色特级片 | 亚洲av最新在线网址 | 色欲无码人妻久久精品 | 狠狠干香蕉 | 91精品国产成人 | 91丨porny丨中文 | 特级做a爱片免费69 少妇第一次交换又紧又爽 亚洲大胆人体 | 日韩无码电影 | 国产片黄色 | 国产调教视频 | 欧美黄网在线观看 | 中国少妇av| 成色视频 | 一区二区在线影院 | 神马影院一区二区 | 欧美精品在线视频观看 | 青青插| 久久潮 | 天天看黄色片 | 欧美精品一级 | 亚洲区欧美 | 激情五月综合色婷婷一区二区 | 91综合久久 | 日本激情小视频 | 日韩精品在线第一页 | 黄色动漫软件 | av在线亚洲天堂 | 欧美自拍在线 | 日韩av一 | 男女午夜激情视频 | 二区在线视频 | 精品人体无码一区二区三区 | 毛茸茸亚洲孕妇孕交片 | 91丝袜呻吟高潮美腿白嫩在线观看 | ⅹxxxxhd亚洲日本hd老师 | 青娱乐在线免费视频 | 日韩va亚洲va欧美va久久 | 国产高清在线 | 亚洲成人av一区 | 日本东京热一区二区三区 | 亚洲视频免费在线 | 爱福利视频一区二区 | 天天操夜夜夜 | 精品精品视频 | 97成人免费视频 | 亚洲 欧美 精品 | 精品毛片在线观看 | 女生被草 | 日日夜夜欧美 | 人人揉人人| 香蕉午夜视频 | 日韩a级片在线观看 | 黄色一节片 | 色欲色香天天天综合网www | 99在线观看 | 成人乱人乱一区二区三区 |