代碼分層之模擬servlet調用dao


一:代碼分層

com.guangming.dao 存放dao相關的類型 例如 StudentDAOImpl 處理 數據庫的鏈接 存取數據
com.guangming.servlet 存放servlet相關的類 例如:StudentServlet 處理 與瀏覽器交互的類
com.guangming.entity 存放實體類 例如 Student 接受數據庫對象模型
com.guangming.util 存放工具類 例如 DBUtil

如圖:

二:模擬servlet調用dao

步驟: 

  1 .創建一個數據庫表 Student( id name age )

  2 創建數據庫表對應的實體類 (為什么要創建實體類?作用:以后數據庫表中的數據 提取到 java中的時候 用 對象來存儲)

  3 創建DAO

    A 組成 兩部分: 接口 ( 聲明 )和 實現類
     接口的命名規則例如: IStudentDAO I 代表這是一個接口 Student 對應業務名稱(表名) DAO 后綴 表明當前是一個dao接口
     實現類的命名規則例如: StudentDAOImpl Student 代表業務名稱(表名) DAOImpl 代表dao接口的實現
        為什么需要接口+實現類? 因為 我們需要一個多態的特征。
     ---------------------------------多態----------------------------------------------------------
      什么是多態? 多種狀態
      如何產生多態? 繼承多態 父類的引用 子類的對象 例如 : Animal a = new Dog(); 基本上不用
      接口多態 接口的應用 實現類的對象 例如: IStudentDAO dao = new StudentDAOImpl();
      為什么要使用多態? 程序解耦 解除程序的耦合性
     --------------------------------------------------------------------------------------------------
    B 接口聲明的方法(接口中該寫哪些方法)
    重要:根據業務需求 / CRUD 增刪改查

接口代碼:(聲明方法) 

/**接口命名規則:
 *創建接口IStudent.I代表這是一個接口,Student代表對應業務的名稱(表名),DAO后綴,表明當前是一個DAO接口
 */
public interface IStudentDAO {

    /*1.添加新學生
    * sql語句insert into Student (name,age) values(?,?);
    * @param是學生對象,里面存放着需要添加的學生信息
    * @return的boolean類型,成功返回true,失敗返回false
    * 注意:兩個以上的參數,使用對象傳參。如該例子的Student
    * */
    boolean add(Student s);
    /*2.根據id刪除學生
    * sql語句:delete from Student where id=?;
    * */
    boolean delete(int id);
    /*3.根據id修改學生
    * sql語句:update Student set name=? ,age=? where id=?;
    * */
    boolean update(Student s);
    /*4.根據id查詢學生
    * Map是一個key value的鍵值映射
    * java類型接收:一個返回值類型,返回id name age三個數據
    * 對象接收:Student s=new Student();
    * s.setId();s.setName();s.setAge();
    * 多態:Map map=new HashMap();
    * map.put("id", );map.put("name", );map.put("age", );
    * */
    Map<String ,Object> getStudent(int id);
    /*5.查詢所有的學生*/
    List<Map<String ,Object>> getAllStudent();
}

實現類代碼:(對方法完成實現)


//刪除
    @Override
    public boolean delete(int id) {
        String sql = "delete from student where id = ?";
        return DBUtil.executeUpdate(sql,id);
    }
//修改
    @Override
    public boolean update(Student s) {
        String sql = "update student set name=?,age=? where id = ?";
        return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getId());
    }
//查詢,結果封裝成map(只能查一條)
    @Override
    public Map<String, Object> getStudent(int id) {
        String sql="select * from student where id=?";
        List<Map<String, Object>> list = DBUtil.executeQuery(sql, id);
        System.out.println(list);
        if (list.size()>0){
            return  list.get(0);
        }
        return null;
    }
//查詢,多條map放進list集合中
    @Override
    public List<Map<String, Object>> getAllStudent() {
        String sql="select * from student";
        return DBUtil.executeQuery(sql);
    }
}

  4 接口中 聲明 五個方法 (一個方法:返回值 參數 試想一下 這個業務的sql )
   
 A 添加新學生
    B 根據id刪除學生
    C 根據id修改學生
    D 根據id查詢學生
    E 查詢所有學生
  5 對方法完成實現
  6 測試代碼

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM