三層架構(gòu)是指哪三層

上傳人:z**** 文檔編號:69876320 上傳時間:2022-04-06 格式:DOC 頁數(shù):8 大?。?9KB
收藏 版權(quán)申訴 舉報 下載
三層架構(gòu)是指哪三層_第1頁
第1頁 / 共8頁
三層架構(gòu)是指哪三層_第2頁
第2頁 / 共8頁
三層架構(gòu)是指哪三層_第3頁
第3頁 / 共8頁

本資源只提供3頁預(yù)覽,全部文檔請下載后查看!喜歡就下載吧,查找使用更方便

15 積分

下載資源

資源描述:

《三層架構(gòu)是指哪三層》由會員分享,可在線閱讀,更多相關(guān)《三層架構(gòu)是指哪三層(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、1. 三層架構(gòu)是指哪三層界面(視圖)層業(yè)務(wù)層數(shù)據(jù)訪問(持久層) 2. 為什么使用三層職責(zé)劃分清楚,各司其職,各層配合 例如:發(fā)現(xiàn)sql語句寫錯了,sql語句的定義一定在dao層上層如何將數(shù)據(jù)傳遞給下層 例如:數(shù)據(jù)從界面如何傳給業(yè)務(wù)數(shù)據(jù)如何從業(yè)務(wù)傳給dao 方法:要將數(shù)據(jù)傳給誰,就new誰的對象,然后用new出來的對象調(diào)用方法,數(shù)據(jù)作為方法參數(shù)傳遞下層如何將數(shù)據(jù)傳遞給上層 下層通過返回值將數(shù)據(jù)傳遞給上層各層中都寫什么代碼 2.1. 界面層界面層主要職責(zé)是輸入和輸出 2.2. 業(yè)務(wù)層是核心層 是核心層 編寫控制業(yè)務(wù)流程的代碼,通常是很多if語句來控制業(yè)務(wù)流程,例如: 業(yè)務(wù):

2、用銀行卡取錢業(yè)務(wù)流程 1:判斷卡是否是銀行卡2:驗證卡號和密碼是否正確 3:驗證卡是否被凍結(jié)4:判斷余額是否夠用 5:是否跨行6:是否跨地區(qū) 7:開始取錢數(shù)據(jù)訪問層 2.2.1. Dao拼寫sql語句 1. 為sql語句的參數(shù)準備值發(fā)送sql和值到dbhelepr Dao程序編寫的模板publicintsave(Useruser)throwsException{ Try{拼寫sql準備值調(diào)用dbhelpoer執(zhí)行sql }catcha(Exceptione){異常處理,將異常拋出 }Finally{Dbheleper.close() }} 2.2.2. dbHelper

3、執(zhí)行sql語句 3. 三層示例需求 1:實現(xiàn)添加商品2:商品的列表顯示 3.1. 準備開發(fā)環(huán)境6.2.1.數(shù)據(jù)庫環(huán)境 CREATEDATABASEthreelayer;USEthreelayer; CREATETABLEproduct( idINTAUTO_INCREMENTPRIMARYKEYproductNameVARCHAR(30), priceDOUBLE); 6.2.2. Java環(huán)境同一個項目中,每個開發(fā)人員的各個環(huán)境的版本必須一致 1. Jdk的版本:1.8Eclipse的版本:Kepler 2. Jar包: a) Mysql數(shù)據(jù)庫的驅(qū)動jar b) Ju

4、nit的jarJlib^ 色hamc『uwt-匸 .junit-4.11jar 芻mysqI-ccrinector-java-5.1.6-binjar創(chuàng)建java項目 項目命名為threelayer1126分包 :界面層:業(yè)務(wù)層:數(shù)據(jù)訪問層:實體類6.2.5.準備DBHelper(其實你可以拷貝) packageedu.xbmu.threelayer.dao;importjava.io.File; importjava.io.FileInputStream;importjava.io.IOException; importjava.sql.Connection;importja

5、va.sql.DriverManager; importjava.sql.PreparedStatement;importjava.sql.ResultSet; importjava.sql.SQLException;importjava.util.Properties; *該類的作用是執(zhí)行sql語句 *該類必須通用,通用是指對所有的表的sql語句都能夠執(zhí)行 */publicclassDBHelper{ //定義屬性 privateConnectionconnection=null; privatePreparedStatementstatement=null; privat

6、eResultSetrs=null; privatestaticStringURL="jdbc:mysql://localhost:3306/threelayer"; privatestaticStringUSER="root"; privatestaticStringPASS="root";〃硬編碼 //靜態(tài)塊加載驅(qū)動,只加載一次 static{try{ Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){ e.printStackTrace();} } 〃加載數(shù)據(jù)庫的配置文件stat

7、ic{try{ Filefile=newFile("c:/db.properties");FileInputStreaminStream=newFileInputStream(file); //Properties是鍵值對的集合類,父接口是MapPropertiesprop=newProperties(); prop.load(inStream);URL=(String)prop.get("url"); USER=(String)prop.get("user");PASS=(String)prop.get("pass"); }catch(IOExceptione){ (”數(shù)據(jù)庫配置

8、文件加載失敗,請停止所有的操作,檢查數(shù)據(jù)庫配置文件");} } *初始化連接對象 */ privatevoidinitConnection(){ try{if(connection==null||connection.isClosed()==true){connection=DriverManager.getConnection(URL,USER,PASS);} }catch(SQLExceptione){e.printStackTrace(); } } 〃sql=insertintouser(username,userpass)values(?,?)//values=["a

9、dmin","123"] /** *執(zhí)行添加,刪除,修改的語句 * @paramsql被執(zhí)行的sql語句 * @paramvaluessql語句中占位符的值 * @return返回影響的行數(shù) * @throwsSQLException */ publicintexecuteUpdate(Stringsql,Object...values)throwsSQLException{//創(chuàng)建連接對象 initConnection();//創(chuàng)建執(zhí)行sql語句的對象 statement=connection.prepareStatement(sql);//為sql語句占位符賦值 se

10、tParameter(values);//執(zhí)行sql語句 returnstatement.executeUpdate(); } publicResultSetexecuteQuery(Stringsql,Object...values)throwsSQLException{//連接數(shù)據(jù)庫 initConnection();//創(chuàng)建執(zhí)行sql語句對象 statement=connection.prepareStatement(sql);//為占位符賦值 setParameter(values);rs=statement.executeQuery(); } * */ retur

11、nrs;為占位符賦值 privatevoidsetParameter(Object...values)throwsSQLException{if(values!=null&&values.length>0){ for(inti=0;i

12、ntStackTrace();} rs=null;} if(statement!=null){try{ statement.close();}catch(SQLExceptione){e.printStackTrace();} }if(connection!=null){try{ connection.close();}catch(SQLExceptione){e.printStackTrace(); }} }} 6.3.需求1:添加商品6.3.1.開發(fā)實體類 3 importo.Serializable; 4 4 pubileclassProductModelimple

13、mentsSerializablefprivateintid; privateStrinRprodu匚tNarne;privatedoubleprice; 6?3?2?開發(fā)界面層在view包中創(chuàng)建表示界面的類,命名為Productview privatestaticvoidsave(){ 〃1:界面輸入數(shù)據(jù) System.out.println(”請輸入商品名稱”); StringproductName=in.next(); System.out.println(”請輸入商品價格”); doubleprice=in.nextDouble();〃2:對數(shù)據(jù)進行驗證 if(pri

14、ce<0){System.out.println(”商品價格不允許小于0"); System.out.println(”商品添加失敗”);return;II表示該方法停止運行,返回到調(diào)用者 }II3:將數(shù)據(jù)封裝到實體對象中 ProductModelproductModel=newProductModel();productModel.setProductName(productName);productModel.setPrice(price);II4:將數(shù)據(jù)傳遞給業(yè)務(wù)層 Productserviceproductservice=newProductService();inti=0;

15、 try{i=productService.save(productModel); "保存商品出錯"+e); "商品添加成功”); "商品添加失敗”); }catch(Exceptione){System.out.println(} II5:顯示業(yè)務(wù)返回的結(jié)果if(i>0){System.out.println( }else{ System.out.println(}6.3.3.開發(fā)業(yè)務(wù)層 publicclassProductService{ newProductDao(); privateProductDaoproductDao II定義添加商品業(yè)務(wù)的方法 publi

16、cintsave(ProductModelproductModel)throwsException{II保存商品沒有業(yè)務(wù)流程,因此直接使用dao調(diào)用了save方法 returnproductDao.save(productModel); }} 6.3.4. 開發(fā)dao層publicclassProductDao{ privateDBHelperhelper=newDBHelper(); //添加商品的dao publicintsave(ProductModelproductModel)throwsException{intcount=0; try{〃1:拼寫sql String

17、sql="INSERTINTOproduct(productName,price)VALUES(?,?)";〃2:準備值 Object[]values=newObject[]{productModel.getProductName(),productModel.getPrice()}; 〃3:調(diào)用dbhelper執(zhí)行count=helper.executeUpdate(sql,values); }catch(Exceptionex){ex.printStackTrace(); throwex;}finally{ helper.close();} returncount; }}

18、6.3.5.單元測試publicclassProductTest{ ProductServiceproductService=null; @BeforepublicvoidtearDown(){productService=newProductService(); } @Test publicvoidtestSave()throwsException{ProductModelproductModel=newProductModel(); productModel.setProductName("農(nóng)夫”);productModel.setPrice(3); inti=product

19、service.save(productModel);Assert.assertEquals(1,i); }需求2:查看所有的商品 6.4.1. 開發(fā)daopublicListfindAll()throwsException{ Listlist=newArrayList();try{ 〃1:拼寫sqlStringsql="select*fromproduct"; 〃2:準備值〃3:執(zhí)行 ResultSetrs=helper.executeQuery(sql);while(rs.next()){ P

20、roductModelproductModel=newProductModel();productModel.setld(rs.getlnt("id"));productModel.setProductName(rs.getString("productName")); productModel.setPrice(rs.getDouble("price"));list.add(productModel); }}catch(Exceptione){ e.printStackTrace();throwe; }finally{helper.close(); }returnlist; }6

21、?4?2?開發(fā)servicepublicListfindAII()throwsException{returnproductDao.findAII(); }6?4?3?開發(fā)視圖 privatestaticvoidfindAll(){//格式化貨幣 NumberFormatnf=NumberFormat.getCurrencylnstanee(Locale.CHINA);try{ Productserviceproductservice=newProductService();Listlist=productService.find

22、All(); System. out.println( "編號\t名稱\t價格"); if(list!= null &&list.size()>0){ for (inti =0;i

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!