對三層架構的優化

三層優化
一、加入接口
 建議面向接口開發:先實現接口->實現類
 --service、dao加入接口
 --接口與實現類的命名規範
    Service層
    接口:interface     起名:IXXxService    所在包名:xxx.service
    實現類:implements  起名:XXxServiceImpl    所在包名:xxx.service.Impl
     Dao層
    接口:interface     起名:IXXxDao       所在包名:xxx.dao
    實現類:implements  起名:XXxDaoImpl    所在包名:xxx.dao.Impl


    使用接口/實現類  :接口 x = new 實現類 ()

二、DBUtil 通用的數據庫幫助類
  幫助類所在包名 :XXxutil

  方法重構:將多個方法的共同代碼提煉出來,單獨寫在一個方法中,而後引入該方法便可
 實例javascript

package org.student.dao;
package org.student.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.student.dao.Impl.StudentDaoImpl;
import org.student.entity.Student;

public interface IStudentDao {    
    //添加學生信息
            public   boolean AddStudent(Student student);
            //根據學號刪除學生信息
            public  boolean DeleteStudent(int sno) ;
            //根據學號修改學生信息:根據sno找到學生,並將學生改成student
            public  boolean UpdateStudent(int sno,Student student);
            //查詢學生是否存在
            public  boolean isExist(int sno) ;
            
            //根據學號查詢學生所有信息
            public  Student Query(int sno);
            //查詢所有學生信息
            public  List<Student> QueryAll() ;
}
package org.student.dao.Impl;
package org.student.dao.Impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.student.dao.IStudentDao;
import org.student.entity.Student;
import org.student.util.DBUtil;


public   class StudentDaoImpl implements IStudentDao{
        
        //添加學生信息
        public  boolean AddStudent(Student student) {
             String sql="insert into student(sno,sname,sage,shobby) values(?,?,?,?)" ;
             Object [] params= {student.getSno(),student.getSname(),student.getSage(),student.getShobby()};
             return  DBUtil.executeUpdate(sql, params);
        }
        //根據學號刪除學生信息
        public  boolean DeleteStudent(int sno) {
        
             String sql="delete from student where sno=?" ;
             Object [] params= {sno};
             return DBUtil.executeUpdate(sql, params);
        }
        //根據學號修改學生信息:根據sno找到學生,並將學生改成student
        public  boolean UpdateStudent(int sno,Student student) {
            
             String sql="update student set sname =?,sage=?,shobby=? where sno =?" ;
             Object [] params= {student.getSname(),student.getSage(),student.getShobby(),sno};
             return  DBUtil.executeUpdate(sql, params);
        }
        //查詢學生是否存在
                public  boolean isExist(int sno) {
                    return Query(sno)==null? false:true;
                }
        //根據學號查詢學生所有信息
        public   Student Query(int sno) {
             Student student= null;
             ResultSet rs = null; 
             try {
                 String sql="select * from student where sno =?" ;
  Object [] params= {sno};
                 rs=DBUtil.executeQuery(sql, params);
if(rs.next()) { int no=rs.getInt("sno"); String name=rs.getString("sname"); int age=rs.getInt("sage"); String hobby=rs.getString("shobby"); student= new Student(no,name,age,hobby); } }catch(SQLException e) { e.printStackTrace(); }catch(Exception e) { e.printStackTrace(); }finally { try { //先開的後關,後開的先關 if(rs!=null)rs.close(); if(DBUtil.pstmt!=null)DBUtil.pstmt.close(); if(DBUtil.connection !=null)DBUtil.connection.close(); }catch(SQLException e) { e.printStackTrace(); }finally { } } return student; } //查詢所有學生信息 public List<Student> QueryAll() { List<Student> students = new ArrayList<>(); Student student= null; ResultSet rs=null; try { String sql="select * from student " ; rs=DBUtil.executeQuery(sql, null); while(rs.next()) { int no=rs.getInt("sno"); String name=rs.getString("sname"); int age=rs.getInt("sage"); String hobby=rs.getString("shobby"); student= new Student(no,name,age,hobby); students.add(student); } }catch(SQLException e) { e.printStackTrace(); }catch(Exception e) { e.printStackTrace(); }finally { try { //先開的後關,後開的先關 if(rs!=null)rs.close(); if(DBUtil.pstmt!=null)DBUtil.pstmt.close(); if(DBUtil.connection !=null)DBUtil.connection.close(); }catch(SQLException e) { e.printStackTrace(); }finally { } } return students; } }
package org.student.entity;
package org.student.entity;

public class Student {
       private int sno;
       private String sname;
       private int sage;
       private String shobby;
       
       @Override
    public String toString() {
        return "Student [sno=" + sno + ", sname=" + sname + ", sage=" + sage + ", shobby=" + shobby + "]";
    }
    public Student() {
           
       }
       public Student( String sname, int sage, String shobby) {
           this.sname = sname;
           this.sage = sage;
           this.shobby = shobby;
       }
    public Student(int sno, String sname, int sage, String shobby) {
        this.sno = sno;
        this.sname = sname;
        this.sage = sage;
        this.shobby = shobby;
    }
    public int getSno() {
        return sno;
    }
    public void setSno(int sno) {
        this.sno = sno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public int getSage() {
        return sage;
    }
    public void setSage(int sage) {
        this.sage = sage;
    }
    public String getShobby() {
        return shobby;
    }
    public void setShobby(String shobby) {
        this.shobby = shobby;
    }
       
}
package org.student.service;
package org.student.service;

import java.util.List;

import org.student.dao.Impl.StudentDaoImpl;
import org.student.entity.Student;

public interface IStudentService {
     public boolean AddStudent(Student student) ;
     //根據學號進行刪除
     public boolean DeleteStudent(int  sno) ;
     //根據學號進行修改
     public boolean UpdateStudent(int sno,Student student) ;
     //根據學號查詢學生
     public Student Query(int sno) ;
     //查詢所有學生
     public List<Student> QueryAll();
}
package org.student.service.Impl;
package org.student.service.Impl;


import org.student.entity.Student;
import org.student.service.IStudentService;

import java.util.List;

import org.student.dao.*;
import org.student.dao.Impl.StudentDaoImpl;
public class StudentServiceImpl implements IStudentService{
    StudentDaoImpl studentdao= new StudentDaoImpl();
      public boolean AddStudent(Student student) {
          boolean flag=false;
          if(!studentdao.isExist(student.getSno())) {
              studentdao.AddStudent(student);
              flag=true;
          }else {
              System.out.println("此人已存在");
          }
         return flag; 
      }
      //根據學號進行刪除
      public boolean DeleteStudent(int  sno) {
          boolean flag=false;
          if(studentdao.isExist(sno)) {
              studentdao.DeleteStudent(sno);
              flag=true;
          }else {
              System.out.println("此人不存在");
          }
         return flag; 
      }
      //根據學號進行修改
      public boolean UpdateStudent(int sno,Student student) {
          boolean flag=false;
          if(studentdao.isExist(sno)) {
              studentdao.UpdateStudent(sno,student);
              flag=true;
          }else {
              System.out.println("此人不存在");
          }
         return flag; 
      }
      //根據學號查詢學生
      public Student Query(int sno) {
          return studentdao.Query(sno);
      }
      //查詢所有學生
      public List<Student> QueryAll(){
          return studentdao.QueryAll();
      }
}
package org.student.servlet;
AddStudentServlet
 
package org.student.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.student.entity.Student;
import org.student.service.*;
import org.student.service.Impl.StudentServiceImpl;


public class AddStudentServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        int no= Integer.parseInt(request.getParameter("sno"));
        String name= request.getParameter("sname");
        int age= Integer.parseInt(request.getParameter("sage"));
        String hobby= request.getParameter("shobby");
        Student student = new Student(no,name,age,hobby);
        //接口 x=new 實現類()
        IStudentService studentservice = new StudentServiceImpl();
        boolean result=studentservice.AddStudent(student);
        //out對象的獲取方法
        //PrintWriter out = response.getWriter();
        //if(result) {
            
        //    out.println("添加成功");
        //}else {
            
        //    out.println("添加失敗");
        //}
        if(!result) {
            request.setAttribute("message","error");
        }else {
            request.setAttribute("message","noerror");
        }
        request.getRequestDispatcher("QueryAllStudentServlet").forward(request, response);
    }
  
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
DeleteStudentServlet
package org.student.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.student.service.*;
import org.student.service.Impl.StudentServiceImpl;



public class DeleteStudentServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        int no= Integer.parseInt(request.getParameter("sno"));
        IStudentService studentservice = new StudentServiceImpl();
        boolean result=studentservice.DeleteStudent(no);
        //out對象的獲取方法
        //PrintWriter out = response.getWriter();
        //if(result) {
            
        //    out.println("刪除成功");
        //    response.sendRedirect("QueryAllStudentServlet");
        //}else {
            
        //    out.println("刪除失敗");
        //}
        if(!result) {
            request.setAttribute("message","error");
        }else {
            request.setAttribute("message","noerror");
        }
        request.getRequestDispatcher("QueryAllStudentServlet").forward(request, response);
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
QueryAllStudentServlet
package org.student.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.student.entity.Student;
import org.student.service.*;
import org.student.service.Impl.StudentServiceImpl;

public class QueryAllStudentServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        
        IStudentService studentservice = new StudentServiceImpl();
        List<Student> students=studentservice.QueryAll();
        //out對象的獲取方法
        PrintWriter out = response.getWriter();
        request.setAttribute("students", students);
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
QueryStudentServlet
package org.student.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.student.entity.Student;
import org.student.service.*;
import org.student.service.Impl.StudentServiceImpl;

public class QueryStudentServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        //獲取待查詢修改人的學號
        int no= Integer.parseInt(request.getParameter("sno"));
        
        IStudentService studentservice = new StudentServiceImpl();
        Student student=studentservice.Query(no);
        //out對象的獲取方法
        PrintWriter out = response.getWriter();
        out.println(student);
        request.setAttribute("student", student);
        request.getRequestDispatcher("studentinfo.jsp").forward(request, response);
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
UpdateStudentServlet
package org.student.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.student.entity.Student;
import org.student.service.*;
import org.student.service.Impl.StudentServiceImpl;

public class UpdateStudentServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        //獲取待修改人的學號
        int no= Integer.parseInt(request.getParameter("sno"));
        //獲取修改後的內容
        String name= request.getParameter("sname");
        int age= Integer.parseInt(request.getParameter("sage"));
        String hobby= request.getParameter("shobby");
        //將修改後的內容封裝到一個實體類中
        Student student = new Student(name,age,hobby);
        IStudentService studentservice = new StudentServiceImpl();
        boolean result=studentservice.UpdateStudent(no,student);
        //out對象的獲取方法
        //PrintWriter out = response.getWriter();
        //if(result) {
            
        //    out.println("修改爲功");
        //    response.sendRedirect("QueryAllStudentServlet");
        //}else {
            
        //    out.println("修改失敗");
        //}
        if(!result) {
            request.setAttribute("message","error");
        }else {
            request.setAttribute("message","noerror");
        }
        request.getRequestDispatcher("QueryAllStudentServlet").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
package org.student.util;
package org.student.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.student.dao.Impl.StudentDaoImpl;
import org.student.entity.Student;

public class DBUtil {
    //數據庫URL和帳號密碼
            private static final String URL="jdbc:mysql://localhost:3306/login?serverTimezone=UTC&characterEncoding=utf-8";
            private static final String UNAME="root";
            private static final String UPWD="vayne";
            public static PreparedStatement  pstmt=null;
            public static ResultSet  rs = null;
            public static Connection  connection=null;
            
            
     //增刪改
     public static boolean executeUpdate(String sql,Object [] params) {
         boolean flag = false;
         try {
             
         //a.導入驅動,加載具體的驅動類
         Class.forName("com.mysql.cj.jdbc.Driver");
         //b.與數據庫創建鏈接
         connection = DriverManager.getConnection(URL,UNAME,UPWD);
         
         pstmt = connection.prepareStatement(sql);
         for(int i=0;i<params.length;i++) {
             pstmt.setObject(i+1, params[i]);
         }
         int count=pstmt.executeUpdate();//返回值表示,增刪改幾條數據
         //處理結果
         if(count>0)
         {
             System.out.println("操做成功!!!");
         }
         
         }catch(ClassNotFoundException e) {
             e.printStackTrace();
         }catch(SQLException e) {
             e.printStackTrace();
         }catch(Exception e){
             e.printStackTrace();
         }finally {
             try {
                 //先開的後關,後開的先關
             if(pstmt!=null)pstmt.close();
             if(connection !=null)connection.close();
             }catch(SQLException e) {
                 e.printStackTrace();
             }finally {
                 
             }
         }
        return flag;
     }
    //
     public static ResultSet executeQuery(String sql,Object [] params) {
         
                 try {
                     
                 //a.導入驅動,加載具體的驅動類
                 Class.forName("com.mysql.cj.jdbc.Driver");
                 //b.與數據庫創建鏈接
                 connection = DriverManager.getConnection(URL,UNAME,UPWD);
                 
                 pstmt = connection.prepareStatement(sql);
                 if(params!=null) {
                 for(int i=0;i<params.length;i++) {
                     pstmt.setObject(i+1, params[i]);
                 }
                 }
                  rs = pstmt.executeQuery();
                  return rs;
                 }catch(ClassNotFoundException e) {
                     e.printStackTrace();
                     return null;
                 }catch(SQLException e) {
                     e.printStackTrace();
                     return null;
                 }catch(Exception e){
                     e.printStackTrace();
                     return null;
                 }
             
        }
}

index.jsphtml

<%@page import="org.student.entity.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>學生信息列表</title>
</head>
<body>
      <%
         request.setCharacterEncoding("utf-8");
         String message=(String)request.getAttribute("message");
         if(message!=null){
         if(message.equals("error")){
             %>
             <script type="text/javascript">
              alert("操做失敗");
         </script>
         <%
      }else if(message.equals("noerror")){
          %>
          <script type="text/javascript">
              alert("操做成功");
         </script>
         <%
      }else{
      }
      }
      %>
      <table border="1px">
         <tr>
         <th>學號</th>
         <th>姓名</th>
         <th>年齡</th>
         <th>愛好</th>
         </tr>
         <%
         List <Student> students =(List<Student>) request.getAttribute("students");
           for(Student student:students){
               %>
               
               <tr>
                   <td><%=student.getSno() %></td>
                   <td><%=student.getSname() %></td>
                   <td><%=student.getSage() %></td>
                   <td><%=student.getShobby() %></td>
                   <td><a href ="DeleteStudentServlet?sno=<%=student.getSno() %>">刪除</a></td>
                   <td><a href="QueryStudentServlet?sno=<%=student.getSno() %>">查詢</a></td>
               </tr>
               <%
           }
         %>
      </table>
      <a href="add.jsp">添加</a>
</body>
</html>

add.jspjava

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加學生信息</title>
</head>
<body>

      <form action="AddStudentServlet" method="post">
      學號:<input type="text" name="sno"><br/>
      姓名:<input type="text" name="sname"><br/>
      年齡:<input type="text" name="sage"><br/>
      愛好:<input type="text" name="shobby"><br/>
      <input type="submit" value="添加">
      </form>
</body>
</html>

studentinfo.jspmysql

<%@page import="org.student.entity.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>學生我的信息</title>
</head>
<body>
    <%
       Student student= (Student)request.getAttribute("student");
    %>
    <form action="UpdateStudentServlet">
         學號:<input type="text" name="sno" value="<%=student.getSno()%>" readonly="readonly"><br/>
         姓名:<input type="text" name="sname" value="<%=student.getSname()%>"><br/>
         年齡:<input type="text" name="sage" value="<%=student.getSage()%>"><br/>
         愛好:<input type="text" name="shobby" value="<%=student.getShobby()%>"><br/>
         <input type="submit" value="修改">
    </form>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 對學號爲四、5進行刪除sql

 

 

 

 

 

 

 

 對3進行查詢和修改數據庫

 

 

 

 

 

 

 

 測試完畢,所有實現jsp

相關文章
相關標籤/搜索