前言:
在昨天前辈教我了如何在项目里编写一个单表WebApiCRUD接口,大致流程就是利用Mybatis逆向工程,生成需要的Bean,Api,Mapper,Service,export。然后把生成的这些东西放到WebApi项目即可。然后通过Git合并代码,打包,启动服务,最后控制接口的访问权限。
开发:
刚开始PO给我这个需求时,真的是一脸懵,自己昨天才学会单表的API接口,今天就叫我写多表了......今天一上午都在想我该怎么建文件?建在哪里?为什么有这么多注解?我用不了基类那我该用什么?诸如此类等等。后面去看了项目的目录结构,一边看一边想,发现多表和单表开发其实差不多。区别在于单表的基类写好了,如CRUDService,CRUDServiceImpl,CRUDImpl等等,所以只需要逆向工程里的Bean,Api,Mapper这些。
如果需要多表接口的话,那么用不了逆向工程了,需要自己写。和一般Web开发一样,需要写Action,Service,ServiceImpl,Dao,Mapper,Bean,只多了一个名为Api的Interface,而我们写的Action需要实现这个ApiInterface。
具体:
在ApiIterface接口上有@FeignClient注解,表示可被外部访问。
@FeignClient("WebApiStandard") public interface ReturnMetalApi{ ArrayList<MetalDto> selectMany(String pi); }
ApiImpl有@APi,@RestController,@RequestMapping三个注解,将Service用@AutoWired注入,实现ApiIterface中的方法,并在方法上加@ApiOperation,@ApiImplicitParams,@RequestMapping,@Override注解。并调用Service中的方法。SwaggerApi注解详见:https://github.com/swagger-api/swagger-core/wiki/Annotations
@Api(tags={"金属多条查询接口"},description="金属多条查询接口<b>,主键:pi</b>") @RestController @RequestMapping("ReturnMetal") public class ReturnMetalApiImpl implements ReturnMetalApi{ @AutoWired ReturnMetalService returnMetalService; @ApiOperation(value="多条查询接口",notos="多条查询接口") @ApiImplicitParams({}) @Override @RequestMapping("/selectMany") public ArrayList<ReturnMetalDto> selectMany(Stirng pi){ return returnMetalService.selectMany(pi); } }
在ReturnMetalService里写上方法声明:
@Service public interface ReturnMetalService{ public ArrayList<ReturnMetalDto> selectMany(@PathVariable(value="pi") Stirng pi); }
在ReturnMetalServiceiImpl实现ReturnMetalService中的方法:
@Component public class ReturnMetalServiceImpl implements ReturnMetalService{ @AutoWired ReturnMetalMapper returnMetalMapper; public ArrayList<ReturnMetalDto> selectMany(@PathVariable(value="pi") Stirng pi){ return returnMetalMapper.selectMany(pi); } }
后面只需要在Mapper Interface里声明方法,并在Mapper.xml实现sql操作。或者Mapper Interface里用Mybatis注解实现sql操作。
后记:
写这个接口时,出了一些错,比如在 selectMany方法上刚开始是 @RequestMapping("/selectMany/{pi}"),然后给参数加上@PathVariable(value="pi")注解,但是这样访问一直错误,找不到param of type of String,后面去掉了@PathVariable(value="pi"),映射修改为 @RequestMapping("/selectMany"),这样就对了。然后@RequestMapping应该加在哪个位置,是ApiInterface还是ApiImpl,最后发现都可以,甚至交叉都行!