No.4 Mybatis代码生成器+ Http Client访问
- 1.Github上找了一个springboot+mybatis自动生成代码API
https://github.com/lihengming/spring-boot-api-project-seed
2.Git安装,在文件夹目录右键Git bash here,生成下载项目代码:git clone 你复制的项目地址(github上)
3.填入你的sql表名,CodeGenerater自动生成dao/model/mapper/mapper.xml/service/serviceImpl/controller/
4.IDEA-Tools-HTTP Client-RESTful 键入url测试
问题:
mysql中datetime格式设置成非空 NOT NULL的话,用 /add没法写入
换成TIMESTAMP,属性CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,自动插入更新时,更新时间。好使
5.用ship数据表,测试,CodeGenerater自动生成。
6./list 直接输出list形式所有记录
/detail 由于在mmsi上@Id,所以键入 id=44444444 ,可查询单条记录
/update 更新,由于查询根据mmsi来,所以键入 mmsi=44444444,speed=44,来更新单挑记录
/add 添加记录,mmsi=2,value=xxxx
问题:
报错:mmsi没有默认值,将数据表字段改为自增,AI,才行alter table t_ship_info modify mmsi int auto_increment;
时间戳,变成一串13位数字,得想办法转换
下一步思路:
1.http提供持续访问,client用RESTful方式访问,定时请求所以船数据,短定时-周围船舶-
按字段名查询 findBy
fieldName 指 字段名(Model中的成员变量)
value 指 值
这是AbstractService中的方法
@Override
public T findBy(String fieldName, Object value) throws TooManyResultsException {
try {
T model = modelClass.newInstance();
Field field = modelClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(model, value);
return mapper.selectOne(model);
} catch (ReflectiveOperationException e) {
throw new ServiceException(e.getMessage(), e);
}
}
这是controller中调用方法:
@PostMapping("/detailfindby")
public Result detailfindby(@RequestParam String fieldName, @RequestParam Object value) throws TooManyResultsException {
Tableship tableship = tableshipService.findBy(fieldName, value);
return ResultGenerator.genSuccessResult(tableship);
}
必须加@RequestParam 代表 @RequestParam注解将请求参数绑定到你控制器的方法参数上
在请求中,写上参数
fieldName=speed value=99
可以搜索到一条,对应的底层方法是 SelectOne
查询多条ByIds
/**
* 查询按Ids 多条返回
* @param ids 例如 ids=1,2,3,4 String格式
* @return 多条返回
*/
@PostMapping("/findByIds")
public Result findByIds(@RequestParam String ids) {
List<Tableship> list = tableshipService.findByIds(ids);
return ResultGenerator.genSuccessResult(list);
}
```