国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用java反射寫一個通用的jdbc查詢

ashe / 1604人閱讀

摘要:我們在最開始使用進行查詢時,是這樣做的。回想我們使用的直接會返回了對象。在很多框架中反射使用的很頻繁。反射的應用場景在中,當時實例一個對象的時候,對象點號的時候,你能獲取到對象的方法和屬性。看看怎么修改,能夠使查詢更加健壯。

在后端開發中,我們經常和數據庫打交道。從最開始的使用jdbc進化到框架(mybatis)我們的開發效率提升了很多,但是不知道你沒有思考過框架是如何在日常的開發中幫助我們的?

在我之前的博客中,討論過 從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。 但是我們能夠發現,如果是一個示例代碼,還能給新手簡單介紹下查詢數據庫,但是要是應用到實際的項目中,我們需要不停的重復上面的代碼來適應不同的對象。

這樣的代碼沒有健壯性可言。回想我們使用的mybatis直接會返回了對象。 是怎么做到的呢?

現在思考,我們怎樣修改上面的代碼,能使它可以返回一個對象。

我們的方法首先需要知道,返回具體那個對象,那么我們需要把這個對象信息通過參數傳遞進來,但是我們不知道,傳進來的參數有哪些屬性,怎么辦?
 這個時候,回想一下,之前有沒有聽說過  反射,可以動態獲取對象的信息。 在很多框架中 反射使用的很頻繁。

不知道也不要緊,現在我們簡單看看 反射:

 java反射的主要作用是獲取程序在運行時刻的內部結構。

其實你經常和反射打交道。

反射的應用場景: 
   1. 在ide中,當時實例一個對象的時候, 對象+點號(user. )的時候,你能獲取到對象的方法和屬性。
   2. debugger
   
  現在你只要知道反射能夠獲取到對象的內部信息就 ok了。

看看怎么修改,能夠使 查詢更加健壯。

    public  T 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
渴望與你一起成長進步!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76854.html

相關文章

  • SSM : 環境搭建

    摘要:這個文件包含對對數據訪問進行封裝的所有類。為等提供的一致的聲明式和編程式事務管理。 SSM 環境搭建 目錄創建 pom.xml SSM 逐層配置 一、目錄 1.1 src/main/java 目錄下的包(以下包要放在項目包下,如:com.imooc.項目名) entity: 存放實體類 web: 存放controller,相當于Struts中的action service: 業務...

    MonoLog 評論0 收藏0
  • Java編程基礎33——JDBC

    摘要:是訪問數據庫的標準規范提供了一種基準據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。在將此值發送到數據庫時,驅動程序將它轉換成一個類型值。 1.JDBC概念和數據庫驅動程序 A: JDBC概述 JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,...

    KitorinZero 評論0 收藏0
  • 1、JDBC 2、DBUtils

    摘要:是訪問數據庫的標準規范提供了一種基準據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。在將此值發送到數據庫時,驅動程序將它轉換成一個類型值。例如值不支持中文,如果需要使用非英文字符,將進行轉換。 01JDBC概念和數據庫驅動程序 * A: JDBC概念和數據庫驅動程序 * a: JDBC概述 * JDBC(Java Data...

    galaxy_robot 評論0 收藏0

發表評論

0條評論

ashe

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<