摘要:我們在最開始使用進行查詢時,是這樣做的?;叵胛覀兪褂玫闹苯訒祷亓藢ο蟆T诤芏嗫蚣苤蟹瓷涫褂玫暮茴l繁。反射的應用場景在中,當時實例一個對象的時候,對象點號的時候,你能獲取到對象的方法和屬性??纯丛趺葱薷?,能夠使查詢更加健壯。
在后端開發(fā)中,我們經(jīng)常和數(shù)據(jù)庫打交道。從最開始的使用jdbc進化到框架(mybatis)我們的開發(fā)效率提升了很多,但是不知道你沒有思考過框架是如何在日常的開發(fā)中幫助我們的?
在我之前的博客中,討論過 從jdbc進化到mybatis,但是那個只是一個簡單的介紹,今天我們來討論,那篇博客中的第五條: 處理結果。
我們在最開始使用jdbc進行查詢時,是這樣做的。
public class User{ private string name; private string password; private string address; //省略 set和get方法 }
public User query(){ Class.ForName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection con = DriverManager.getConnection("url","username","password"); Statement sta = con.createStatement(); ResultSet rs = sta.executeQuery("sql"); User user = new User(); while(rs.next){ user.setName(rs.getString("name")); user.setPassword(rs.getString("password")); user.setAddress(rs.getString("address")); } con.close(); return user; }
以上,是我們最開始接觸jdbc時,查詢出的user。 但是我們能夠發(fā)現(xiàn),如果是一個示例代碼,還能給新手簡單介紹下查詢數(shù)據(jù)庫,但是要是應用到實際的項目中,我們需要不停的重復上面的代碼來適應不同的對象。
這樣的代碼沒有健壯性可言。回想我們使用的mybatis直接會返回了對象。 是怎么做到的呢?
現(xiàn)在思考,我們怎樣修改上面的代碼,能使它可以返回一個對象。
我們的方法首先需要知道,返回具體那個對象,那么我們需要把這個對象信息通過參數(shù)傳遞進來,但是我們不知道,傳進來的參數(shù)有哪些屬性,怎么辦? 這個時候,回想一下,之前有沒有聽說過 反射,可以動態(tài)獲取對象的信息。 在很多框架中 反射使用的很頻繁。
不知道也不要緊,現(xiàn)在我們簡單看看 反射:
java反射的主要作用是獲取程序在運行時刻的內(nèi)部結構。
其實你經(jīng)常和反射打交道。
反射的應用場景: 1. 在ide中,當時實例一個對象的時候, 對象+點號(user. )的時候,你能獲取到對象的方法和屬性。 2. debugger 現(xiàn)在你只要知道反射能夠獲取到對象的內(nèi)部信息就 ok了。
看看怎么修改,能夠使 查詢更加健壯。
publicT queryTableTwo(String sql, Class c) throws Exception { @SuppressWarnings("unchecked") T result = (T) c.newInstance(); Field[] fields = c.getDeclaredFields(); String driveName = "drivename"; String dbURL = "url"; String userName = "username"; String passWord = "password"; ResultSet rs = null; try { Class.forName(driveName); Connection con = DriverManager.getConnection(dbURL, userName, passWord); Statement sta = con.createStatement(); rs = sta.executeQuery(sql); while (rs.next()) { for (Field f : fields) { String name = f.toString().substring(f.toString().lastIndexOf(".") + 1); // 取出屬性名稱 Field field = c.getDeclaredField(name); field.setAccessible(true); String queryResult = rs.getString(name); field.set(result, queryResult); } } con.close(); } catch (Exception e) { e.printStackTrace(); } return result; }
關注我的公眾號第一時間閱讀有趣的技術故事
掃碼關注:
也可以在微信搜索公眾號即可關注我:codexiulian
渴望與你一起成長進步!
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76854.html
摘要:這個文件包含對對數(shù)據(jù)訪問進行封裝的所有類。為等提供的一致的聲明式和編程式事務管理。 SSM 環(huán)境搭建 目錄創(chuàng)建 pom.xml SSM 逐層配置 一、目錄 1.1 src/main/java 目錄下的包(以下包要放在項目包下,如:com.imooc.項目名) entity: 存放實體類 web: 存放controller,相當于Struts中的action service: 業(yè)務...
摘要:是訪問數(shù)據(jù)庫的標準規(guī)范提供了一種基準據(jù)此可以構建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程序。在將此值發(fā)送到數(shù)據(jù)庫時,驅(qū)動程序?qū)⑺D(zhuǎn)換成一個類型值。 1.JDBC概念和數(shù)據(jù)庫驅(qū)動程序 A: JDBC概述 JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關系數(shù)據(jù)庫提供統(tǒng)一訪問,...
摘要:是訪問數(shù)據(jù)庫的標準規(guī)范提供了一種基準據(jù)此可以構建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程序。在將此值發(fā)送到數(shù)據(jù)庫時,驅(qū)動程序?qū)⑺D(zhuǎn)換成一個類型值。例如值不支持中文,如果需要使用非英文字符,將進行轉(zhuǎn)換。 01JDBC概念和數(shù)據(jù)庫驅(qū)動程序 * A: JDBC概念和數(shù)據(jù)庫驅(qū)動程序 * a: JDBC概述 * JDBC(Java Data...
閱讀 3187·2021-11-23 10:02
閱讀 3146·2021-11-16 11:53
閱讀 3124·2021-09-23 11:21
閱讀 3399·2019-08-30 13:02
閱讀 1660·2019-08-29 16:18
閱讀 1593·2019-08-29 12:55
閱讀 1489·2019-08-26 12:24
閱讀 2120·2019-08-26 10:36