1、添加引用 pom.xml
复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hrlaser</groupId>
<artifactId>clickhouse</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>clickhouse</name>
<description>HRLaser project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- pom.xml中必须包含Spring Boot基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.7.0</version> <!-- 建议与项目其他组件版本一致 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- ClickHouse JDBC驱动 -->
<dependency>
<groupId>com.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.2</version>
</dependency>
<!-- HTTP客户端依赖 -->
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.2.1</version>
</dependency>
<!-- 日志框架 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.32</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- Spring Boot Starter JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.example.ClickHouseDemo</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
2、添加配置application.yml
复制代码
spring:
datasource:
clickhouse:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: ru.yandex.clickhouse.ClickHouseDriver
url: jdbc:clickhouse://172.20.6.27:8123/hrlaser
username: default
password:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
#mybatis 配置
mybatis:
type-aliases-package: com/hrlaser/clickhouse/bean
config-location: classpath:mybatis-config.xml
mapper-locations: classpath:mapper/*.xml
3、mybatis-config.xml
复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//my4batis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--mybatis的核心配置文件是有一定顺序的 -->
<configuration>
<settings>
<!-- 开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
4、DruidConfig.java
复制代码
package com.hrlaser.clickhouse.utils;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DruidConfig {
@Value("${spring.datasource.clickhouse.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.clickhouse.url}")
private String url;
@Value("${spring.datasource.clickhouse.username}")
private String username;
@Value("${spring.datasource.clickhouse.password}")
private String password;
@Value("${spring.datasource.clickhouse.initial-size}")
private int initialSize;
@Value("${spring.datasource.clickhouse.min-idle}")
private int minIdle;
@Value("${spring.datasource.clickhouse.max-active}")
private int maxActive;
@Value("${spring.datasource.clickhouse.max-wait}")
private int maxWait;
@Value("${spring.datasource.clickhouse.time-between-eviction-runs-millis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.clickhouse.min-evictable-idle-time-millis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.clickhouse.validation-query}")
private String validationQuery;
@Value("${spring.datasource.clickhouse.test-while-idle}")
private boolean testWhileIdle;
@Value("${spring.datasource.clickhouse.test-on-borrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.clickhouse.test-on-return}")
private boolean testOnReturn;
@Value("${spring.datasource.clickhouse.pool-prepared-statements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.clickhouse.max-pool-prepared-statement-per-connection-size}")
private int maxPoolPreparedStatementPerConnectionSize;
@Bean
public DataSource clickhouseDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setInitialSize(initialSize);
dataSource.setMinIdle(minIdle);
dataSource.setMaxActive(maxActive);
dataSource.setMaxWait(maxWait);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setValidationQuery(validationQuery);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
dataSource.setPoolPreparedStatements(poolPreparedStatements);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
return dataSource;
}
}
5、Mapper.class
复制代码
package com.hrlaser.clickhouse.mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public class DeviceWeldingTimeMapper {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<Map<String, Object>> queryData() {
String sql = "SELECT * FROM device_welding_time";
return jdbcTemplate.queryForList(sql);
}
public int save() {
String sql = " INSERT into device_welding_time VALUES('1999277069438382085','IHA000SOC00283', 1,'A3MD40','1858410823164407810',null,NULL,0)";
jdbcTemplate.execute(sql);
return 1;
}
}
6、service.java
复制代码
package com.hrlaser.clickhouse.service;
import com.hrlaser.clickhouse.bean.DeviceWeldingTime;
import java.util.List;
import java.util.Map;
public interface DeviceWeldingTimeService {
List<Map<String, Object>> getClickHouseData();
int save(DeviceWeldingTime deviceWeldingTime);
}
7、ServiceImpl.java
复制代码
package com.hrlaser.clickhouse.service;
import com.hrlaser.clickhouse.bean.DeviceWeldingTime;
import com.hrlaser.clickhouse.mapper.DeviceWeldingTimeMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class DeviceWeldingTimeServiceImpl implements DeviceWeldingTimeService{
@Resource
private DeviceWeldingTimeMapper deviceWeldingTimeMapper;
@Override
public List<Map<String, Object>> getClickHouseData() {
return deviceWeldingTimeMapper.queryData();
}
@Override
public int save(DeviceWeldingTime deviceWeldingTime) {
return deviceWeldingTimeMapper.save();
}
}
9、controller
复制代码
package com.hrlaser.clickhouse.controller;
import com.hrlaser.clickhouse.bean.DeviceWeldingTime;
import com.hrlaser.clickhouse.service.DeviceWeldingTimeServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.java.Log;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* 设备焊接时长
* @author zhanghao
* @Date 2025-12-15
*/
@RestController
public class DeviceWeldingTimeController {
@Resource
private DeviceWeldingTimeServiceImpl deviceWeldingTimeService;
@GetMapping("/clickhouse/data")
public List<Map<String, Object>> getClickHouseData() {
return deviceWeldingTimeService.getClickHouseData();
}
/**
*注意:app或单片机直接访问的接口路径以dataOrigin开头----------所有与app或单片机交互的接口
*/
//上传设备单次焊接时长数据
@GetMapping("dataOrigin/save")
@Deprecated
public Integer saveData(){
//根据项目名称获取项目ID
return deviceWeldingTimeService.save(null);
}
}
10、启动类
复制代码
package com.hrlaser.clickhouse;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.hrlaser.clickhouse.mapper")
public class ClickhouseApplication {
public static void main(String[] args) {
SpringApplication.run(ClickhouseApplication.class, args);
}
}