MVC编写理解

86 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天

MVC:Controller(控制层)、Model(模型层)、View(视图层)

流程:Controller 接收客户端请求,调⽤相关业务层组件产出 Model,或业务数据并返回给

Controller,Controller 再结合 View 完成业务数据的视图层渲染,并将结果响应给客户端,如下图所

示。

Spring MVC 对这套 MVC 流程进⾏封装,帮助开发者屏蔽底层代码,并且开放出相关接⼝供开发者调

⽤,让 MVC 开发变得更加简单⽅便

Controller(控制层):一般在一个程序内是以controller结尾的文件或者有@Controller注解的文件,也就是Java程序中的main方法可以理解为,其主要是对从Service层返回上来的接口进行简短处理或者不处理,将其返回到视图层,也就前端页面(HTML,jsp等)展示出来,展示给人们

Service:是将dao层返回的结果进行处理,里面多写方法,比如你从数据库得到的是1或2,前端1代表男,2代表女可以在Service写个方法如

User user = new User()
Integer sexId = user.getsexId;
if(sexId == 1){
   sexId.setsexId("男");
}
   sexId.setsexId("女");

或者对在前端往后端川数据的时候加条件,如加上时间

或者对条件的判断,如登录的判断,或者对后端数据的合法性或者成功性判断

  Integer save=this.absenceDao.save(absent);
  if (save!=1)throw new RuntimeException("添加失败");

一般接口加实现类组成

dao:是对数库进行操作的层,通过sql对数据库进行增删改查(sql语句),可以通过JDBC连接

 private static String driverName = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/dormitory?serverTimezone=GMT%2B8";
    private static String user = "root";
    private static String password = "mysql";

连接数据的

 private static String driverName = "com.mysql.cj.jdbc.Driver";

jar包(就是他人写好的程序我们调用)(仅个人理解)

然后通Sql语句进行查询

public SystemAdmin findByUsername(String username) {
        Connection connection=JDBCUtil.getConnection();
        String  sql="select * from systemadmin where username='"+username+"'";
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        try {
            statement=connection.prepareStatement(sql);
            resultSet=statement.executeQuery();
            if (resultSet.next()) {
                int id=resultSet.getInt(1);
                username=resultSet.getString(2);
                String password=resultSet.getString(3);
                String name=resultSet.getString(4);
                String telephone=resultSet.getString(5);
                SystemAdmin systemAdmin=new SystemAdmin(id,username,password,name,telephone);
                return systemAdmin;
            }
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            JDBCUtil.release(connection,statement,resultSet);
        }
        return null;
    }
}

以上是当程序对后方交互时从后往前的进行的解读

从前往后

分为前后算分离或者不分离

不分离即用前端用jsp

jsp:是一种混合的东西以jsp结尾的文件

image-20221111223304946

其中可以插入Html,Js,也可编写java代码(类似于PHP,php最好的语言哪里都能写,这是啥也能写进了,哈哈)

一般时混合度比较高也就时高耦合,代码可读性比较差,早期项目用这个写的,这个一般是跟着Java web进行使用,再往后知道SpringBoot出现后由一种thymeleaf(我感觉这就是jsp翻版但是他比jsp要轻巧一些语法没那么流氓了)再到后来出现一些类似前后端分离的如 freemarker这样的他已经由前后端分离的感觉但是不是严格上的前后端分离

分离

如vue这是这是一个分离的项目,前后端分离我认为就是前端可以独立成为一个程序,后端不用也可以,到这个时候就可以不用同一个端口进行文件的访问了,啥叫不是一个端口后面说那是跨域问题就比如8080访问9095

访问方法也是一样的用户从前端输入一个数据,比如用户注册有个输入框前端输入然后通往后端发出请求

image-20221111224645784

image-20221111224731617

图中两个/absent,进行对应查找,method是从前端带过去的数据比如我要查个用户更据id查这个method=search可以是数也可以是一个条件啥的都行

然后后端获得执行接下来的所有走果controller调用service层service调用dao,dao层通sql语句对数据库进行操作。这就是简单的程序