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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

通过Java反射做实体查询

發布時間:2024/1/17 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过Java反射做实体查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在使用hibernate的時候,查詢的時候都會和實體中的一些字段相結合去查詢,當然字段少了,還算是比較簡單,當字段多了,就不那么容易了,所以就自己寫了個方法,根據實體中的字段信息去查詢,廢話不多說上代碼:

/*** 根據實體查詢,將所有的參數封裝到實體中查詢即可,不可查詢為null的信息* @param t* @return* @throws SecurityException* @throws NoSuchMethodException* @throws IllegalArgumentException* @throws IllegalAccessException* @throws InvocationTargetException*/public List<T> queryAll(T t) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{//存放參數List<Object> paraList = new ArrayList<Object>();List<T> list = new ArrayList<T>();StringBuffer sb = new StringBuffer("from ");sb.append(entityClass.getSimpleName()).append(" where 1=1 ");if( t == null){list = find(sb.toString());return list;}//拼接hql語句//獲取類中所有的屬性Field[] fields = t.getClass().getDeclaredFields();for(Field field : fields){//字段名稱String fieldName = field.getName();//方法名稱String methodName = getMethodName(fieldName, "get");//方法Method method = UserInfo.class.getDeclaredMethod(methodName);//方法的返回值類型String methodReturnType = method.getReturnType().getSimpleName();Object obj = null;obj = method.invoke(t);//返回值為空則跳過if( obj == null ){continue;}if ("String".equals(methodReturnType)) {String str = String.valueOf(obj.toString());sb.append(" and ").append(fieldName).append("= ? ");paraList.add(str);} else if ("Date".equals(methodReturnType)) {Date date = (Date)obj;sb.append(" and ").append(fieldName).append("= ? ");paraList.add(date);} else if ("Integer".equals(methodReturnType)|| "int".equals(methodReturnType)) {Integer i = Integer.valueOf(obj.toString());sb.append(" and ").append(fieldName).append("= ? ");paraList.add(i);} else if ("Long".equalsIgnoreCase(methodReturnType)) {Long L = Long.valueOf(obj.toString());sb.append(" and ").append(fieldName).append("= ? ");paraList.add(L);} else if ("Double".equalsIgnoreCase(methodReturnType)) {Double d = Double.valueOf(obj.toString());sb.append(" and ").append(fieldName).append("= ? ");paraList.add(d);} else if ("Boolean".equalsIgnoreCase(methodReturnType)) {Boolean b = Boolean.valueOf(obj.toString());sb.append(" and ").append(fieldName).append("= ? ");paraList.add(b);}}Query query = createQuery(sb.toString(), paraList.toArray());list = query.list();return list;}/*** 或實體中屬性的get或set方法* @param methodName 字段名* @param methodType 方法類型:get或set* @return*/private String getMethodName(String methodName, String methodType){if( methodName == null || "".equals(methodName.trim()) ){return null;}StringBuffer sb = new StringBuffer();sb.append(methodType);sb.append(methodName.substring(0, 1).toUpperCase());sb.append(methodName.substring(1));return sb.toString();}

本人反射學得比較淺顯,希望高手能夠多多指點。

轉載于:https://www.cnblogs.com/tangkai/p/3844920.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的通过Java反射做实体查询的全部內容,希望文章能夠幫你解決所遇到的問題。

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