java 查询功能_java利用反射实现查询功能
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
/*用反射實(shí)現(xiàn)sql語(yǔ)句調(diào)用的思路:
1、先用ResultSetMetaData獲取我們的ResultSet 的Sql語(yǔ)句,通過(guò)Sql語(yǔ)句我們可以聯(lián)想到如何獲取到我們的字段
(字段代表Sql語(yǔ)句的字段,也就是我們表的列名)
2、再獲取sql語(yǔ)句里的字段長(zhǎng)度(字段的個(gè)數(shù))
3、遍歷我們的rs得到rs的結(jié)果集,別忘了定義得到我們封裝的對(duì)象
4、根據(jù)Sql語(yǔ)句里字段的長(zhǎng)度遍歷得到我們的字段
(根據(jù)我們的命名需要,這時(shí)候我們需考慮字段中含有的下劃線,
我們這時(shí)要對(duì)字段含有的下劃線進(jìn)行處理,當(dāng)然這一步我們可以忽略不計(jì))
5、到這一步時(shí),我們需要考慮如何才能獲取到我們封裝的類型以及封裝的字段名稱?當(dāng)然我們封裝的名稱,
與Sql語(yǔ)句的字段名稱是一致的。這個(gè)時(shí)候我們可以根據(jù)字段的名稱來(lái)找到我們封裝的類型是什么。
6、這里我們需要先把字段名首字母大寫(xiě),再用Method 拼接方法調(diào)用我們封裝的set 方法 :(set + name,type)
7、判斷類型,跟數(shù)據(jù)庫(kù)一一對(duì)應(yīng),把取到的值返回即可。
*/
實(shí)現(xiàn)代碼:public static List toReflect(ResultSet rs, Class obj) {
try {
List list = new ArrayList(); //ResultSetMetaData 用于獲取關(guān)于 ResultSet 對(duì)象中列的類型和屬性信息的對(duì)象。
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
T instance = null;
while (rs.next()){
instance = obj.newInstance();
for (int i=1;i
String name = rsmd.getColumnName(i);
name = toName(name).substring(0,1).toUpperCase()+toName(name).substring(1);
Class> type = obj.getDeclaredField(name).getType();
Method method = obj.getMethod("set" + name,type);
if (type.isAssignableFrom(String.class)){
method.invoke(instance,rs.getString(i));
}
}
list.add(instance);
}
return list;
}catch (SQLException e){
e.printStackTrace();
}catch (IllegalAccessException e){
e.printStackTrace();
}catch (InstantiationException e){
e.printStackTrace();
}catch (NoSuchFieldException e){
e.printStackTrace();
}catch (NoSuchMethodException e){
e.printStackTrace();
}catch (InvocationTargetException e){
e.printStackTrace();
}
return null;
}
public static String toCharActer(String string){
//從string第一個(gè)字符開(kāi)始搜索有沒(méi)有“_”
if (string.indexOf("_")>-1){
//有“_”的把字符都轉(zhuǎn)換成小寫(xiě)字母
string = string.toLowerCase();
}
//以“_”來(lái)分割我們的字符
String[] str=string.split("_");
//創(chuàng)建一個(gè)StringBuilder來(lái)拼接我們的字符(StringBuilder線程不安全,但效率快,值得提倡使用)
StringBuilder sb = new StringBuilder();
sb.append(str[0]);//拼接第一個(gè)字符
//判斷是否有多個(gè)字符str.length>1
if (str.length>1){
for (int i=1;i
//把首字母大寫(xiě)
str[i] = str[i].substring(0,1).toUpperCase()+str[i].substring(1);
sb.append(str[i]);
}
}
return sb.toString();
}
總結(jié)
以上是生活随笔為你收集整理的java 查询功能_java利用反射实现查询功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 隐藏文件_java-如何仅列出
- 下一篇: 外汇汇率接口 java_基于JAVA的货