三層架構(gòu)是指哪三層
《三層架構(gòu)是指哪三層》由會(huì)員分享,可在線閱讀,更多相關(guān)《三層架構(gòu)是指哪三層(8頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、1. 三層架構(gòu)是指哪三層界面(視圖)層業(yè)務(wù)層數(shù)據(jù)訪問(wèn)(持久層) 2. 為什么使用三層職責(zé)劃分清楚,各司其職,各層配合 例如:發(fā)現(xiàn)sql語(yǔ)句寫錯(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ù)傳遞給上層各層中都寫什么代碼 2.1. 界面層界面層主要職責(zé)是輸入和輸出 2.2. 業(yè)務(wù)層是核心層 是核心層 編寫控制業(yè)務(wù)流程的代碼,通常是很多if語(yǔ)句來(lái)控制業(yè)務(wù)流程,例如: 業(yè)務(wù):
2、用銀行卡取錢業(yè)務(wù)流程 1:判斷卡是否是銀行卡2:驗(yàn)證卡號(hào)和密碼是否正確 3:驗(yàn)證卡是否被凍結(jié)4:判斷余額是否夠用 5:是否跨行6:是否跨地區(qū) 7:開(kāi)始取錢數(shù)據(jù)訪問(wèn)層 2.2.1. Dao拼寫sql語(yǔ)句 1. 為sql語(yǔ)句的參數(shù)準(zhǔn)備值發(fā)送sql和值到dbhelepr Dao程序編寫的模板publicintsave(Useruser)throwsException{ Try{拼寫sql準(zhǔn)備值調(diào)用dbhelpoer執(zhí)行sql }catcha(Exceptione){異常處理,將異常拋出 }Finally{Dbheleper.close() }} 2.2.2. dbHelper
3、執(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)境 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的版本:Kepler 2. Jar包: a) Mysql數(shù)據(jù)庫(kù)的驅(qū)動(dòng)jar b) Ju
4、nit的jarJlib^ 色hamc『uwt-匸 .junit-4.11jar 芻mysqI-ccrinector-java-5.1.6-binjar創(chuàng)建java項(xiàng)目 項(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;importja
5、va.sql.DriverManager; importjava.sql.PreparedStatement;importjava.sql.ResultSet; importjava.sql.SQLException;importjava.util.Properties; *該類的作用是執(zhí)行sql語(yǔ)句 *該類必須通用,通用是指對(duì)所有的表的sql語(yǔ)句都能夠執(zhí)行 */publicclassDBHelper{ //定義屬性 privateConnectionconnection=null; privatePreparedStatementstatement=null; privat
6、eResultSetrs=null; privatestaticStringURL="jdbc:mysql://localhost:3306/threelayer"; privatestaticStringUSER="root"; privatestaticStringPASS="root";〃硬編碼 //靜態(tài)塊加載驅(qū)動(dòng),只加載一次 static{try{ Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){ e.printStackTrace();} } 〃加載數(shù)據(jù)庫(kù)的配置文件stat
7、ic{try{ Filefile=newFile("c:/db.properties");FileInputStreaminStream=newFileInputStream(file); //Properties是鍵值對(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ù)配置
8、文件加載失敗,請(qǐng)停止所有的操作,檢查數(shù)據(jù)庫(kù)配置文件");} } *初始化連接對(duì)象 */ 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í)行添加,刪除,修改的語(yǔ)句 * @paramsql被執(zhí)行的sql語(yǔ)句 * @paramvaluessql語(yǔ)句中占位符的值 * @return返回影響的行數(shù) * @throwsSQLException */ publicintexecuteUpdate(Stringsql,Object...values)throwsSQLException{//創(chuàng)建連接對(duì)象 initConnection();//創(chuàng)建執(zhí)行sql語(yǔ)句的對(duì)象 statement=connection.prepareStatement(sql);//為sql語(yǔ)句占位符賦值 se
10、tParameter(values);//執(zhí)行sql語(yǔ)句 returnstatement.executeUpdate(); } publicResultSetexecuteQuery(Stringsql,Object...values)throwsSQLException{//連接數(shù)據(jù)庫(kù) initConnection();//創(chuàng)建執(zhí)行sql語(yǔ)句對(duì)象 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.開(kāi)發(fā)實(shí)體類
3 importo.Serializable;
4
4 pubileclassProductModelimple 13、mentsSerializablefprivateintid;
privateStrinRprodu匚tNarne;privatedoubleprice;
6?3?2?開(kāi)發(fā)界面層在view包中創(chuàng)建表示界面的類,命名為Productview
privatestaticvoidsave(){
〃1:界面輸入數(shù)據(jù)
System.out.println(”請(qǐng)輸入商品名稱”);
StringproductName=in.next();
System.out.println(”請(qǐng)輸入商品價(jià)格”);
doubleprice=in.nextDouble();〃2:對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證
if(pri 14、ce<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ù)層
Productserviceproductservice=newProductService();inti=0;
15、
try{i=productService.save(productModel);
"保存商品出錯(cuò)"+e);
"商品添加成功”);
"商品添加失敗”);
}catch(Exceptione){System.out.println(}
II5:顯示業(yè)務(wù)返回的結(jié)果if(i>0){System.out.println(
}else{
System.out.println(}6.3.3.開(kāi)發(fā)業(yè)務(wù)層
publicclassProductService{
newProductDao();
privateProductDaoproductDao
II定義添加商品業(yè)務(wù)的方法
publi 16、cintsave(ProductModelproductModel)throwsException{II保存商品沒(méi)有業(yè)務(wù)流程,因此直接使用dao調(diào)用了save方法
returnproductDao.save(productModel);
}}
6.3.4. 開(kāi)發(fā)dao層publicclassProductDao{
privateDBHelperhelper=newDBHelper();
//添加商品的dao
publicintsave(ProductModelproductModel)throwsException{intcount=0;
try{〃1:拼寫sql
String 17、sql="INSERTINTOproduct(productName,price)VALUES(?,?)";〃2:準(zhǔn)備值
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.單元測(cè)試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. 開(kāi)發(fā)daopublicList 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?開(kāi)發(fā)servicepublicList 22、All();
System.
out.println(
"編號(hào)\t名稱\t價(jià)格");
if(list!=
null
&&list.size()>0){
for
(inti
=0;i
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《晏子使楚》優(yōu)秀課件 (3)
- 科室醫(yī)院年終總結(jié)課件
- 常用邏輯用語(yǔ)章末總結(jié)課件(人教A版選修1-1)免
- 新版PEP四年級(jí)英語(yǔ)上冊(cè)Unit3-My-Friends-B-Let’s-learn完美版-PPT
- 金融科技機(jī)遇
- 抗菌藥物合理使用專家講座
- 阿奇霉素在臨床中的應(yīng)用專家講座
- 納米抗菌蠶絲被介紹
- 男性盆部和會(huì)陰斷層解剖研究
- 部編選擇性必修二經(jīng)濟(jì)與社會(huì)生活-第九課世紀(jì)以來(lái)人類的經(jīng)濟(jì)與生活教學(xué)課件
- 春七年級(jí)數(shù)學(xué)下冊(cè) 82 整式乘法單項(xiàng)式與單項(xiàng)式相乘課件4 (新版)滬科版
- 部編人教版語(yǔ)文七年級(jí)下冊(cè)7.土地的誓言課件
- 手足口病
- 正壓通氣裝置課件
- 課件】食品分析與檢驗(yàn)技術(shù)第二章