亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

使用java反射寫(xiě)一個(gè)通用的jdbc查詢

ashe / 1692人閱讀

摘要:我們?cè)谧铋_(kāi)始使用進(jìn)行查詢時(shí),是這樣做的?;叵胛覀兪褂玫闹苯訒?huì)返回了對(duì)象。在很多框架中反射使用的很頻繁。反射的應(yīng)用場(chǎng)景在中,當(dāng)時(shí)實(shí)例一個(gè)對(duì)象的時(shí)候,對(duì)象點(diǎn)號(hào)的時(shí)候,你能獲取到對(duì)象的方法和屬性??纯丛趺葱薷模軌蚴共樵兏咏?。

在后端開(kāi)發(fā)中,我們經(jīng)常和數(shù)據(jù)庫(kù)打交道。從最開(kāi)始的使用jdbc進(jìn)化到框架(mybatis)我們的開(kāi)發(fā)效率提升了很多,但是不知道你沒(méi)有思考過(guò)框架是如何在日常的開(kāi)發(fā)中幫助我們的?

在我之前的博客中,討論過(guò) 從jdbc進(jìn)化到mybatis,但是那個(gè)只是一個(gè)簡(jiǎn)單的介紹,今天我們來(lái)討論,那篇博客中的第五條: 處理結(jié)果。

我們?cè)谧铋_(kāi)始使用jdbc進(jìn)行查詢時(shí),是這樣做的。

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;
    }

以上,是我們最開(kāi)始接觸jdbc時(shí),查詢出的user。 但是我們能夠發(fā)現(xiàn),如果是一個(gè)示例代碼,還能給新手簡(jiǎn)單介紹下查詢數(shù)據(jù)庫(kù),但是要是應(yīng)用到實(shí)際的項(xiàng)目中,我們需要不停的重復(fù)上面的代碼來(lái)適應(yīng)不同的對(duì)象。

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

現(xiàn)在思考,我們?cè)鯓有薷纳厦娴拇a,能使它可以返回一個(gè)對(duì)象。

我們的方法首先需要知道,返回具體那個(gè)對(duì)象,那么我們需要把這個(gè)對(duì)象信息通過(guò)參數(shù)傳遞進(jìn)來(lái),但是我們不知道,傳進(jìn)來(lái)的參數(shù)有哪些屬性,怎么辦?
 這個(gè)時(shí)候,回想一下,之前有沒(méi)有聽(tīng)說(shuō)過(guò)  反射,可以動(dòng)態(tài)獲取對(duì)象的信息。 在很多框架中 反射使用的很頻繁。

不知道也不要緊,現(xiàn)在我們簡(jiǎn)單看看 反射:

 java反射的主要作用是獲取程序在運(yùn)行時(shí)刻的內(nèi)部結(jié)構(gòu)。

其實(shí)你經(jīng)常和反射打交道。

反射的應(yīng)用場(chǎng)景: 
   1. 在ide中,當(dāng)時(shí)實(shí)例一個(gè)對(duì)象的時(shí)候, 對(duì)象+點(diǎn)號(hào)(user. )的時(shí)候,你能獲取到對(duì)象的方法和屬性。
   2. debugger
   
  現(xiàn)在你只要知道反射能夠獲取到對(duì)象的內(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;
}

關(guān)注我的公眾號(hào)第一時(shí)間閱讀有趣的技術(shù)故事
掃碼關(guān)注:

也可以在微信搜索公眾號(hào)即可關(guān)注我:codexiulian
渴望與你一起成長(zhǎng)進(jìn)步!

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/76854.html

相關(guān)文章

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

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

    MonoLog 評(píng)論0 收藏0
  • Java編程基礎(chǔ)33——JDBC

    摘要:是訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)規(guī)范提供了一種基準(zhǔn)據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序。在將此值發(fā)送到數(shù)據(jù)庫(kù)時(shí),驅(qū)動(dòng)程序?qū)⑺D(zhuǎn)換成一個(gè)類型值。 1.JDBC概念和數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 A: JDBC概述 JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),...

    KitorinZero 評(píng)論0 收藏0
  • 1、JDBC 2、DBUtils

    摘要:是訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)規(guī)范提供了一種基準(zhǔn)據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序。在將此值發(fā)送到數(shù)據(jù)庫(kù)時(shí),驅(qū)動(dòng)程序?qū)⑺D(zhuǎn)換成一個(gè)類型值。例如值不支持中文,如果需要使用非英文字符,將進(jìn)行轉(zhuǎn)換。 01JDBC概念和數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 * A: JDBC概念和數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 * a: JDBC概述 * JDBC(Java Data...

    galaxy_robot 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<