采用springboot 2.7.10来操作clickhouse

news2024/12/26 11:09:34

1、采用springboot与clickhouse结合,其实和操作mysql,oracle区别不大。直接上代码开干

2、所采用的环境

jdk1.8

springboot 2.7.10

clickhouse 22.8.3.13

clickhouse 0.5.0

3、项目的pom.xml文件

<dependency>
				<groupId>com.clickhouse</groupId>
				<artifactId>clickhouse-jdbc</artifactId>
				<version>0.5.0</version>
			</dependency>
			<dependency>
				<groupId>com.clickhouse</groupId>
				<artifactId>clickhouse-client</artifactId>
				<version>0.5.0</version>
			</dependency>
			<dependency>
				<groupId>com.clickhouse</groupId>
				<artifactId>clickhouse-http-client</artifactId>
				<version>0.5.0</version>
			</dependency>

			<dependency>
				<groupId>org.apache.httpcomponents.client5</groupId>
				<artifactId>httpclient5</artifactId>
				<version>5.2.1</version>
			</dependency>
			<dependency>
				<groupId>org.apache.httpcomponents.client5</groupId>
				<artifactId>httpclient5-fluent</artifactId>
				<version>5.1.3</version>
			</dependency>

4、application.yml配置

spring:
  application:
    name: demobigdata
  profiles:
    active: mybatis
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 数据源  clickhouse
      clickhouse:
        driverClassName: com.clickhouse.jdbc.ClickHouseDriver
        url: jdbc:clickhouse://192.168.42.142:8123/bigdata
        username: default
        password: 123456
        initialSize: 10
        maxActive: 100
        minIdle: 10
        maxWait: 6000

5、application-mybatis.yml配置

#mybatis的相关配置
mybatis:
  #mapper配置文件
  type-aliases-package: org.demoflowable.pojo
  mapper-locations: classpath:META-INF/mapper/clickhouse/*.xml
  config-location: classpath:META-INF/spring/mybatis-config.xml

6、ClickHouseJdbcParamConfig


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

@Component
@ConfigurationProperties(prefix = "spring.datasource.druid.clickhouse")
public class ClickHouseJdbcParamConfig {

	private String driverClassName;
	private String url;
	private Integer initialSize;
	private Integer maxActive;
	private Integer minIdle;
	private Integer maxWait;

	private String username;
	private String password;

	public String getDriverClassName() {
		return driverClassName;
	}

	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Integer getInitialSize() {
		return initialSize;
	}

	public void setInitialSize(Integer initialSize) {
		this.initialSize = initialSize;
	}

	public Integer getMaxActive() {
		return maxActive;
	}

	public void setMaxActive(Integer maxActive) {
		this.maxActive = maxActive;
	}

	public Integer getMinIdle() {
		return minIdle;
	}

	public void setMinIdle(Integer minIdle) {
		this.minIdle = minIdle;
	}

	public Integer getMaxWait() {
		return maxWait;
	}

	public void setMaxWait(Integer maxWait) {
		this.maxWait = maxWait;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

 7、ClickHouseConfig


import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
public class ClickHouseConfig {

	@javax.annotation.Resource
	private ClickHouseJdbcParamConfig 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;
	}

}

8、UserInfo 


public class UserInfo {

	private Integer id;

	private String userName;

	private String passWord;

	private String phone;

	private String createDay;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getCreateDay() {
		return createDay;
	}

	public void setCreateDay(String createDay) {
		this.createDay = createDay;
	}
}

 

9、UserInfoMapper


import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.demoflowable.pojo.user.po.UserInfo;

public interface UserInfoMapper {

	void saveData(UserInfo userInfo);

	UserInfo selectById(@Param("id") Integer id);

	List<UserInfo> selectList();
}

10、UserInfoService 


import java.util.List;

import javax.annotation.Resource;

import org.demoflowable.clickhouse.dao.user.UserInfoMapper;
import org.demoflowable.pojo.user.po.UserInfo;
import org.springframework.stereotype.Service;

@Service
public class UserInfoService {

	@Resource
	private UserInfoMapper userInfoMapper;

	public void saveData(UserInfo userInfo) {
		userInfoMapper.saveData(userInfo);
	}

	public UserInfo selectById(Integer id) {
		return userInfoMapper.selectById(id);
	}

	public List<UserInfo> selectList() {
		return userInfoMapper.selectList();
	}

}

11、UserInfoController


import java.util.List;

import javax.annotation.Resource;

import org.demoflowable.pojo.user.po.UserInfo;
import org.demoflowable.service.user.UserInfoService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserInfoController {

	@Resource
	private UserInfoService userInfoService;

	/**
	 * 保存
	 * @return
	 */
	@GetMapping("/saveUser")
	public String saveUser() {
		UserInfo userInfo = new UserInfo();
		userInfo.setId(4);
		userInfo.setUserName("xiaolin");
		userInfo.setPassWord("54321");
		userInfo.setPhone("18500909876");
		userInfo.setCreateDay("2022-02-06");
		userInfoService.saveData(userInfo);
		return "success";
	}

	/**
	 * 根据id查询
	 * @param id
	 * @return
	 */
	@GetMapping("/getById")
	public UserInfo getById(int id) {
		return userInfoService.selectById(id);
	}

	/**
	 * 查询所有
	 * @return
	 */
	@GetMapping("/getList")
	public List<UserInfo> getList() {
		return userInfoService.selectList();
	}
}

12、Application

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description: 启动类
 */
@SpringBootApplication
@ComponentScan({ "org.demoflowable" })
@MapperScan(basePackages = "org.demoflowable.*.dao")
public class Application {

	/**
	 * @Title: main
	 * @Description: 启动类
	 * @param args
	 * @date 2023-11-08 23:49:23
	 */
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

启动代码成功

12、查看接口数据

数据对应上了,springboot与clickhouse集成成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM框架的共享单车管理系统小程序系统的设计和实现

基于SSM框架的共享单车管理系统小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;…

整理笔记——稳压直流电路知识

一、稳压直流电路的基本构成 稳压直流电路就是把生活中常用的220V交流电转换成稳压直流电。如生活中常见的手机充电器就是一个稳压直流电路。其主要功能是提供持续稳定且满足要求的电压。 直流稳压电路由一下几个模块组成&#xff1a; 下面具体分析下各个模块的功能。…

编译原理——构造预测分析表(判断某字符串是否是文法G(E)的句子)

进入今天的学习前&#xff0c;若不理解LL(1)文法中的首符号集&#xff0c;后跟符号集和选择符号集&#xff0c;可看&#xff1a; http://t.csdnimg.cn/BjSHv 构造预测分析表的步骤&#xff1a; 步骤1&#xff1a;对文法的每个规则U->u,执行步骤2与3 步骤2&#xff1a;对…

Springboot---整合对象储存服务MinIO

OSS 「OSS」的英文全称是Object Storage Service&#xff0c;翻译成中文就是「对象存储服务」&#xff0c;官方一点解释就是对象存储是一种使用HTTP API存储和检索非结构化数据和元数据对象的工具。 白话文解释就是将系统所要用的文件上传到云硬盘上&#xff0c;该云硬盘提供了…

chatGPT使用情况

作为一个语言模型&#xff0c;我&#xff08;ChatGPT&#xff09;被用于各种不同的应用场景。以下是一些常见的情况&#xff1a; 个人助手&#xff1a;人们可以使用我来获取信息、解答问题、获取建议或进行闲聊。我可以提供各种知识和帮助&#xff0c;从学术知识到日常生活的建…

nginx发布vue项目

1、docker拉取nginx镜像 docker pull nginx:latest2、docker安装nginx # 第一个80端口是主机端口&#xff0c;第二个80端口是内部端口&#xff0c;主机的端口 80 映射到容器内部的端口80 docker run -d --name nginx -p 80:80 -p 443:443 nginx:lateste3、输入IP访问 说明我们…

javaEE进阶

Cookie 是可以伪造的,比如说学生证是可以伪造的 Session 是不可以伪造的,这是学校系统记录在册的 如何获取 Cookie 我们先用 Servlet 原生的获取 cookie 的方式 我们在浏览器进行访问 但是实际上目前是没有 cookie 的,我们按 F12 进行添加 然后再重新访问,就能在 idea 看到 …

什么是高敏感型人格,高敏型人格如何改变自己

什么是高敏感型人格&#xff1f; 高敏感型人格&#xff0c;指的是个体情绪敏感度高&#xff0c;有好处也有不好的地方&#xff0c;比如说好处吧&#xff0c;高敏感型人格他们对情绪的感知更加细腻&#xff0c;这种特征在创作和设计方面&#xff0c;往往能到达常人所不能达到的…

NIO讲解

一&#xff1a;什么是NIO? 二&#xff1a;NIO三大组件 1. channel channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发006:基于redis查找玩家姓名+游戏业务实现总结

文章目录 1 Redis的安装与API的使用1.1 安装目录及环境变量1.2 设置远程客户端连接和守护进程1.3 启动redis1.4 Hiredis API的使用1.5 我的动态库和头文件 2 Redis的使用2.1 初始化时候2.2 结束的时候 3 测试4 Makefile5 游戏业务总结 1 Redis的安装与API的使用 1.1 安装目录及…

Kotlin HashMap entries.filter过滤forEach

Kotlin HashMap entries.filter过滤forEach fun main(args: Array<String>) {val hashMap HashMap<String, Int>()hashMap["a"] 1hashMap["b"] 2hashMap["c"] 3println(hashMap)hashMap.entries.filter {println("filter $…

Python用requests库采集充电桩LBS位置经纬度信息

这是一个使用Python的requests库来爬取网页内容的示例。首先&#xff0c;我们需要导入requests库。然后&#xff0c;我们需要定义一个函数来处理请求。在这个函数中&#xff0c;我们需要设置爬虫IP服务器的URL和端口号&#xff0c;然后使用requests.get来获取网页内容。最后&am…

将 Figma 轻松转换为 Sketch 的免费方法

最近浏览网站的时候&#xff0c;发现很多人不知道Figma是怎么转Sketch的。众所周知&#xff0c;Figma支持Sketch文件的导入&#xff0c;但不支持Sketch的导出&#xff0c;那么Figma是如何转Sketch的呢&#xff1f;不用担心&#xff0c;建议使用神器即时设计。它是一个可以实现在…

【C++】类和对象(一):什么是面向对象,访问限定符有哪些,类定义细节,结构体和类的关系。

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

使用ffmpeg调用电脑自带的摄像头和扬声器录制音视频

1、打开cmd&#xff0c;执行chcp 65001,修改cmd的编码格式为utf8&#xff0c;避免乱码 2、执行指令ffmpeg -list_devices true -f dshow -i dummy,查看当前window的音频和视频名称 3、打开windows系统的"打开声音设置"–“麦克风隐私设置”–"允许应用访问你…

Vue 将响应式数据转为普通对象

toRaw&#xff1a;将一个 reactive 生成的响应式数据转为普通对象。 toRaw 适用于&#xff1a;获取响应式数据对应的普通对象&#xff0c;对这个普通对象所有的操作&#xff0c;都不会引起页面的更新。 markRaw&#xff1a;标记一个对象&#xff0c;使其永远不会再成为响应式…

C++中将数据添加到文件的末尾

参考:https://blog.csdn.net/qq_23880193/article/details/44279283 C中文件的读取需要包含fstream文件&#xff0c;即&#xff1a;#include 文件的读取和写入是是通过流操作来的&#xff0c;这不像输入、输出流那样&#xff0c;库中已经定义了对象cin和cout 文件的读取需要声…

lv11 嵌入式开发 ARM体系结构理论基础2

目录 1 ARM概述 1.1 处理器分类 1.2 SOC概念 2 ARM指令集概述 2.1 ARM指令集 2.2 编译原理 3 ARM存储模型 3.1 ARM数据类型 3.2 字节序 3.3 ARM指令存储 4 ARM工作模式 4.1 ARM工作模式分类 1 ARM概述 ARM的含义 ARM&#xff08;Advanced RISC Machines&#…

VB自定义版影音播放器

利用VB开放自定义播放器&#xff0c;基于系统Quatrz.dll的接口将媒体显示到指定的控件容器中&#xff0c;比如PictureBox,实现播放的基本功能&#xff0c;播放&#xff0c;暂停&#xff0c;停止&#xff0c;音量&#xff0c;平衡&#xff0c;进度&#xff0c;媒体的总时间和进度…

react组件间通信之context

一般用于【祖组件】与【后代组件】间通信 案例&#xff1a; A,B,C,D四个组件的关系分别为&#xff1a;爷爷&#xff0c;爸爸&#xff0c;儿子&#xff0c;孙子 从A向C传递参数&#xff1a;C组件为类式组件 从A向D传递参数&#xff1a;D组件为函数组件 import React, { Componen…