手把手带你做一个简单的 mvc 应用。

一、代码结构

初识 spring springboot mybatis_apache

 代码结果如上图,主要包括:

  1. controller: 控制层,作用是对外接收用户请求,对内调度对应 service。也就是常说的 api url。
  2. service: 服务层,作用是实现业务逻辑。比如用户商品购买需要生成订单然后扣库存,也就是至少两个数据层操作,先调订单 dao 增加订单,再调库存 dao 减库存。
  3. entity: 实体,作用是对内映射数据库对象,对外映射接口请求对象和接口返回对象。例如:一个用户信息他在数据库中的基本信息只有姓名、密码两个字段。另外用户还对应一个爱好表,用户跟爱好的关系是一个1对多关系。这样我们可以定义一个User的实体,有两个成员参数 name、password ,用这个实体可以映射 user 表的数据。再定一个 UserRequest 实体对象,除了 name、password 外还有一个 List 保存爱好,这样可以用 UserRequest 接收接口传过来的数据。接口返回对象雷同,当需要一个新的接口返回数据时,可以定义一个接口返回对象。
  4. dao: 数据层 ,作用是操作数据库,也就是常说的 CRUD。

 二、controller

当完成需求分析后,一般设计都是从低往上的(entity -> dao -> service -> controller )。但这么写你可能感觉没啥意思,写了半天也看不到任何效果。所以这次咱们反过来先从 controller 下手。

当然如果公司没有接口平台,不能定义接口和 mock 接口的时候,也会先实现 controller,这样可以快速完成 api 文档和前后端分离开发。

业务背景:

  做了一个服务器检查的功能,其中每一台服务器需要检查多个内容,并且每台服务器要检查的内容不同。这次要增加的功能就是添加要检查的条目。

1、创建 StepController ,如下图

初识 spring springboot mybatis_spring_02

package com.bjy.qa.controller.servercheck;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/serverCheck/step")
public class StepController {
private final Log logger = LogFactory.getLog(getClass());

@RequestMapping("/add")
@ResponseBody
public Object add(@RequestBody String step) throws Exception {
logger.info("add step:" + step);

return "response";
}
}

 

2、点击 运行

3、在 postman 中测试,配置如下图

初识 spring springboot mybatis_spring_03

 

 

 三、service

下面开始实现业务层,service 分为两部分 接口、实现。

1、创建接口,添加类选择 Interface 接口名称是 IStepService

注意:大写 I 开头,说明这是一个接口

初识 spring springboot mybatis_数据_04

 

 

 添加后如下图,由于没有定义实体对象,所以暂时当 String 传入

初识 spring springboot mybatis_spring_05

package com.bjy.qa.service.servercheck;

public interface IStepService {

/**
* 新增一条数据
* @param step
* @return
*/
Object add(String step);

}

2、此时只有接口还没有实现,所以需要添加一个实现

初识 spring springboot mybatis_spring_06

package com.bjy.qa.service.servercheck.impl;

import com.bjy.qa.service.servercheck.IStepService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;

@Service
public class StepService implements IStepService {
private final Log logger = LogFactory.getLog(getClass());

@Override
public Object add(String step) {
logger.info("add step:" + step);

return "成功执行 service";
}
}

3、controller 中调用此 service

初识 spring springboot mybatis_apache_07

package com.bjy.qa.controller.servercheck;

import com.bjy.qa.service.servercheck.IStepService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

@Controller
@RequestMapping("/serverCheck/step")
public class StepController {
private final Log logger = LogFactory.getLog(getClass());

@Resource
IStepService iStepService;

@RequestMapping("/add")
@ResponseBody
public Object add(@RequestBody String step) throws Exception {
logger.info("add step:" + step);

return iStepService.add(step);
}
}

 

4、重新运行后再次调用,你能看到这次返回的是 service 中的内容。

初识 spring springboot mybatis_apache_08

 

 四、entity

下面就要定义实体了,在 entity 中增加 step 实体,实体继承自 BaseEntity,

初识 spring springboot mybatis_apache_09

package com.bjy.qa.entity.servercheck;

import com.bjy.qa.entity.BaseEntity;

public class Step extends BaseEntity<Step> {

}

 

 

 

 

,数据库表如下图

初识 spring springboot mybatis_spring_10