1. 使用pdman新建一张测试表

新建一张stu表,用于我们测试通用Mapper和RestfulAPI
image.png
然后在stu表中增加几个字段
image.png

2.使用逆向工具生成相关代码

打开mybatis-generator工程,在generatorConfig.xml中,只放一个stu表配置即可

  1. <table tableName="stu"></table>

其他的表全都注释掉,因为逆向工具生成是增量生成,而不是覆盖!
把相关代码拷贝到foodie-dev对应的目录中

3.code service&controller

3.1在foodie-shop-service工程中写业务接口

业务代码:

  1. package com.architects.service;
  2. import com.architects.pojo.Stu;
  3. public interface StuService {
  4. Stu getStuInfo(int id);
  5. void saveStu();
  6. void updateStu(int id);
  7. void deleteStu(int id);
  8. }

3.2在foodie-shop-service工程中写业务的实现类

实现类代码:

  1. package com.architects.service.impl;
  2. import com.architects.mapper.StuMapper;
  3. import com.architects.pojo.Stu;
  4. import com.architects.service.StuService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import org.springframework.transaction.annotation.Propagation;
  8. import org.springframework.transaction.annotation.Transactional;
  9. @Service
  10. public class StuServiceImpl implements StuService {
  11. @Autowired
  12. private StuMapper stuMapper;
  13. @Transactional(propagation = Propagation.SUPPORTS)
  14. @Override
  15. public Stu getStuInfo(int id) {
  16. return stuMapper.selectByPrimaryKey(id);
  17. }
  18. @Transactional(propagation = Propagation.REQUIRED)
  19. @Override
  20. public void saveStu() {
  21. Stu stu = new Stu();
  22. stu.setId(110);
  23. stu.setAge(18);
  24. stu.setName("jack");
  25. stuMapper.insert(stu);
  26. }
  27. @Transactional(propagation = Propagation.REQUIRED)
  28. @Override
  29. public void updateStu(int id) {
  30. Stu stu = new Stu();
  31. stu.setId(id);
  32. stu.setName("chaining");
  33. stuMapper.updateByPrimaryKey(stu);
  34. }
  35. @Transactional(propagation = Propagation.REQUIRED)
  36. @Override
  37. public void deleteStu(int id) {
  38. stuMapper.deleteByPrimaryKey(id);
  39. }
  40. }

3.3在foodie-shop-api工程中写控制层

  1. package com.architects.controller;
  2. import com.architects.service.StuService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. /**
  8. * @ClassName StuFooController
  9. * @Description:
  10. * @Author ning.chai@foxmail.com
  11. * @Date 2020/12/31 0031
  12. * @Version V1.0
  13. **/
  14. @RestController
  15. public class StuFooController {
  16. @Autowired
  17. private StuService stuService;
  18. @GetMapping("/getStu")
  19. public Object getStu(int id){
  20. return stuService.getStuInfo(id);
  21. }
  22. @PostMapping("/saveStu")
  23. public Object saveStu(){
  24. stuService.saveStu();
  25. return "OK";
  26. }
  27. @PostMapping("/updateStu")
  28. public Object updateStu(int id){
  29. stuService.updateStu(id);
  30. return "OK";
  31. }
  32. @PostMapping("/deleteStu")
  33. public Object deleteStu(int id){
  34. stuService.deleteStu(id);
  35. return "OK";
  36. }
  37. }

3.4运行测试

可以使用常用的post man工具进行测试,我用的IDEA2020.2.3中带有测试工具,简单的接口可以通过内置的测试工具进行测试
新版的IDEA在写controller的时候,会有net的图标,
image.png
点击之后就可以自动新建一个HTTP Client
image.png
还可以选择测试的地址和端口,很方便
image.png
我们先测试一个GET请求,因此书写格式如下:

  1. GET http://localhost:8088/getStu?id=1

项目运行后,点击旁边的运行按钮就可以测试接口
image.png
image.png

4.解决IDEA注入报异常

使用IDEA开发过程中,用到Spring的 @Autowired 注解时,就会报异常,如下图
image.png
其实这是IDEA的问题,在eclipse中不会有这个问题,解决方法为:

  1. 打开File-Setting
  2. 找到inspections-Spring-SpringCore-Code
  3. 取消勾选AutoWiring for bean class
  4. 点击Apply后点击ok

image.png
image.png