個人理解:
項目分層分包適合多人開發合作的,最好一個界面設置一個view,同時注釋一定設置好,按照順序:從前向后進行傳遞參數,從后向前進行傳遞返回值來進行判斷是否真正的執行了sql語句(可以不返回),異常是在Service層處理,若是處理多個sql語句則也在Service層進行整合處理到一起。
一、作用:
當程序規模小的時候,可以一個人全部完成;但程序規模大的時候,一個人難以完成,這時,要采用多人合作的方式來完成程序開發。
多人合作方式將會碰到工作任務分配問題,這時我們會想,每個人負責完成項目的一塊內容就可以了。那么,這一塊塊內容的划分,就需要我們采用分層(分包)的方式完成了。
通過下圖(用戶注冊功能)來講解下,項目中常見的分層(分包)。
1、view層作用: 視圖層,即項目中的界面(輸入、輸出語句)
2、controller層作用: 控制層, 獲取界面上的數據,為界面設置數據; 將要實現的功能交給業務層處理(向后面傳值---對用戶輸入的信息進行封裝,向后台請求)
3、service層作用: 業務層, 功能的實現, 與controller控制層和數據訪問層DAO交互, 將對數據庫的操作交給DAO數據訪問層來處理(通常處理dao層拋出的異常)
4、 dao層作用: 數據訪問層, 用來操作數據庫表的數據(JDBC負責和數據庫打交道,返回的行號 row 不要這層處理)
5、 db數據庫: 這里指MySQL
6、domain 實體包: 存放JavaBean(實體類,一個表一個類,最好創建的實體類與數據庫里的表的名字和數量都一樣)
7、 tools工具包:存放項目中使用到的工具類(比如JDBC里的相同的部分封裝成的工具類)
8、test 測試包: 存放項目功能測試的代碼(main方法)
view層:
package com.oracle.view; import java.util.ArrayList; import java.util.Scanner; import com.oracle.controller.GoodsController; import com.oracle.controller.UserController; import com.oracle.domain.Goods; public class MainView { private GoodsController goodsController=new GoodsController(); private UserController userController=new UserController(); //一級菜單 public void firstshow(){ System.out.println("========歡迎光臨超市========"); System.out.println("1.用戶注冊"); System.out.println("2.用戶登錄"); System.out.println("3.退出"); System.out.println("請輸入您的選擇:"); } //一級菜單功能 public void show1(){ while(true){ firstshow(); Scanner sc=new Scanner(System.in); int choose=sc.nextInt(); //對用戶輸入的選擇進行判斷 switch(choose){ case 1://用戶注冊 break; case 2://用戶登錄 login(); break; case 3: return; default: System.out.println("您的輸入有誤,請重新輸入:"); break; } } } //二級菜單頁面 public void secondshow(){ System.out.println("========歡迎光臨超市======"); System.out.println("1.新增商品"); System.out.println("2.修改商品"); System.out.println("3.刪除商品"); System.out.println("4.查詢所有商品"); System.out.println("5.返回上一級"); System.out.println("請輸入您的選擇:"); } //二級菜單功能頁面 public void show2(){ while(true){ secondshow(); Scanner sc=new Scanner(System.in); int choose=sc.nextInt(); switch(choose){ case 1://新增商品 addGoods(); break; case 2://修改商品 updateGoods(); break; case 3://刪除商品 deleteGoods(); break; case 4://查詢商品 getGoods(); break; case 5: return;//不能用exit default: System.out.println("您的輸入有誤,請重新輸入:"); break; } } } //新增商品頁面 public void addGoods(){ System.out.println("========新增商品頁面========"); System.out.println("請輸入新增商品的名稱:"); Scanner sc=new Scanner(System.in); String gname=sc.next(); System.out.println("請輸入商品價格:"); double price=sc.nextDouble(); System.out.println("請輸入生產日期(XXXX-XX-XX):"); String date=sc.next(); //調用Controller層的add方法新增商品 int row=goodsController.addGoods(gname, price, date); if(row>0){ System.out.println("新增成功!"); }else{ System.out.println("新增失敗!"); } } //修改頁面 public void updateGoods(){ System.out.println("========修改頁面========"); //查詢所有商品 getGoods(); System.out.println("請輸入您要修改的商品編號:"); Scanner sc=new Scanner(System.in); int gid=sc.nextInt(); System.out.println("請輸入您要修改后的商品名稱:"); String gname=sc.next(); System.out.println("請輸入您要修改后的商品價格:"); Double price=sc.nextDouble(); System.out.println("請輸入您要修改后的商品的生產日期(XXXX-XX-XX):"); String gdate=sc.next(); //調用Controller方法修改商品 int row=goodsController.updateGoods(gid, gname, price, gdate); if(row>0){ System.out.println("修改成功!"); }else{ System.out.println("修改失敗!"); } } //查詢頁面 public void getGoods(){ System.out.println("========所有商品頁面========"); System.out.println("商品編號\t商品名稱\t商品價格\t生產日期"); //調用Controller方法getGoods()獲取集合 ArrayList<Goods> arr=goodsController.getGoods(); for(Goods g:arr){ System.out.println(g.getGid()+"\t"+g.getGname()+"\t"+g.getPrice()+"\t"+g.getGdate()); } } //刪除商品 public void deleteGoods(){ System.out.println("========刪除商品頁面========"); getGoods(); System.out.println("請輸入您要刪除的商品編號:"); Scanner sc=new Scanner(System.in); int gid=sc.nextInt(); //調用Controller方法刪除商品 int row=goodsController.deleteGoods(gid); if(row>0){ System.out.println("刪除成功!"); }else{ System.out.println("刪除失敗!"); } } // 用戶登錄 public void login(){ System.out.println("用戶登錄頁面"); System.out.println("請輸入用戶名:"); Scanner sc=new Scanner(System.in); String uname=sc.next(); System.out.println("請輸入密碼:"); String pwd=sc.next(); //調用UserController方法登錄 int count=userController.login(uname,pwd); if(count>0){ System.out.println("登錄成功!"); show2(); }else{ System.out.println("用戶名或密碼錯誤,請重新登錄!"); } } }
controller層:
package com.oracle.controller; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import com.oracle.domain.Goods; import com.oracle.service.GoodsService; public class GoodsController { private GoodsService goodsService=new GoodsService();//掉方法需要創建對象 //新增商品 public int addGoods(String gname,double price,String date){ //封裝Goods對象 Goods goods=new Goods(); goods.setGname(gname); goods.setGdate(date); goods.setPrice(price); //調用Service層的新增方法 int row=goodsService.addGoods(goods); return row; } //查詢所有商品 public ArrayList<Goods> getGoods(){ return goodsService.getGoods(); } //修改商品 public int updateGoods(int gid,String gname,double price,String gdate){ //封裝Goods對象 Goods goods=new Goods(); goods.setGid(gid); goods.setGdate(gdate); goods.setGname(gname); goods.setPrice(price); //調用Service方法修改商品 int row=goodsService.updateGoods(goods); return row; } //刪除商品 public int deleteGoods(int gid){ //封裝Goods對象 Goods goods=new Goods(); goods.setGid(gid); //調用Service方法刪除商品 int row=goodsService.deleteGoods(goods); return row; } }
service層:
package com.oracle.service; import java.sql.SQLException; import java.util.ArrayList; import com.oracle.dao.GoodsDao; import com.oracle.domain.Goods; public class GoodsService { private GoodsDao goodsDao=new GoodsDao();//私有化是只能Service層調用Dao層,不能跨層 //新增商品 public int addGoods(Goods goods){ int row=0; try { row=goodsDao.addGoods(goods); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return row; } //查詢所有商品 public ArrayList<Goods> getGoods(){ ArrayList<Goods> arr=null; try { arr=goodsDao.getGoods(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return arr; } //修改商品 public int updateGoods(Goods goods){ int row=0; try { row=goodsDao.updateGoods(goods); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return row; } //刪除商品 public int deleteGoods(Goods goods){ int row=0; try { row=goodsDao.deleteGoods(goods); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return row; } }
Dao層:
package com.oracle.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import com.oracle.domain.Goods; import com.oracle.tools.JDBCUtils; public class GoodsDao { //新增商品 public int addGoods(Goods goods) throws SQLException{ //獲取連接對象 Connection conn=JDBCUtils.getConn(); //獲取語句執行平台 String sql="insert into goods(gname,price,gdate) values(?,?,?)"; PreparedStatement pst=conn.prepareStatement(sql); //執行sql pst.setString(1, goods.getGname()); pst.setDouble(2, goods.getPrice()); pst.setString(3, goods.getGdate()); int row=pst.executeUpdate(); //釋放資源 JDBCUtils.close(conn, pst); return row; } //查詢所有商品 public ArrayList<Goods> getGoods() throws SQLException{ //獲取連接對象 Connection conn=JDBCUtils.getConn(); //獲取語句連接平台 String sql="select * from goods"; PreparedStatement pst=conn.prepareStatement(sql); //執行sql; ResultSet rs=pst.executeQuery(); //處理結果集 ArrayList<Goods> arr=new ArrayList<Goods>(); while(rs.next()){ Goods goods=new Goods(); goods.setGid(rs.getInt("gid")); goods.setGname(rs.getString("gname")); goods.setPrice(rs.getDouble("price")); goods.setGdate(rs.getString("gdate")); arr.add(goods); } //釋放資源 JDBCUtils.close(conn, pst,rs); return arr; } //修改商品 public int updateGoods(Goods goods) throws SQLException{ //獲取連接對象 Connection conn=JDBCUtils.getConn(); //獲取語句平台 String sql="update goods set gname=?,price=?,gdate=?where gid=?"; PreparedStatement pst=conn.prepareStatement(sql); //執行sql語句 pst.setString(1, goods.getGname()); pst.setDouble(2, goods.getPrice()); pst.setString(3, goods.getGdate()); pst.setInt(4, goods.getGid()); int row=pst.executeUpdate(); //釋放資源 JDBCUtils.close(conn, pst); return row; } //刪除商品 public int deleteGoods(Goods goods) throws SQLException{ //獲取連接對象 Connection conn=JDBCUtils.getConn(); //獲取語句平台 String sql="delete from goods where gid=?"; PreparedStatement pst=conn.prepareStatement(sql); //執行sql語句 pst.setInt(1, goods.getGid()); int row=pst.executeUpdate(); //釋放資源 JDBCUtils.close(conn, pst); return row; } }