SpringBoot+ClickHouse集成

前面已经完成ClickHouse的搭建,创建账号,创建数据库,保存数据库等,接下来就是在SpringBoot项目中集成ClickHouse。

一,引入依赖

<!-- SpringBoot集成ClickHouse -->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
	<version>3.5.5</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.38</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.13</version>
</dependency>
<dependency>
	<groupId>commons-lang</groupId>
	<artifactId>commons-lang</artifactId>
	<version>2.6</version>
</dependency>
<!-- clickHouse数据库 -->
<dependency>
	<groupId>ru.yandex.clickhouse</groupId>
	<artifactId>clickhouse-jdbc</artifactId>
	<version>0.1.53</version>
</dependency>

二,添加数据源配置

1,在applicaiton.yml中添加数据源配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    click:
      driverClassName: ru.yandex.clickhouse.ClickHouseDriver
      url: jdbc:clickhouse://x.x.x.x:8123/account
      username: clickhouse
      password: clickhouse
      initialSize: 10
      maxActive: 100
      minIdle: 10
      maxWait: 6000

2,在applicaiton.yml中添加mybatis-plus配置

mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: true
    lazy-loading-enabled: true
    multiple-result-sets-enabled: true
    use-generated-keys: true
    default-statement-timeout: 60
    default-fetch-size: 100
  type-aliases-package: com.xxx.springboot.repository.entity

三,添加自定义数据源

1,创建配置类

package com.xxx.springboot.config;

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

/**
 * @author wangrong03
 * @date 2024/11/5 下午3:59
 */
@Data
@Component
@ConfigurationProperties(prefix = "spring.datasource.click")
public class ClickHouseCommonConfig {
    private String driverClassName ;
    private String url ;
    private Integer initialSize ;
    private Integer maxActive ;
    private Integer minIdle ;
    private Integer maxWait ;
    private String username;
    private String password;
}

2,新增数据源

package com.xxx.springboot.config;

import com.alibaba.druid.pool.DruidDataSource;
import jakarta.annotation.Resource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;


@Configuration
@EnableConfigurationProperties(ClickHouseCommonConfig.class)
@MapperScan(basePackages = {"com.xxx.springboot.repository.mapper"},
    sqlSessionFactoryRef = "SqlSessionFactory")
public class DruidConfig {
    @Resource
    private ClickHouseCommonConfig clickHouseCommonConfig;

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

    @Bean("SqlSessionFactory")
    public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
        configuration.setDefaultFetchSize(100);
        configuration.setDefaultStatementTimeout(60);
        sqlSessionFactoryBean.setMapperLocations(
            new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
        sqlSessionFactoryBean.setConfiguration(configuration);
        return sqlSessionFactoryBean.getObject();
    }
}

3,在SpringBootApplicaiton的注解下加上MapperScan注解

四,实现新增和删除

1,mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.springboot.repository.mapper.StudentMapper">
    <resultMap id="BaseResultMap" type="com.xxx.springboot.repository.entity.Student">
        <id column="StudentID" property="studentId" jdbcType="INTEGER" />
        <result column="StudentName" property="studentName" jdbcType="VARCHAR" />
        <result column="Address" property="address" jdbcType="VARCHAR" />
        <result column="Grade" property="grade" jdbcType="INTEGER" />
        <result column="Age" property="age" jdbcType="INTEGER" />
        <result column="Gender" property="gender" jdbcType="INTEGER" />
        <result column="StartTime" property="startTime" jdbcType="VARCHAR" />
    </resultMap>
    <insert id="saveData" parameterType="com.xxx.springboot.repository.entity.Student" >
        INSERT INTO student
        (StudentID,StudentName,Address,Grade,Age,Gender,StartTime)
        VALUES
        (#{studentId,jdbcType=INTEGER},#{studentName,jdbcType=VARCHAR},#{address,jdbcType=VARCHAR},
        #{grade,jdbcType=INTEGER},#{age,jdbcType=INTEGER},#{gender,jdbcType=INTEGER},#{startTime,jdbcType=VARCHAR})
    </insert>
    <select id="queryAll" resultMap="BaseResultMap">
        SELECT StudentID,StudentName,Address,Grade,Age,Gender,StartTime FROM student
    </select>
</mapper>

2, mapper

后面就是在service里调用这个save和queryAll方法就可以,不再赘述了。

上一篇:Android Studio 中关于com.github.barteksc:android-pdf-viewer 无法正确加载的问题


下一篇:springboot基于SpringBoot的旅游网站的设计与实现