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、资讯、面试等多个领域。无论是前沿科技的探索,还是实用技巧的总结,我们都致力于为大家呈现有价值的内容。期待与你共同进步,开启技术之旅。

相关推荐
kobe_t2 小时前
数据安全系列6:从SM4国密算法谈到Bouncy Castle
java
從南走到北3 小时前
JAVA露营基地预约户外露营预约下单系统小程序
java·开发语言·小程序
曹牧3 小时前
Java:实现List的定长截取
java·开发语言·list
水无痕simon3 小时前
8 shiro的web整合
java
CodeCraft Studio3 小时前
全球知名的Java Web开发平台Vaadin上线慧都网
java·开发语言·前端·vaadin·java开发框架·java全栈开发·java ui 框架
我是华为OD~HR~栗栗呀3 小时前
前端面经-高级开发(华为od)
java·前端·后端·python·华为od·华为·面试
城管不管4 小时前
Java EE、Java SE 和 Spring Boot
java·spring boot·java-ee
xdpcxq10294 小时前
EF Core框架数据库连接管理
java·jvm·数据库
熙客4 小时前
分布式ID解决方案
java·分布式·spring cloud·微服务