自從學了JDBC用多了像一下這種代碼:
ResultSet rs = this.executeQuery(sql, objs); List<xxx> list = new Array<xxx>(); if(rs.next()){ xxx x = new xxx(); x.setxxx(rs.getString("xxx")); x.setsss(rs.getString("sss")); list.add(x); }
這類相似的代碼每天都在用,每天都在copy,相信大家早就已經煩了
今天!Today!Java程序員的福利來了
最近生病在家閑着無聊寫了一個工具類:
通過傳入一個
ResultSet對象和相應的實體類對象。可返回相應的List集合
終於不用Ctrl+c Ctrl+v了!!!!
用到技術:
Java反射機制
泛型類
實現思路:
首先既然是工具類當然要做到 高可用,不然也沒什么意義
既然是通過一個ResultSet對象來返回一個實體集合,是個人都可以想到這個實體類一定是個不確定因素。
ok , 想到 的是泛型類,定義一個虛擬類型T , 傳參進來確切類型后然后通過反射來獲得這個類的一系列信息
然后進入賦值+list.add()操作
我給這個工具類起名叫:DBRsHelp (發現自己命名水准越來越高了 小小自戀一下下())
廢話不多說,上栗子(命名不規范,勿噴):
package cn.news.util; import java.lang.reflect.Field; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import cn.news.dao.BaseDAO; import cn.news.entity.Users; /** * * @author: 房上的貓 * * @time: 下午3:49:32 * * @博客地址: https://www.cnblogs.com/lsy131479/ * */
//泛型類,T:虛擬類型 public class DBRsHelp<T> { public List<T> util(T t, ResultSet rs) throws Exception { // 創建一個對應的空的泛型集合 List<T> list = new ArrayList<T>(); // 反射出類類型(方便后續做操作) Class c = t.getClass(); // 獲得該類所有自己聲明的字段,不問訪問權限.所有。所有。所有 Field[] fs = c.getDeclaredFields(); // 大家熟悉的操作,不用多說 if (rs != null) { while (rs.next()) { // 創建實例 t = (T) c.newInstance(); // 賦值 for (int i = 0; i < fs.length; i++) { /* * fs[i].getName():獲得字段名 * * f:獲得的字段信息 */ Field f = t.getClass().getDeclaredField(fs[i].getName()); // 參數true 可跨越訪問權限進行操作 f.setAccessible(true); /* * f.getType().getName():獲得字段類型的名字 */ // 判斷其類型進行賦值操作 if (f.getType().getName().equals(String.class.getName())) { f.set(t, rs.getString(fs[i].getName())); } else if (f.getType().getName().equals(int.class.getName())) { f.set(t, rs.getInt(fs[i].getName())); } } list.add(t); } } // 返回結果 return list; }
//測試一下下 public static void main(String[] args) throws Exception { DBRsHelp<Users> util = new DBRsHelp<Users>(); Users u = new Users(); String sql = "select * from news_users"; BaseDAO dao = new BaseDAO(); dao.rs = dao.executeQuery(sql); List<Users> util1 = util.util(u, dao.rs); for (Users users : util1) { System.out.println("uname:" + users.getUname()); System.out.println("upwd:" + users.getUpwd()); System.out.println("ustart:" + users.getUstate()); System.out.println("usessionid:" + users.getUsessionid()); System.out.println("================================================"); } } }
成功!!!哈哈哈
寫這個工具類還弄出一個笑話,跟大家分享一下:
因為生病的原因一開始寫的時候 t.getClass(); 硬生生寫成了 toString().getClass()
運行后控制台一直包這個錯:
心里一直想着:是啊老子是沒這個字段啊,而且實體類也沒啊,,,糾結了一天沒出結果,晚上睡了一覺,第二天早上起來拿出來代碼一看
卧槽,我他媽真煞筆。。。
(C) 房上的貓 。 保留所有權利。
https://www.cnblogs.com/lsy131479/
如需轉載,請注明出處!!!