easy-job:最简单的后端零代码插件

1. 传统开发模式存在的问题

几乎每一个后端coder的工作,都是在围绕单表增删改查玩。很多时候为了支持业务,或是开了个新服务,或是建了一张新表,或是单表增删改查接口来一套,总之莫名其妙的就得上个线。

俗话说的好,频繁上线一定会带来意想不到的事故。于是,各种各样的解决方案应运而生。

2. 自研easy-job插件的背景

我一直在想有没有一个最佳的解决方案,直到发现了腾讯出的apijson。然而,一通操作猛如虎之后,我还是被劝退了。apijson存在的几个问题:1.代码侵入性极强;2.学习成本较高;3.还是得频繁修改代码上线。总而言之,像是东找一点西找一点凑出来的垃圾。

作为一个有梦想的coder,apijson虽然满足不了我的需要,但是给了我非常大的启发。于是,自研的easy-job插件顺势而生。当你了解什么是easy-job之后,你会真正体会到什么叫做后端零代码开发。

3. 使用教程

3.1 新建springboot空项目并引入easy-job包

    <dependency>
      <groupId>io.github.xiaoyudeguang</groupId>
      <artifactId>easy-job</artifactId>
      <version>4.3.1</version>
    </dependency>

3.2 在src/main/resources路径下新增application.properties文件加入数据库配置:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test??ullNamePatternMatchesAll=true&amp;serverTimezone=GMT%2b8?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3.3 在src/main/java路径下新增启动类并启动

3.4 调接口完成对数据库表的增删改查

比如我的数据库中存在一张用户表(表名为user):
在这里插入图片描述
那么,本地启动服务后,直接postman调接口:
1.新增用户数据(http://localhost:8080/user/save)
在这里插入图片描述

  1. 根据id查询数据(http://localhost:8080/user/9)
    在这里插入图片描述
    3.根据id修改数据(http://localhost:8080/user/9)
    在这里插入图片描述
    4.根据id删除数据(http://localhost:8080/user/9)
    在这里插入图片描述
    5.查询数据列表(http://localhost:8080/user/list)
    在这里插入图片描述

6.分页查询数据列表(http://localhost:8080/user/page)在这里插入图片描述
可以看到,常用的接口基本都支持了。示例用的是用户表,实际使用中可以直接操作任意一张表。如果操作的是order表,那么将接口路径中的user变成order即可。

基于这种模式,任何一张表都可以用这些接口来操作。无论是已有的数据表,还是新增表,代码是不需要做任何调整的。

4. 关键实现

4.1 提供接口服务的核心代码

	@PostMapping("/{table_name}/save")
	public HttpResponse save(@PathVariable(name = "table_name") String tableName,
			@RequestBody Map<String, Object> dataMap) throws Exception {
		logger.debug("tableName.{}, dataMap = {}", tableName, dataMap);
		return HttpResponse.success(dataService.save(tableName, dataMap));
	}

	@DeleteMapping("/{table_name}/{data_id}")
	public HttpResponse remove(@PathVariable(name = "table_name") String tableName,
			@PathVariable(name = "data_id") String dataId) throws Exception {
		logger.debug("tableName.{}, dataId = {}", tableName, dataId);
		return HttpResponse.success(dataService.remove(tableName, Maps.newMap("id", dataId)));
	}

	@PutMapping("/{table_name}/{data_id}")
	public HttpResponse edit(@PathVariable(name = "table_name") String tableName,
			@PathVariable(name = "data_id") String dataId, @RequestBody Map<String, Object> updateMap)
			throws Exception {
		logger.debug("tableName.{}, dataId = {}, requestMap = {}", tableName, dataId, updateMap);
		return HttpResponse.success(dataService.edit(tableName, updateMap, Maps.newMap("id", dataId)));
	}

	@GetMapping("/{table_name}/{data_id}")
	public HttpResponse getOne(@PathVariable(name = "table_name") String tableName,
			@PathVariable(name = "data_id") String dataId) throws Exception {
		logger.debug("tableName.{}, dataId = {}", tableName, dataId);
		return HttpResponse.success(dataService.getOne(tableName, Maps.newMap("id", dataId)));
	}

	@PostMapping("/{table_name}/list")
	public HttpResponse list(@PathVariable(name = "table_name") String tableName,
			@RequestBody(required = false) Map<String, Object> parameterMap) throws Exception {
		logger.debug("tableName.{}, parameterMap = {}", tableName, parameterMap);
		return HttpResponse.success(dataService.list(tableName, parameterMap));
	}

	@PostMapping("/{table_name}/page")
	public HttpResponse page(@PathVariable(name = "table_name") String tableName,
			@RequestBody(required = false) Page<Map<String, Object>> page) throws Exception {
		logger.debug("tableName.{}, page = {}", tableName, page);
		return HttpResponse.success(dataService.page(tableName, page));
	}

4.2 easy-job的扩展知识点

  1. easy-job插件本质上是对单表的增删改查操作,通过接口路径中的table_name属性来选择被操作的表;
  2. 所有查询接口都支持like操作,只需要接口的参数值带“%”,接口中会自动判断是否like和like的类型;
  3. 可以通过在配置文件中设置application.simple-name的值来给所有接口增加一个前缀;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值