成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

ashe / 1640人閱讀

摘要:我們在最開始使用進行查詢時,是這樣做的?;叵胛覀兪褂玫闹苯訒祷亓藢ο蟆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了。

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

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

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76854.html

相關文章

  • SSM : 環(huán)境搭建

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

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

    摘要:是訪問數(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)一訪問,...

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

    摘要:是訪問數(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...

    galaxy_robot 評論0 收藏0

發(fā)表評論

0條評論

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