日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot 集成 clickhouse + mybatis-plus 配置及使用问题说明(含建表语句、demo源码、测试说明)

發布時間:2024/10/6 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot 集成 clickhouse + mybatis-plus 配置及使用问题说明(含建表语句、demo源码、测试说明) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.建表語句

-- 建表 CREATE TABLE IF NOT EXISTS tb_stat ( id String, region String, group String, yesterday INT, today INT, stat_date DateTime ) ENGINE = SummingMergeTree PARTITION BY ( toYYYYMM ( stat_date ), region ) ORDER BY ( toStartOfHour ( stat_date ), region, group );-- 數據 INSERT INTO tb_stat VALUES( '1','1232364', '111', 32, 2, '2021-07-09 12:56:00' ); INSERT INTO tb_stat VALUES( '2','1232364', '111', 34, 44, '2021-07-09 12:21:00' ); INSERT INTO tb_stat VALUES( '3','1232364', '111', 54, 12, '2021-07-09 12:20:00' ); INSERT INTO tb_stat VALUES( '4','1232364', '222', 45, 11, '2021-07-09 12:13:00' ); INSERT INTO tb_stat VALUES( '5','1232364', '222', 32, 33, '2021-07-09 12:44:00' ); INSERT INTO tb_stat VALUES( '6','1232364', '222', 12, 23, '2021-07-09 12:22:00' ); INSERT INTO tb_stat VALUES( '7','1232364', '333', 54, 54, '2021-07-09 12:11:00' ); INSERT INTO tb_stat VALUES( '8','1232364', '333', 22, 74, '2021-07-09 12:55:00' ); INSERT INTO tb_stat VALUES( '9','1232364', '333', 12, 15, '2021-07-09 12:34:00' );

2.依賴

這里只粘貼相關依賴:

<!-- https://mvnrepository.com/artifact/ru.yandex.clickhouse/clickhouse-jdbc --><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.2.4</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.21</version></dependency><!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version></dependency>

3.配置

application.yml 配置:SpringBoot默認是不注入 clickhouse 屬性值的,需要自己綁定。

server:port: 8080 spring:datasource:# 數據源選擇type: com.alibaba.druid.pool.DruidDataSource# clickhouse配置click:driverClassName: ru.yandex.clickhouse.ClickHouseDriverurl: jdbc:clickhouse://172.81.205.216:8123/defaultusername: defaultpassword:initialSize: 10maxActive: 100minIdle: 10maxWait: 6000

Bean配置:用了druid監控所以在這里邊初始化了,這個 DataSource 也可以在啟動類里初始化。

@Configuration public class DruidConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.click")public DataSource druidDataSource() {return new DruidDataSource();} } // 或者用 @SpringBootApplication @MapperScan(value = "com.example.demo.**.mapper") public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Bean@ConfigurationProperties(prefix = "spring.datasource.click")public DataSource druidDataSource() {return new DruidDataSource();} }

3.使用

嘗試使用mybatis-plus-generator代碼生成報錯:

DB::Exception: Syntax error: failed at position 6 ('table') (line 1, col 6): table status WHERE 1=1 AND NAME IN ('tb_stat')

所以entity、mapper、service、controller使用的是其他庫表生成的代碼然后修改的。這里只貼出重要的類:
entity代碼: statDate字段要使用@JsonFormat格式化日期字符串。

@Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName(value = "tb_stat") @ApiModel(value = "Stat對象", description = "") public class Stat implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "ID")private String id;@ApiModelProperty(value = "區域")private String region;@ApiModelProperty(value = "分組")private String group;@ApiModelProperty(value = "昨天")private Integer yesterday;@ApiModelProperty(value = "今天")private Integer today;@ApiModelProperty(value = "時間")@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")private Date statDate; }

controller代碼:

@RestController @RequestMapping("/stat") public class StatController {@Autowiredprivate IStatService statService;@PostMapping("/add")public boolean addStat(@RequestBody Stat stat) {return statService.save(stat);}@GetMapping("/del/{id}")public boolean delStatById(@PathVariable String id) {return statService.removeById(id);}@PostMapping("/update")public boolean updateStat(@RequestBody Stat stat) {return statService.updateById(stat);}@PostMapping("/list")public List<Stat> getStatList() {LambdaQueryWrapper<Stat> query = Wrappers.lambdaQuery(Stat.class);return statService.list(query);} }

測試結果說明:
添加和查詢可以正藏使用mybatis-plus的api,刪除和更新時會報錯:

// 這個是刪除的報錯 DB::Exception: Syntax error: failed at position 1 ('DELETE'): DELETE FROM tb_stat WHERE id='10'.// 這個是更新的報錯 DB::Exception: Syntax error: failed at position 1 ('UPDATE') (line 1, col 1): UPDATE tb_stat SET region='222',group='222',yesterday=222,today=222,stat_date='2020-03-25 12:13:00' WHERE id='4'.

報錯的原因說明:
clickhouse 數據庫的語法有一些不同:

-- 刪除語法 alter table tb_stat delete WHERE id='10';-- 修改語法 alter table tb_stat update today=222 WHERE id='4';

所以刪除和修改的SQL要自己在xml文件內寫。

4.clickhouse應用場景(copy):

1.絕大多數請求都是用于讀訪問的
2.數據需要以大批次(大于1000行)進行更新,而不是單行更新;或者根本沒有更新操作
3.數據只是添加到數據庫,沒有必要修改
4.讀取數據時,會從數據庫中提取出大量的行,但只用到一小部分列
5.表很“寬”,即表中包含大量的列
6.查詢頻率相對較低(通常每臺服務器每秒查詢數百次或更少)
7.對于簡單查詢,允許大約50毫秒的延遲
8.列的值是比較小的數值和短字符串(例如,每個URL只有60個字節)
9.在處理單個查詢時需要高吞吐量(每臺服務器每秒高達數十億行)
10.不需要事務
11.數據一致性要求較低
12.每次查詢中只會查詢一個大表。除了一個大表,其余都是小表
13.查詢結果顯著小于數據源。即數據有過濾或聚合。返回結果不超過單個服務器內存大小

5.總結

SpringBoot 集成 clickhouse 并使用持久層框架mybatis-plus還是比較容易的,但是 clickhouse 數據庫的語法有所不同,mybatis-plus的部分api無法使用需要自己書寫。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的SpringBoot 集成 clickhouse + mybatis-plus 配置及使用问题说明(含建表语句、demo源码、测试说明)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。