最后实现的功能大概为:根据传入的person_id
,在存放数据位置信息的表中,筛选出数据要插入的表名(例如,person_id=1的数据,在work_table_info
表中查出,需要存储在table_id_1表中),并将数据插入。
实体类
1
2
3
4
5
6
7
|
@Data
public class Daily {
private String time; //打卡时间
private Double longitude; //打卡经纬度
private Double latitude;
private String person_id; //打卡人员id
}
|
Mapper接口
1
2
3
4
5
6
7
8
9
10
|
@Mapper
public interface DailyMapper extends BaseMapper<Daily> {
@Select("select table_name from worker_table_info where worker_id=#{person_id}")
public String findTableName(String person_id); //查询待插入的表名
@DataSource(DataSourceEnum.DB3) //指定源数据库(跨平台跨数据库)
@Insert("insert into #{table_name} (time,longitude,latitude) " +
"values(#{daily.time},#{daily.longitude},#{daily.latitude})")
public int insertDaily(Daily daily,String table_name);
}
|
Controller控制器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@RestController
public class DailyController {
@Autowired
private DailyMapper dailyMapper;
@PostMapping("/dailyInsert")
public String save(@RequestBody Daily daily) {
// 获取人员ID对应的表名
String person_id = daily.getPerson_id();
String table_name = dailyMapper.findTableName(person_id);
// 向时序数据表插入数据
int i= dailyMapper.insertDaily(daily,table_name);
if(i>0){
return "插入成功";
}else {
return "插入失败";
}
}
}
|
Config跨数据库注解
这里开始是为了跨数据库做准备,写了一个注解和枚举类,这样就可以在对应的sql语句前面加上@
注解,使得编译器识别执行操作的数据库源,从而实现跨数据库的效果。
DataSource注解类
在config
下创建需要作为注解使用的DataSource类,具体代码如下
1
2
3
4
5
6
|
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
DataSourceEnum value() default DataSourceEnum.DB1;
}
|
DataSourceEnum枚举类
在config下创建上述注解使用到的DataSourceEnum枚举类,方便使用时直接引用,不需要把数据库名的一长串东西打进去,具体代码如下
1
2
3
4
5
6
|
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum DataSourceEnum {
DB1("db1"),DB2("db2"),DB3("db3");
private String value;
}
|
.yml
文件配置数据库源
上面的Config配置其实都是为了不要在代码里直接写数据库的信息,因为太多了,也很杂乱。
而数据库的全部信息则存放在application.yml
文件里,大概是这样的格式,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
server:
port: 8080
spring:
main:
allow-bean-definition-overriding: true
application:
name: iotReceive
datasource:
aop:
proxy-target-class: true
auto: true
druid:
db1:
url: jdbc:mysql://123.456.000.77:8910/my_database?allowMultiQueries=true&autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: admin
password: 000000
initialSize: 5
minIdle: 5
maxActive: 20
testWhileIdle: true
validationQuery: SELECT 1
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: false
db2:
url: jdbc:postgresql://11.222.33.44:5555/my_db?useSSL=false&allowPublicKeyRetrieval=true
username: admin1
password: 111111
db3:
url: jdbc:TAOS://987.654.321.00:1010/my_data_base?charset=UTF-8&timezone=UTC-8
username: admin2
password: 222222
driver-class-name: com.taosdata.jdbc.TSDBDriver
pool-name: Cloud-OAuth2-HikariCP-taos
minimum-idle: 5
maximum-pool-size: 20
testWhileIdle: true
validationQuery: SELECT 1
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: false
redis:
host: 127.0.0.1
port: 9876
session:
store-type: redis
mybatis-plus:
mapper-locations:
- classpath*:com/my/iot/parse/mapper/mapping/*.xml
|
注意
本文最后更新于 March 7, 2024,若内容或图片失效,请留言反馈。部分素材来自网络,如不慎触及您的利益,请联系删除。