溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

通訊錄項(xiàng)目詳解

發(fā)布時(shí)間:2020-07-21 01:33:23 來(lái)源:網(wǎng)絡(luò) 閱讀:1201 作者:d_coding 欄目:數(shù)據(jù)庫(kù)


/**
* @author Mr.Deng
* @since 2016-5-14
* @version 1.0
*使用notepad打開(kāi)方便閱讀
*歡迎糾正錯(cuò)誤,寫(xiě)下自己的見(jiàn)解
*/                                


項(xiàng)目描述:用戶(hù)登錄可以管理對(duì)自己的通信錄信息進(jìn)行管理.

項(xiàng)目依賴(lài)軟件:mysql eclipse.

項(xiàng)目依賴(lài)技術(shù):javaSE , JDBC, swing組件   

                                              
1.架構(gòu):3層架構(gòu)

    1.展示層:1.用戶(hù)只能對(duì)自己和自己的通訊錄進(jìn)行操作(私人權(quán)限)
              2.使用java GUI圖像界面:
                                1.登錄注冊(cè)主頁(yè)面界面
                                2.注冊(cè)頁(yè)面
                                3.功能頁(yè)面:按上中下3層界面布局:
                                                         1.上:歡迎窗口
                                                         2.中:展示用戶(hù)所有通訊錄信息詳情
                                                         3.下:用戶(hù)對(duì)通訊錄操作的按鈕                                                                                
      
    2.業(yè)務(wù)層:1.后臺(tái)人員對(duì)所有用戶(hù)進(jìn)行操作(管理員權(quán)限)
              2.使用java編寫(xiě)后臺(tái)程序:編寫(xiě)接口和實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)類(lèi)通過(guò)調(diào)用持久層編寫(xiě)的接口實(shí)現(xiàn)功能
                 
    3.持久層:1.java程序員通過(guò)編寫(xiě)源代碼實(shí)現(xiàn)各種操作(造物主)
              2.使用JDBC連接數(shù)據(jù)庫(kù)保存數(shù)據(jù)
              3.使用配置文件連接JDBC,假如修改了數(shù)據(jù)庫(kù)。只需要修改配置文件不需要修改源代碼
                           
具體實(shí)現(xiàn):3層架構(gòu)每層通過(guò)接口進(jìn)行連接(依賴(lài)關(guān)系)
            
        1.展示層---業(yè)務(wù)層:1.接口:UsersService,ContactsService
                           2.實(shí)現(xiàn)類(lèi):UsersServiceImpl,ContactsServiceImpl
                        
        作用:展示層獲得的數(shù)據(jù)或操作傳入到業(yè)務(wù)層
              業(yè)務(wù)層流程:1.調(diào)用持久層的接口
                          2.創(chuàng)建接口對(duì)象
                          3.調(diào)用接口對(duì)象身上的方法進(jìn)行數(shù)據(jù)操作
        
        原理:1.接口只定義方法體,沒(méi)有實(shí)現(xiàn)細(xì)節(jié),不能直接創(chuàng)建對(duì)象
              2.ContactDaoImpl類(lèi)是實(shí)現(xiàn)類(lèi),重寫(xiě)了接口的所有方法,并且有實(shí)現(xiàn)細(xì)節(jié)
              3.通過(guò)創(chuàng)建實(shí)現(xiàn)類(lèi)對(duì)象,實(shí)例化接口。接口就可以調(diào)用所有實(shí)現(xiàn)類(lèi)的方法,進(jìn)行操作              
              ContactDao ctd = new ContactDaoImpl();                          
       
       
      2.業(yè)務(wù)層---持久層:1.接口:UsersDao                       
                         2.實(shí)現(xiàn)類(lèi):UsersDaoImpl                        
        作用:對(duì)數(shù)據(jù)進(jìn)行各種操作并放入數(shù)據(jù)庫(kù)中
                        
        原理:1.通訊錄和用戶(hù)對(duì)象隨著方法的調(diào)用而存在,方法調(diào)用結(jié)束對(duì)象消失。
              2.對(duì)象存在于內(nèi)存,通過(guò)JDBC連接數(shù)據(jù)庫(kù)就可以將對(duì)象身上的屬性保存起來(lái)。
                             
      3.持久層---展示層:持久層的所有功能依賴(lài)于展示層獲得的數(shù)據(jù)
                         沒(méi)有數(shù)據(jù)持久層的存在沒(méi)有意義      
                          沒(méi)有持久層的功能實(shí)現(xiàn),展示層也沒(méi)有任何意義
                       
2.包命名規(guī)范:
         1.持久層:1.com.lovo.contacts.bean:實(shí)體包存放所有的實(shí)體對(duì)象,Users,contactsdetail遵循javabean規(guī)范,實(shí)現(xiàn)序列化接口Serializable
                   2.com.lovo.contacts.dao:接口包存放持久層的所有接口    
                   3.com.lovo.contacts.dao.impl:實(shí)現(xiàn)類(lèi)存放所有實(shí)現(xiàn)了dao包接口的類(lèi)
                   4.com.lovo.contacts.util:工具包存放所有持久層代碼需要的工具 如文件,DBUtil
                   
         2.業(yè)務(wù)層:1.com.lovo.contacts.service:業(yè)務(wù)層包存放所有業(yè)務(wù)層接口 UsersService,ContactsService                   
                   2.com.lovo.contacts.service.impl:實(shí)現(xiàn)類(lèi)包存放所有實(shí)現(xiàn)業(yè)務(wù)層包接口的實(shí)現(xiàn)類(lèi)
        
         3.展示層:com.lovo.contacts.gui:圖形界面包存放所有界面類(lèi)
        
         4.javabean規(guī)范:1.公共的類(lèi)
                         2.屬性私有化
                         3.提供公共的get,set方法
                         4.不帶參的構(gòu)造方法
                         5.實(shí)現(xiàn)序列化接口Serializable
                   
總結(jié):1.命名規(guī)范化保證項(xiàng)目的可理解性,方便管理。項(xiàng)目由多個(gè)程序員編寫(xiě)一個(gè)好的命名規(guī)范和結(jié)構(gòu)方便更改實(shí)現(xiàn)同步編寫(xiě)
      2.每個(gè)項(xiàng)目有自己的命名規(guī)范,大體一致
      

                       
3.各方法塊代碼流程:1.獲取數(shù)據(jù)庫(kù)連接:Connection con = DBUtil.getconnection
                    2.編寫(xiě)SQL語(yǔ)句,使用問(wèn)號(hào)防止SQL注入
                       3.創(chuàng)建預(yù)編譯處理對(duì)象:PreparedStatement pstmt = con.prepardStatement(sql);
                      4.更改問(wèn)號(hào)的值
                    5.執(zhí)行sql語(yǔ)句:
                             1.增:1.(sql, PreparedStatement.RETURN_GENERATED_KEYS)保證主鍵自增長(zhǎng),
                                   2.獲取對(duì)象身上的值,設(shè)置到數(shù)據(jù)庫(kù)相應(yīng)的字段中
                                   3.獲取數(shù)據(jù)庫(kù)結(jié)果集,判斷將第一個(gè)對(duì)象的ID設(shè)置成1,多個(gè)對(duì)象實(shí)現(xiàn)自增長(zhǎng)
                                   4.關(guān)閉連接
                                   
                             2.查:1.查詢(xún)所有字段的值放入結(jié)果集,條件id=? and status=1 1表示存在
                                   2.創(chuàng)建新的contactdetail對(duì)象,
                                   3.將結(jié)果集相應(yīng)的值設(shè)置到contactdetail對(duì)象身上
                                   4.關(guān)閉連接
                                   
                             3.刪:1.status字段表示表的狀態(tài),根據(jù)查詢(xún)語(yǔ)句只有status=1時(shí) 用戶(hù)才能查詢(xún)到這張表
                                   2.設(shè)置status=0 用戶(hù)就不能查詢(xún)到這張表。邏輯刪除:數(shù)據(jù)還存在,只是用戶(hù)查詢(xún)不到。物理刪除:數(shù)據(jù)從數(shù)據(jù)庫(kù)消失
                                   3.更新數(shù)據(jù)庫(kù)
                                   4.關(guān)閉連接
                                   
                             4.改:1.用戶(hù)傳入contactdetail對(duì)象,有些字段的值是修改過(guò)的
                                   2.獲取contactdetail對(duì)象身上的值
                                   3.對(duì)數(shù)據(jù)庫(kù)里contactdetail里字段的每一個(gè)字段的值進(jìn)行覆蓋
                                   4.關(guān)閉連接

擴(kuò)展:
    1.自定義異常:1.定義異常類(lèi)繼承Exception的屬性和方法
                  2.提供帶參和不參的構(gòu)造方法    
                    public NameNotFoundException() {}
                    public NameNotFoundException(String message) {super(message);}    
                  3.判斷語(yǔ)句如果用戶(hù)名不正確 throw new NameNotFoundException("用戶(hù)名不存在");
    
    2.try{}finally{}作用:保證try塊內(nèi)發(fā)生異常都能執(zhí)行finally塊里的內(nèi)容                  
                                   
總結(jié):1.對(duì)數(shù)據(jù)庫(kù)里的數(shù)據(jù)進(jìn)行修改后,需要更新。查詢(xún)不需要
      2.先分析功能理清思路,再寫(xiě)流程注釋。最后根據(jù)流程注釋填充代碼。
      3.根據(jù)返回類(lèi)型,參數(shù)列表。靈活編寫(xiě)代碼,萬(wàn)變不離其宗
                                    

4.時(shí)間轉(zhuǎn)換:    
    1.util.date---sql.date:     
        1.獲取Contact對(duì)象身上的時(shí)間毫秒數(shù),如果沒(méi)有獲取系統(tǒng)時(shí)間的毫秒數(shù),三元運(yùn)算符:條件 ?表達(dá)式1(true): 表達(dá)式2(false)
           long time = detail.getCreateTime() == null ? System.currentTimeMillis() : detail.getCreateTime().getTime();
        2. 調(diào)用sql.date類(lèi)的帶參構(gòu)造方法將時(shí)間毫秒數(shù)傳入獲取sql包的時(shí)間    
           new Date(time))
    2.sql.date---util.date:
        1.獲取sql.date的毫秒數(shù),將其作為參數(shù)傳入util.date的構(gòu)造方法類(lèi)
         new java.util.Date(rs.getDate("d.createtime").getTime())

5.屬性對(duì)象:1.sql user表 與 detail表是1對(duì)多關(guān)系, 一個(gè)用戶(hù)可以有多個(gè)通訊錄
          2. 在contactdetail類(lèi)放一個(gè)user對(duì)象,將user類(lèi)與contactdetail類(lèi)連接
             user.getid() = contactdetail.getuser().getid()          
             實(shí)現(xiàn)java user類(lèi)與contactdetail類(lèi) 1對(duì)多關(guān)系
        
 sql.userid----contact.user
       1.創(chuàng)建user對(duì)象
       2.將userid設(shè)置到user對(duì)象身上
       3.分析 user的set方法參數(shù)是user對(duì)象,將創(chuàng)建的對(duì)象傳入user的set方法
       
6.二維數(shù)組:在業(yè)務(wù)層定義方法getAllContact 返回類(lèi)型:Object[][] 參數(shù):useid        
        1.獲取contactdetail對(duì)象的集合
          List<ContactDetail> list = cd.queryContactListByUser(userId);
        2.定義數(shù)組長(zhǎng)度,第一個(gè)字段表示通訊錄實(shí)體的個(gè)數(shù),第2個(gè)字段表示通訊錄的信息個(gè)數(shù)
          Object[][] datas = new Object[list.size()][8];
        3. 循環(huán)數(shù)組 循環(huán)一次第一個(gè)括號(hào)+1,第2個(gè)括號(hào)挨個(gè)放入通訊錄信息
            for (int i = 0; i < list.size(); i++) {
            ContactDetail detail = list.get(i);
            datas[i][0] = detail.getId();
            datas[i][1] = detail.getName();
            。。。。。。。。。。。。。。。。}
        4.返回 datas     
        
eclipse:導(dǎo)入項(xiàng)目:file---import---Existing Projects into Workspace---選擇項(xiàng)目路徑---finish        
        導(dǎo)入圖片:項(xiàng)目名---src---general---file system---文件路徑---選擇圖片--finish---把圖片移動(dòng)到lib包
        生成文檔:項(xiàng)目右鍵---export---java---javadoc---選擇生成路徑---finish
        java架包:項(xiàng)目右鍵---export---java---jar file選擇生成路徑----架包名---finish
        導(dǎo)入架包:復(fù)制架包到項(xiàng)目---build path
        界面插件使用:類(lèi)右鍵---open with---windowbuilder editor---左下角Design按鈕
       

附件:http://down.51cto.com/data/2367904
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI