一、定时获取所有船舶数据
由于数据库船舶数据是模拟的,按200条船,每2s时间间隔一条数据,所以每一次取数是200条
辨别的字段名为:uuid(自增),datatime(mysql中为Datatime格式,后端实体转String),
采用uuid容易识别。
tableship是船舶表名,
方法一:
findByCondition是URI方法名,参数是字段名fieldName,String格式、值value
字段名fieldName,可以查询数据表中任意字段名
/**
* 按条件查询 select * from tableship WHERE fieldName=value
* @param fieldName 代表字段名(Model中的成员变量,Tableship) 必须是String格式的
* @param value 可以不是唯一的(返回多个List)
*/
@PostMapping("/findByCondition")
public Result findByCondition(@RequestParam String fieldName, @RequestParam Object value) {
Condition condition = new Condition(Tableship.class);
Example.Criteria criteria = condition.createCriteria();
criteria.orEqualTo(fieldName, value);
List<Tableship> list = tableshipService.findByCondition(condition);
return ResultGenerator.genSuccessResult(list);
}
客户端请求:
第一个时间点:http://localhost:8080/tableship/findByCondition HTTP method:Post
RequestParam: fieldName=datatime value=2019-06-27 16:50:52
第二个时间点: RequestParam: fieldName=datatime value=2019-06-27 16:50:54
(按2s增加时间值)
方法二:
findByBetween 查询值1到值2之间的数据
/**
* 条件查询Between :where fieldName between value1 and value2
* @param fieldName 代表字段名(Model中的成员变量,Tableship)
* @param value1 在1 和 2 之间
* @param value2
* @return List
*/
@PostMapping("/findByBetween")
public Result findByBetween(@RequestParam String fieldName, @RequestParam Object value1,@RequestParam Object value2) {
Condition condition = new Condition(Tableship.class);
Example.Criteria criteria = condition.createCriteria();
criteria.andBetween(fieldName,value1,value2);
List<Tableship> list = tableshipService.findByCondition(condition);
return ResultGenerator.genSuccessResult(list);
}
客户端请求:
第一个时间点:http://localhost:8080/tableship/findByBetween HTTP method:Post
RequestParam: fieldName=uuid value1=1 value2=200
第二个时间点: RequestParam: fieldName=uuid value1=201 value2=400
(按200增加id值)
方法三(不太好用):
findByIds是URI方法名,参数是id,String格式
/**
* 查询按Ids 多条返回
* @param ids 例如 ids=1,2,3,4,5 String格式
* @return 多条返回
*/
@PostMapping("/findByIds")
public Result findByIds(@RequestParam String ids) {
List<Tableship> list = tableshipService.findByIds(ids);
return ResultGenerator.genSuccessResult(list);
}
客户端请求:
uuid在该方法内部是@Id注释的,所以参数是ids。
第一个时间点:http://localhost:8080/tableship/findByIds HTTP method:Post
RequestParam: ids=1,2,3,4,5,…,200
第二个时间点: RequestParam: ids=201,202,203,204,205,…,400
(按200增加id数)
二、定时获取周边船舶数据
按照‘航道划分’,数据库表字段名=Channel_division_ID,后端实体成员变量=channelDivisionId,
由于提取时间不同,对应数据记录不同,避免时间因素的方法是
在客户端定时获取所有船舶之后,筛选出‘航道划分’等于 客户端自身航道划分的数据记录
方法二:
findByConditionBetween 多条件查询:客户端请求中带参数,航道划分(客户端所在航道划分),和uuid (或者时间)如下查询
/**
* 按条件查询(例如:航道划分=10010,uuid在1~200之间) sql: select * from tableship where fieldName=value and fieldName1 between value1 and value2
* @param fieldName fieldName=value -> channelDivisionId=10010
* @param value fieldName=channelDivisionId , value=10010
* @param fieldName1 fieldName1 between value1 and value2 -> uuid between 1 and 200
* @param value1 fieldName1=uuid , value1=1, value2=200
* @param value2
* @return 查询到的所有船记录 List
*/
@PostMapping("/findByConditionBetween")
public Result findByConditionBetween(@RequestParam String fieldName, @RequestParam Object value,
@RequestParam String fieldName1, @RequestParam Object value1,@RequestParam Object value2) {
Condition condition = new Condition(Tableship.class);
Example.Criteria criteria = condition.createCriteria();
criteria.orEqualTo(fieldName, value);
criteria.andBetween(fieldName1, value1,value2);
List<Tableship> list = tableshipService.findByCondition(condition);
return ResultGenerator.genSuccessResult(list);
}
客户端:
第一个时间点:http://localhost:8080//tableship/findByConditionBetween HTTP method:Post
RequestParam:
fieldName=channelDivisionId value=10010
fieldName1=uuid value1=1 value2=200
第二个时间点:
RequestParam:
fieldName=channelDivisionId value=10010
fieldName1=uuid value1=201 value2=400
(按200增加id数)(或者时间)
方法三:
findByCondition2 2个条件查询,2个变量 客户端传入请求:当前航道划分、时间
/**
* 按2个条件查询 (例如:航道划分=10010,时间=2019-06-27 16:50:50)
* * sql: select * from tableship where fieldName=value and fieldName1=value2
* @param fieldName 字段名1 fieldName=channelDivisionId , value=10010
* @param value
* @param fieldName1 字段名2 fieldName1=datatime, value2=2019-06-27 16:50:50
* @param value1
* @return
*/
@PostMapping("/findByCondition2")
public Result findByCondition2(@RequestParam String fieldName, @RequestParam Object value,
@RequestParam String fieldName1, @RequestParam Object value1) {
Condition condition = new Condition(Tableship.class);
Example.Criteria criteria = condition.createCriteria();
criteria.andEqualTo(fieldName, value);
criteria.andEqualTo(fieldName1, value1);
List<Tableship> list = tableshipService.findByCondition(condition);
return ResultGenerator.genSuccessResult(list);
}
客户端:
第一个时间点:http://localhost:8080//tableship/findByCondition2 HTTP method:Post
RequestParam:
fieldName=channelDivisionId value=10010
fieldName1=datatime value1=2019-06-27 16:50:50
第二个时间点:
RequestParam:
fieldName=channelDivisionId value=10010
fieldName1=datatime value1=2019-06-27 16:50:50
(锚定时间)
三、气象
四、报警
五、动态
六、通知
七、水文

本文详细介绍了如何通过后端SQL查询与前端HTTP请求进行数据交互,包括三种不同的查询方法:按条件查询、按范围查询以及按ID查询。在定时获取船舶数据时,通过调整时间戳或ID来获取不同时间段的数据。此外,还讨论了如何根据航道划分筛选船舶数据,并涉及气象、报警、动态、通知和水文等多个方面的数据处理。
1193

被折叠的 条评论
为什么被折叠?



