初识 spring springboot mybatis
原创
©著作权归作者所有:来自51CTO博客作者rong123l的原创作品,请联系作者获取转载授权,否则将追究法律责任
手把手带你做一个简单的 mvc 应用。
一、代码结构
代码结果如上图,主要包括:
- controller: 控制层,作用是对外接收用户请求,对内调度对应 service。也就是常说的 api url。
- service: 服务层,作用是实现业务逻辑。比如用户商品购买需要生成订单然后扣库存,也就是至少两个数据层操作,先调订单 dao 增加订单,再调库存 dao 减库存。
- entity: 实体,作用是对内映射数据库对象,对外映射接口请求对象和接口返回对象。例如:一个用户信息他在数据库中的基本信息只有姓名、密码两个字段。另外用户还对应一个爱好表,用户跟爱好的关系是一个1对多关系。这样我们可以定义一个User的实体,有两个成员参数 name、password ,用这个实体可以映射 user 表的数据。再定一个 UserRequest 实体对象,除了 name、password 外还有一个 List 保存爱好,这样可以用 UserRequest 接收接口传过来的数据。接口返回对象雷同,当需要一个新的接口返回数据时,可以定义一个接口返回对象。
- dao: 数据层 ,作用是操作数据库,也就是常说的 CRUD。
二、controller
当完成需求分析后,一般设计都是从低往上的(entity -> dao -> service -> controller )。但这么写你可能感觉没啥意思,写了半天也看不到任何效果。所以这次咱们反过来先从 controller 下手。
当然如果公司没有接口平台,不能定义接口和 mock 接口的时候,也会先实现 controller,这样可以快速完成 api 文档和前后端分离开发。
业务背景:
做了一个服务器检查的功能,其中每一台服务器需要检查多个内容,并且每台服务器要检查的内容不同。这次要增加的功能就是添加要检查的条目。
1、创建 StepController ,如下图
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 中测试,配置如下图
三、service
下面开始实现业务层,service 分为两部分 接口、实现。
1、创建接口,添加类选择 Interface 接口名称是 IStepService
注意:大写 I 开头,说明这是一个接口
添加后如下图,由于没有定义实体对象,所以暂时当 String 传入
package com.bjy.qa.service.servercheck;
public interface IStepService {
/**
* 新增一条数据
* @param step
* @return
*/
Object add(String step);
}
2、此时只有接口还没有实现,所以需要添加一个实现
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
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 中的内容。
四、entity
下面就要定义实体了,在 entity 中增加 step 实体,实体继承自 BaseEntity,
package com.bjy.qa.entity.servercheck;
import com.bjy.qa.entity.BaseEntity;
public class Step extends BaseEntity<Step> {
}
,数据库表如下图