SpringBoot集成Clickhouse

摘要

本文介绍了Clickhouse如何集成到Springboot项目中,目前mvn引用比较多的是0.6.5版本,因此用此版本做演示。

使用示例

1.引入依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- clickhouse -->
<dependency>
    <groupId>com.clickhouse</groupId>
    <artifactId>clickhouse-jdbc</artifactId>
    <version>0.6.5</version>
</dependency>
<dependency>
    <groupId>org.lz4</groupId>
    <artifactId>lz4-java</artifactId>
    <version>1.8.0</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>

2.配置数据库信息application.yml

yaml 复制代码
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    clickhouse:
      driverClassName: com.clickhouse.jdbc.ClickHouseDriver
      url: jdbc:clickhouse://192.168.233.129:8123/default
      username: default
      password: 123456
      initialSize: 10
      maxActive: 100
      minIdle: 10
      maxWait: 6000 

3.配置类1

typescript 复制代码
package org.coffeebeans.clickhouse;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * <li>ClassName: JdbcParamConfig </li>
 * <li>Author: OakWang </li>
 */
@Data
@Component
@ConfigurationProperties(prefix = "spring.datasource.clickhouse")
public class JdbcParamConfig {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
    private Integer initialSize;
    private Integer maxActive;
    private Integer minIdle;
    private Integer maxWait;
}

4.配置类2

ini 复制代码
package org.coffeebeans.clickhouse;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
 * <li>ClassName: ClickHouseConfig </li>
 * <li>Author: OakWang </li>
 */
@Configuration
public class ClickHouseConfig {

    @Autowired
    private JdbcParamConfig jdbcParamConfig ;

    @Bean
    public DataSource dataSource() {
       DruidDataSource datasource = new DruidDataSource();
       datasource.setUrl(jdbcParamConfig.getUrl());
       datasource.setDriverClassName(jdbcParamConfig.getDriverClassName());
       datasource.setInitialSize(jdbcParamConfig.getInitialSize());
       datasource.setMinIdle(jdbcParamConfig.getMinIdle());
       datasource.setMaxActive(jdbcParamConfig.getMaxActive());
       datasource.setMaxWait(jdbcParamConfig.getMaxWait());
       datasource.setUsername(jdbcParamConfig.getUsername());
       datasource.setPassword(jdbcParamConfig.getPassword());
       return datasource;
    }
}

5.实体类映射表

kotlin 复制代码
package org.coffeebeans.clickhouse;

import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;

/**
 * <li>ClassName: User </li>
 * <li>Author: OakWang </li>
 */
@Data
public class User {
    @TableField("id")
    private Long id;

    @TableField("name")
    private String name;

    @TableField("create_time")
    private String createTime;

    public User(Long id, String name, String createTime) {
       this.id = id;
       this.name = name;
       this.createTime = createTime;
    }
}

6.mapper

less 复制代码
package org.coffeebeans.clickhouse;

import org.apache.ibatis.annotations.*;
import java.util.List;

@Mapper
public interface UserMapper {

    @Insert("insert into user(id,name) values(#{id},#{name})")
    void addUser(User user);

    @Select("select * from user where id=#{id} limit 1")
    User selectById(@Param("id") Long id);

    @Select("select * from user order by id")
    List<User> selectList();

    @Update("alter table user update name=#{name} where id=#{id}")
    void updateUser(User user);

    @Delete("alter table user delete where id=#{id}")
    void deleteUser(@Param("id") Long id);
}

7.service

typescript 复制代码
package org.coffeebeans.clickhouse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * <li>ClassName: ClickHouseService </li>
 * <li>Author: OakWang </li>
 */
@Service
public class ClickHouseService {

    @Autowired
    UserMapper UserMapper;

    public void addUser(User user) {
       UserMapper.addUser(user);
    }

    public User selectById(Long id) {
       return UserMapper.selectById(id);
    }

    public List<User> selectList() {
       return UserMapper.selectList();
    }

    public void updateUser(User user) {
       UserMapper.updateUser(user);
    }

    public void deleteUser(Long id) {
       UserMapper.deleteUser(id);
    }

}

8.测试类

typescript 复制代码
package org.coffeebeans;

import lombok.extern.slf4j.Slf4j;
import org.coffeebeans.clickhouse.ClickHouseService;
import org.coffeebeans.clickhouse.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Objects;

/**
 * <li>ClassName: org.coffeebeans.UserTest </li>
 * <li>Author: OakWang </li>
 */
@Slf4j
@SpringBootTest
public class UserTest {

    @Autowired
    private ClickHouseService clickHouseService;

    @Test
    void test1() {
       User user1 = new User(2L, "王二", null);
       clickHouseService.addUser(user1);
       log.info("添加成功");
    }

    @Test
    void test2() {
       User user= clickHouseService.selectById(1L);
       log.info(String.valueOf(user));
    }

    @Test
    void test3() {
       List<User> users = clickHouseService.selectList();
       log.info(String.valueOf(users));
    }

    @Test
    void test4() {
       UserUser = clickHouseService.selectById(1L);
       if (Objects.nonNull(User)) {
          User.setName("李四");
          clickHouseService.updateUser(User);
          log.info("修改成功");
       } else {
          log.info("修改失败");
       }
    }

    @Test
    void test5() {
       clickHouseService.deleteUser(1L);
       log.info("删除成功");
    }
}

9.测试

建表

sql 复制代码
CREATE TABLE user
(
    `id` UInt64,
    `name` String,
    `create_time` DateTime DEFAULT CAST(now(),'DateTime')
)
ENGINE = MergeTree
PRIMARY KEY id
ORDER BY id;

新增

查询单条

查询多条

更新

删除

总结

以上我们了解了SpringBoot2.7.18集成Clickhouse0.6.5的步骤,这是集成的一种方式。

关注公众号:咖啡Beans

在这里,我们专注于软件技术的交流与成长,分享开发心得与笔记,涵盖编程、AI、资讯、面试等多个领域。无论是前沿科技的探索,还是实用技巧的总结,我们都致力于为大家呈现有价值的内容。期待与你共同进步,开启技术之旅。

相关推荐
Aevget14 小时前
「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
java·ide·java-ee·eclipse·myeclipse
黄昏晓x15 小时前
C++----多态
java·jvm·c++
Brookty15 小时前
【算法】前缀和
java·学习·算法·前缀和·动态规划
少许极端15 小时前
算法奇妙屋(七)-字符串操作
java·开发语言·数据结构·算法·字符串操作
懒羊羊不懒@15 小时前
Java基础语法—字面量、变量详解、存储数据原理
java·开发语言
望获linux16 小时前
【实时Linux实战系列】实时 Linux 的自动化基准测试框架
java·大数据·linux·运维·网络·elasticsearch·搜索引擎
Code blocks16 小时前
GB28181视频服务wvp部署(一)
java·spring boot·后端
我命由我1234516 小时前
Spring Boot - Spring Boot 静态资源延迟响应(使用拦截器、使用过滤器、使用 ResourceResolver)
java·spring boot·后端·spring·java-ee·intellij-idea·intellij idea
Xzh042316 小时前
前后端学习的交界
java·ajax·maven·axios·测试
豆沙沙包?16 小时前
2025年--Lc201- 378. 有序矩阵中第 K 小的元素(排序)--Java版
java·线性代数·矩阵