很多同学在开始学习理解MVC的时候有很多疑惑:
1这到底是个什么玩意
2这个到底有什么用
3这个如何帮助我们写代码
4这个怎么去理解
首先第一个问题:就是一种思路,一种思想上的模板,举个例子,就好比我们做一道鸡兔同笼的数学题的时候,你会想到怎么去解?答案是:方程。对的,你想到的用方程去解决,就是相当于用MVC思想去写程序。是一种什么思想呢?M代表的是数据操作,V代表的是前端展示,C代表的是控制层。
其次第二个问题:在很多初步步入编程的同学将前面所学的的东西拿出来写的时候要么是很乱的,要么就是找到问题的突破口很慢或者很难。但是当你建立起这个思想了,你就会知道从哪里突破,比如一个管理系统,你首先要写增删改查的,你可以根据前端相应的接口(V)去到后端dao层或者service层(M)去写对应的数据库操作,最后通过controller层(C)去将dao或者service层的东西响应给前端(V)并展示出来。
至于第三个问题:下面我通过一个项目目录做一个说明:
前端实现这里用的ajax
先写了实体
开始上正餐,举个例子来说明这个流程,下图为dao层我写的一个查询的数据库操作。
public List<User> selectAll() {
//查询所有
String sql = "select * from user";
try {
con = JDBCUtil.getCon();//ctr+alt+t
pre = con.prepareStatement(sql);
re = pre.executeQuery();
//定义一个list
ArrayList<User> users = new ArrayList<>();
while (re.next()){
User user = new User();
user.setUserId(re.getInt("user_id"));
user.setUserName(re.getString("user_name"));
user.setUserSex(re.getString("user_sex"));
user.setUserAge(re.getInt("user_age"));
user.setUserTel(re.getString("user_tel"));
users.add(user);
}
return users;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.closeAll(re,pre,con);
}
return null;
}
然后去service层,写判断
private UserDao userDao = new UserDaoImpl();
@Override
public Result selectAll() {
List<User> users = userDao.selectAll();
if(users!=null){
return new Result("200","查询成功",users);
}else{
return new Result("500","查询失败",null);
}
}
最后到controller层响应给前端。
public void selectAll(HttpServletRequest request, HttpServletResponse response) throws IOException {
//调用业务逻辑层的selectAll方法
Result result = userService.selectAll();
ObjectMapper objectMapper = new ObjectMapper();
//将result转化为我们的json格式传回给前端
String resultJson = objectMapper.writeValueAsString(result);
//响应给前端
response.getWriter().write(resultJson);
}
最后一个问题:我相信聪明的你已经知道如何理解MVC了。