版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1. 三層架構(gòu)是指哪三層界面(視圖)層業(yè)務(wù)層數(shù)據(jù)訪問(wèn)(持久層)2. 為什么使用三層職責(zé)劃分清楚,各司其職,各層配合例如:發(fā)現(xiàn)sql語(yǔ)句寫(xiě)錯(cuò)了,sql語(yǔ)句的定義一定在dao層上層如何將數(shù)據(jù)傳遞給下層例如:數(shù)據(jù)從界面如何傳給業(yè)務(wù)數(shù)據(jù)如何從業(yè)務(wù)傳給dao方法:要將數(shù)據(jù)傳給誰(shuí),就new誰(shuí)的對(duì)象,然后用new出來(lái)的對(duì)象調(diào)用方法,數(shù)據(jù)作為方法參數(shù)傳遞下層如何將數(shù)據(jù)傳遞給上層下層通過(guò)返回值將數(shù)據(jù)傳遞給上層各層中都寫(xiě)什么代碼2.1. 界面層界面層主要職責(zé)是輸入和輸出2.2. 業(yè)務(wù)層是核心層是核心層編寫(xiě)控制業(yè)務(wù)流程的代碼,通常是很多if語(yǔ)句來(lái)控制業(yè)務(wù)流程,例如:業(yè)務(wù):用銀行卡取錢(qián)業(yè)務(wù)流程1:判斷卡是否是銀行卡2
2、:驗(yàn)證卡號(hào)和密碼是否正確3:驗(yàn)證卡是否被凍結(jié)4:判斷余額是否夠用5:是否跨行6:是否跨地區(qū)7:開(kāi)始取錢(qián)數(shù)據(jù)訪問(wèn)層2.2.1. Dao拼寫(xiě)sql語(yǔ)句1. 為sql語(yǔ)句的參數(shù)準(zhǔn)備值發(fā)送sql和值到dbheleprDao程序編寫(xiě)的模板publicintsave(Useruser)throwsExceptionTry拼寫(xiě)sql準(zhǔn)備值調(diào)用dbhelpoer執(zhí)行sqlcatcha(Exceptione)異常處理,將異常拋出FinallyDbheleper.close()2.2.2. dbHelper執(zhí)行sql語(yǔ)句3. 三層示例需求1:實(shí)現(xiàn)添加商品2:商品的列表顯示3.1. 準(zhǔn)備開(kāi)發(fā)環(huán)境6.2.1.數(shù)據(jù)庫(kù)環(huán)
3、境CREATEDATABASEthreelayer;USEthreelayer;CREATETABLEproduct(idINTAUTO_INCREMENTPRIMARYKEYproductNameVARCHAR(30),priceDOUBLE);6.2.2. Java環(huán)境同一個(gè)項(xiàng)目中,每個(gè)開(kāi)發(fā)人員的各個(gè)環(huán)境的版本必須一致1. Jdk的版本:1.8Eclipse的版本:Kepler2. Jar包:a) Mysql數(shù)據(jù)庫(kù)的驅(qū)動(dòng)jarb) Junit的jarJlib色hamcuwt-匸.junit-4.11jar芻mysqI-ccrinector-java-5.1.6-binjar創(chuàng)建java項(xiàng)目
4、項(xiàng)目命名為threelayer1126分包:界面層:業(yè)務(wù)層:數(shù)據(jù)訪問(wèn)層:實(shí)體類6.2.5.準(zhǔn)備DBHelper(其實(shí)你可以拷貝)packageedu.xbmu.threelayer.dao;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQ
5、LException;importjava.util.Properties;*該類的作用是執(zhí)行sql語(yǔ)句*該類必須通用,通用是指對(duì)所有的表的sql語(yǔ)句都能夠執(zhí)行*/publicclassDBHelper/定義屬性privateConnectionconnection=null;privatePreparedStatementstatement=null;privateResultSetrs=null;privatestaticStringURL="jdbc:mysql:/localhost:3306/threelayer"privatestaticStringUSER=&q
6、uot;root"privatestaticStringPASS="root"硬編碼/靜態(tài)塊加載驅(qū)動(dòng),只加載一次statictryClass.forName("com.mysql.jdbc.Driver");catch(ClassNotFoundExceptione)e.printStackTrace();加載數(shù)據(jù)庫(kù)的配置文件statictryFilefile=newFile("c:/perties");FileInputStreaminStream=newFileInputStream(file);/Prope
7、rties是鍵值對(duì)的集合類,父接口是MapPropertiesprop=newProperties();prop.load(inStream);URL=(String)prop.get("url");USER=(String)prop.get("user");PASS=(String)prop.get("pass");catch(IOExceptione)(”數(shù)據(jù)庫(kù)配置文件加載失敗,請(qǐng)停止所有的操作,檢查數(shù)據(jù)庫(kù)配置文件");*初始化連接對(duì)象*/privatevoidinitConnection()tryif(connecti
8、on=null|connection.isClosed()=true)connection=DriverManager.getConnection(URL,USER,PASS);catch(SQLExceptione)e.printStackTrace();sql=insertintouser(username,userpass)values(?,?)/values="admin","123"/*執(zhí)行添加,刪除,修改的語(yǔ)句* paramsql被執(zhí)行的sql語(yǔ)句* paramvaluessql語(yǔ)句中占位符的值* return返回影響的行數(shù)* throwsS
9、QLException*/publicintexecuteUpdate(Stringsql,Object.values)throwsSQLException/創(chuàng)建連接對(duì)象initConnection();/創(chuàng)建執(zhí)行sql語(yǔ)句的對(duì)象statement=connection.prepareStatement(sql);/為sql語(yǔ)句占位符賦值setParameter(values);/執(zhí)行sql語(yǔ)句returnstatement.executeUpdate();publicResultSetexecuteQuery(Stringsql,Object.values)throwsSQLExceptio
10、n/連接數(shù)據(jù)庫(kù)initConnection();/創(chuàng)建執(zhí)行sql語(yǔ)句對(duì)象statement=connection.prepareStatement(sql);/為占位符賦值setParameter(values);rs=statement.executeQuery();*/returnrs;為占位符賦值privatevoidsetParameter(Object.values)throwsSQLExceptionif(values!=null&&values.length>0)for(inti=0;i<values.length;i+)statement.setOb
11、ject(i+1,values");/*/*/關(guān)閉數(shù)據(jù)庫(kù)publicvoidclose()/關(guān)閉庫(kù)if(rs!=null)tryrs.close();catch(SQLExceptione)e.printStackTrace();rs=null;if(statement!=null)trystatement.close();catch(SQLExceptione)e.printStackTrace();if(connection!=null)tryconnection.close();catch(SQLExceptione)e.printStackTrace();6.3.需求1:添加
12、商品6.3.1.開(kāi)發(fā)實(shí)體類3 importo.Serializable;44 pubileclassProductModelimplementsSerializablefprivateintid;privateStrinRprodu匚tNarne;privatedoubleprice;632開(kāi)發(fā)界面層在view包中創(chuàng)建表示界面的類,命名為Productviewprivatestaticvoidsave()1:界面輸入數(shù)據(jù)System.out.println(”請(qǐng)輸入商品名稱”);StringproductName=in.next();System.out.println(”請(qǐng)輸入商品價(jià)格”);
13、doubleprice=in.nextDouble();2:對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證if(price<0)System.out.println(”商品價(jià)格不允許小于0");System.out.println(”商品添加失敗”);return;II表示該方法停止運(yùn)行,返回到調(diào)用者II3:將數(shù)據(jù)封裝到實(shí)體對(duì)象中ProductModelproductModel=newProductModel();productModel.setProductName(productName);productModel.setPrice(price);II4:將數(shù)據(jù)傳遞給業(yè)務(wù)層Productservicepr
14、oductservice=newProductService();inti=0;tryi=productService.save(productModel);"保存商品出錯(cuò)"+e);"商品添加成功”);"商品添加失敗”);catch(Exceptione)System.out.println(II5:顯示業(yè)務(wù)返回的結(jié)果if(i>0)System.out.println(elseSystem.out.println(6.3.3.開(kāi)發(fā)業(yè)務(wù)層publicclassProductServicenewProductDao();privateProductDa
15、oproductDaoII定義添加商品業(yè)務(wù)的方法publicintsave(ProductModelproductModel)throwsExceptionII保存商品沒(méi)有業(yè)務(wù)流程,因此直接使用dao調(diào)用了save方法returnproductDao.save(productModel);6.3.4. 開(kāi)發(fā)dao層publicclassProductDaoprivateDBHelperhelper=newDBHelper();/添加商品的daopublicintsave(ProductModelproductModel)throwsExceptionintcount=0;try1:拼寫(xiě)sqlS
16、tringsql="INSERTINTOproduct(productName,price)VALUES(?,?)"2:準(zhǔn)備值Objectvalues=newObjectproductModel.getProductName(),productModel.getPrice();3:調(diào)用dbhelper執(zhí)行count=helper.executeUpdate(sql,values);catch(Exceptionex)ex.printStackTrace();throwex;finallyhelper.close();returncount;6.3.5.單元測(cè)試publicc
17、lassProductTestProductServiceproductService=null;BeforepublicvoidtearDown()productService=newProductService();TestpublicvoidtestSave()throwsExceptionProductModelproductModel=newProductModel();productModel.setProductName("農(nóng)夫”);productModel.setPrice(3);inti=productservice.save(productModel);Asser
18、t.assertEquals(1,i);需求2:查看所有的商品6.4.1. 開(kāi)發(fā)daopublicList<ProductModel>findAll()throwsExceptionList<ProductModel>list=newArrayList<ProductModel>();try1:拼寫(xiě)sqlStringsql="select*fromproduct"2:準(zhǔn)備值3:執(zhí)行ResultSetrs=helper.executeQuery(sql);while(rs.next()ProductModelproductModel=new
19、ProductModel();productModel.setld(rs.getlnt("id");productModel.setProductName(rs.getString("productName");productModel.setPrice(rs.getDouble("price");list.add(productModel);catch(Exceptione)e.printStackTrace();throwe;finallyhelper.close();returnlist;642開(kāi)發(fā)servicepublicList<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《照明配電與控制》課件
- 培訓(xùn)離職違約合同范例
- 買賣聯(lián)營(yíng)協(xié)議合同模板
- 勞動(dòng)合同模板 河南
- 與保潔員簽勞動(dòng)合同模板
- 公司聘書(shū)合同模板
- 企業(yè)委托核酸檢測(cè)合同范例
- 藝術(shù)創(chuàng)作之實(shí)習(xí)篇
- 山林承包合同范例
- 建筑鋁范例租賃合同范例
- OSA患者圍術(shù)期管理的專家共識(shí)
- 第8課認(rèn)識(shí)tcp-ip 課件 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)七年級(jí)上冊(cè)
- 中等職業(yè)學(xué)校教育特色化專業(yè)建設(shè)方案(機(jī)電技術(shù)應(yīng)用專業(yè))
- 河北省滄衡八校聯(lián)盟2023-2024學(xué)年高二上學(xué)期11月期中數(shù)學(xué)試題
- 公文格式(政府發(fā)文與政府發(fā)文)
- 2023水輪發(fā)電機(jī)組潤(rùn)滑油系統(tǒng)運(yùn)行維護(hù)導(dǎo)則
- 食品化學(xué)課件之碳水化合物
- 《財(cái)務(wù)管理》課程教學(xué)成果創(chuàng)新報(bào)告
- 鉆井隊(duì)設(shè)備管理年終工作總結(jié)范文
- 工程項(xiàng)目培訓(xùn)制度
- 人工智能無(wú)人駕駛ppt
評(píng)論
0/150
提交評(píng)論