javascript
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: 6000Bean配置:用了druid監(jiān)控所以在這里邊初始化了,這個 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格式化日期字符串。
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,刪除和更新時會報錯:
報錯的原因說明:
clickhouse 數據庫的語法有一些不同:
所以刪除和修改的SQL要自己在xml文件內寫。
4.clickhouse應用場景(copy):
1.絕大多數請求都是用于讀訪問的
2.數據需要以大批次(大于1000行)進行更新,而不是單行更新;或者根本沒有更新操作
3.數據只是添加到數據庫,沒有必要修改
4.讀取數據時,會從數據庫中提取出大量的行,但只用到一小部分列
5.表很“寬”,即表中包含大量的列
6.查詢頻率相對較低(通常每臺服務器每秒查詢數百次或更少)
7.對于簡單查詢,允許大約50毫秒的延遲
8.列的值是比較小的數值和短字符串(例如,每個URL只有60個字節(jié))
9.在處理單個查詢時需要高吞吐量(每臺服務器每秒高達數十億行)
10.不需要事務
11.數據一致性要求較低
12.每次查詢中只會查詢一個大表。除了一個大表,其余都是小表
13.查詢結果顯著小于數據源。即數據有過濾或聚合。返回結果不超過單個服務器內存大小
5.總結
SpringBoot 集成 clickhouse 并使用持久層框架mybatis-plus還是比較容易的,但是 clickhouse 數據庫的語法有所不同,mybatis-plus的部分api無法使用需要自己書寫。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SpringBoot 集成 clickhouse + mybatis-plus 配置及使用问题说明(含建表语句、demo源码、测试说明)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot 集成 druid
- 下一篇: ClickHouse【环境搭建 02】设