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无法使用需要自己书写。

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

  1. SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源

    SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源 本文是SpringBoot第27讲,在某些场景下,Springboot需要使用多个数据源,以及某些场景 ...

  2. Springboot集成quartz定时任务可视化配置​​​​​​​

    转自我的个人博客:Springboot集成quartz定时任务可视化配置 使用quartz定时任务已经有一段时间了,今天记录一下Springboot 2.x集成Quartz. 1.引入quartz j ...

  3. springboot maven打包jar运行,springboot mybatis druid,demo源码

    注:本文介绍的mysql版本是5.x ,如果mysql升级到8 有几个地方需要改动 https://blog.csdn.net/a704397849/article/details/108396563 ...

  4. ClickHouse MergeTree表引擎和建表语句

    1. Clickhouse使用场景 ClickHouse是由俄罗斯Yandex公司开发的.面向列的数据库管理系统(DBMS),主要面向OLAP场景,用于在线分析处理查询,可以使用SQL查询实时生成数据 ...

  5. SpringBoot配置mybatis多数据源(包含单数据源)最终解决方案,带源码

    贴上我的github: https://github.com/mx342/testSpringbootMutipartDatasource.git 具体项目文件请查看github上面的项目 # tes ...

  6. springboot集成clickhouse之策略模式+线程池+反射实现动态批量操作

    线程池+策略模式+反射实现动态批量操作clickhouse 目录 前言 安装ck 整体设计 策略模式设计 线程池管理ck 码上有戏 反射核心 测试 简单说明 源码地址 目录 前言 之前实际项目中遇到过 ...

  7. springboot全省中小学师生共建习题交流与指导平台的设计与实现毕业设计源码031619

    全省中小学师生共建习题交流与指导平台 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于全省中小学师生共建习题交流与指导平台当然也不能排除在外,随着网 ...

  8. springboot+mysql+采用协同过滤算法的视频推荐系统的设计与实现 毕业设计-附源码261620

    摘  要 现阶段,社会的发展和科技的进步,以及大数据时代下纷繁数据信息的融合,使得人们在生产及生活过程中,都将会接收到各种类型的数据信息,而通过计算机技术与网络技术,则能够将众多人们所不了解或不常用的 ...

  9. Mybatis——注入执行sql查询、更新、新增以及建表语句

    文章目录 前言 案例 dao和mapper编写 XXXmapper.xml编写 编写业务层代码,进行注入调用 额外扩展--创建表语句 前言 在平时的项目开发中,mybatis应用非常广泛,但一般都是直 ...

最新文章

  1. 句法分析是什么?成分句法分析、依存句法分析又是什么?他们之间有什么区别?
  2. 阿里云 域名解析和主机绑定域名
  3. hdu 2518 Dominoes
  4. ubuntu deb package install
  5. Scrapy中的splash的安装应用
  6. 基于FPGA的UART接口协议设计
  7. 今天起,踏踏实实做技术
  8. P5666-[CSP-S2019]树的重心【树状数组】
  9. android渐变效果
  10. Anbox之push_locked与pop_locked(十三)
  11. ClickHouse大数据分析技术与实战
  12. 毕业半年,点滴在心中
  13. 央行数字货币离我们还有多远?
  14. 4线电阻屏linux驱动,TQ2440四线电阻式触摸屏驱动程序的分析
  15. 四、神奇的自然常数e之“自然”初现
  16. 小众但口碑好的便签软件
  17. solaris linux 计算磁盘容量 cyl alt sec
  18. R语言画图/绘图/作图2
  19. 25-方向传感器实现指南针
  20. VMware Workstation player16 虚拟机添加usb无线网卡

热门文章

  1. 通过Nagios监控weblogic服务
  2. [iOS常见问题] 关于使用QQ做第三方登录的问题!
  3. 写程序过程中写程序的注意事项
  4. jsp学习之包含——include
  5. HDU 1180 诡异的楼梯
  6. 华为三层交换机路由配置案例_{华为HCNP-RS}三层交换机的配置实例
  7. java 发送qq消息_php发送qq消息
  8. yolov3代码详解_代码资料
  9. 使用border-color设置输入框边框颜色后颜色不一致(左上边自动深色)解决方案
  10. 程序员的弓箭知识涉猎