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