在IDEA环境下,创建一个三层架构项目,以学生管理系统增加学生信息为例

三层架构分别是

表示层:MVC中的视图层和控制器层,前端通常为html css js jsp文件,后端例如Servlet文件,调用业务逻辑层
业务逻辑层(Service):接受表示层的请求,先进行逻辑处理,后调用数据逻辑层,(增:查+增)
数据访问层(Dao):直接访问数据库的操作

通过三层架构,将表示层请求传递到数据访问层,数据访问层将结果返回至表示层

具体流程

下面为代码(环境:IDEA Mysql  8.0.19        mysql driver:8.0.15  servlet:3.0以上版本)
代码结构

add.jsp
 

<%--
  Created by IntelliJ IDEA.
  User: Laura Li
  Date: 2020/3/2
  Time: 12:56
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>add</title>
</head>
<body>
        <form action="addStudentServlet" >
            学号:<input type="number" name="sno"><br/>
            name: <input type="text" name="sname"/><br/>
            age: <input type="text" name="sage"/><br/>
            address: <input type="text" name="saddress"/><br/>
            <input type="submit" value="add"/><br/>
        </form>
</body>
</html>

写后端代码前,先将数据封装Java bean(entity包中)
 

package com.Student.entity;

public class Student {
    private int sno;
    private String sname;
    private int sage;
    private String saddress;

    public Student(int sno, String sname, int sage, String saddress) {
        this.sno = sno;
        this.sname = sname;
        this.sage = sage;
        this.saddress = saddress;
    }

    public Student(String sname, int sage, String saddress) {
        this.sname = sname;
        this.sage = sage;
        this.saddress = saddress;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sno=" + sno +
                ", sname='" + sname + '\'' +
                ", sage=" + sage +
                ", saddress='" + saddress + '\'' +
                '}';
    }

    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 getSaddress() {
        return saddress;
    }

    public void setSaddress(String saddress) {
        this.saddress = saddress;
    }

}

addStudentServlet.java(com.student.servlet包中)
 

package com.Student.Servlet;

import com.Student.entity.Student;
import com.Student.service.StudentService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/addStudentServlet")
public class addStudentServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // 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 address = request.getParameter("saddress");
        Student student = new Student(no, name, age, address);
        StudentService studentService = new StudentService();
        boolean result = studentService.addStudent(student);
        PrintWriter out = response.getWriter();
        if(result){
            out.println("add successfully");
        }else{
            out.println("fail to add");
        }
        /*if (!result) {  //如果增加失败,给request放入一条数据error
            request.setAttribute("error", "error");
        }
        request.getRequestDispatcher("queryAllStudentServlet").forward(request, response);*/
    }
}

addStudentService.java(自行匹配放包中)
 

package com.Student.service;

import com.Student.Dao.StudentDao;
import com.Student.entity.Student;

import java.util.List;

//业务逻辑层:逻辑性的增删改查(增:查+增), 对Dao层进行组装
public class StudentService {
    StudentDao studentDao = new StudentDao();
    public boolean addStudent(Student student){
        if(!studentDao.isExist(student.getSno())){      //此人不存在
            studentDao.addStudent(student);
            return true;
        }else{
            System.out.println("此人已存在");
            return false;
        }
    }

    public boolean deleteStudent(int sno){
        if(studentDao.isExist(sno)){
            return studentDao.deleteStudentBySno(sno);
        }else{
            return false;
        }
    }

    public boolean updateStudentBySno(int sno,Student student){
            if(studentDao.isExist(sno)){
                return studentDao.updateStudentBySno(sno, student);
            }else{
                return false;
            }
    }

    //根据学号查询一个学生
    public Student queryStudentBySno(int sno){
        return studentDao.queryStudentBySno(sno);
    }

    public List<Student> queryAllStudent(){
        return studentDao.queryAllStudent();
    }
}

StudentDao.java
 

package com.Student.Dao;

import com.Student.entity.Student;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
//数据访问层,原子性的增删改查,不可拆,
public class StudentDao {
    private final String url = "jdbc:mysql://localhost/Student";
    private final String User = "root";
    private final String pwd = "123456";

    public boolean isExist(int sno) {   //true :此人存在  false : 此人不存在
        return queryStudentBySno(sno)==null? false:true;
    }

    public boolean addStudent(Student student){
        Connection connection = null;
        PreparedStatement pstmt = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(url, User, pwd);
            System.out.println("The database was connected successfully");
            String sql = "insert into student values(?,?,?,?)";
            pstmt = connection.prepareStatement(sql);
            pstmt.setInt(1,student.getSno());
            pstmt.setString(2,student.getSname());
            pstmt.setInt(3,student.getSage());
            pstmt.setString(4,student.getSaddress());
            int count = pstmt.executeUpdate();
            System.out.println("count = "+count);
            if(count>0){   
                return true;
            }
            else
                return false;
        }catch (ClassNotFoundException e){
            e.printStackTrace();
                return false;
        }catch (SQLException e){
                e.printStackTrace();
                return false;
        } catch (Exception e){
            e.printStackTrace();
                return false;
        }finally {
            try{
                if(pstmt!=null)pstmt.close();
                if(connection!=null)connection.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }

    }
}

上图


发布了36 篇原创文章 · 获赞 39 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/LJH_laura_li/article/details/104682825
今日推荐