前言clickhouse是俄罗斯yandex发布的一款数据分析型数据库支持sql语法,详情可以访问官网,目前网上还没有mybatisplus整合clickhouse文章发布故此写一遍博文记录整理一下整个过程
完整工程已提交至码云:https://gitee.com/yankangkk/watchmen
关于大家在评论区经常留言关于分页的问题,其实在之前的朋友已经有了好的解决办法,下面附上截图,供大家参考。

连接池部分用的是阿里的druid下面是数据库连接的配置类
import javax.annotation.resource;
import javax.sql.datasource;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import com.alibaba.druid.pool.druiddatasource;
/**
*
* @author kk
* druid数据库连接池配置
*/
@configuration
public class druidconfig {
@resource
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());
return datasource;
}
}import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.stereotype.component;
import lombok.data;
/**
* @author kk
* clickhouse连接信息配置
*/
@data
@component
@configurationproperties(prefix = "spring.datasource.click")
public class jdbcparamconfig {
private string driverclassname;
private string url ;
private integer initialsize ;
private integer maxactive ;
private integer minidle ;
private integer maxwait ;
}分页插件配置
import java.util.properties;
import org.springframework.context.annotation.bean;
import com.github.pagehelper.pagehelper;
/**
*
* @author kk
* mybatisplus相关配置
*/
@configuration
public class mybatisplusconfig {
@bean
public pagehelper pagehelper() {
pagehelper pagehelper = new pagehelper();
properties properties = new properties();
properties.setproperty("offsetaspagenum", "true");
properties.setproperty("rowboundswithcount", "true");
properties.setproperty("reasonable", "true");
pagehelper.setproperties(properties);
return pagehelper;
}
}实体类对应clickhouse中的表
import java.util.date;
import com.baomidou.mybatisplus.annotation.tablename;
import lombok.allargsconstructor;
import lombok.builder;
import lombok.data;
import lombok.noargsconstructor;
/**
*
* @author kk
* 实体类
*/
@tablename("test_table")
@data
@noargsconstructor
@allargsconstructor
@builder
public class testtableentity {
private long id;
private string name;
private string value;
private date createdate;
private object array;
}import com.baomidou.mybatisplus.core.mapper.basemapper;
import com.watchmen.clickhouse.entity.testtableentity;
public interface testtablemapper extends basemapper<testtableentity> {
}import org.springframework.stereotype.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import com.baomidou.mybatisplus.extension.service.iservice;
import com.watchmen.clickhouse.entity.testtableentity;
public interface testtableservice extends iservice<testtableentity>{
/**
* 分页查询
* @param page 第几页
* @param pagesize 每页条数
* @return page
*/
page<testtableentity> list(integer page, integer pagesize);
}import org.springframework.stereotype.service;
import com.baomidou.mybatisplus.core.conditions.query.querywrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.page;
import com.baomidou.mybatisplus.extension.service.impl.serviceimpl;
import com.watchmen.clickhouse.entity.testtableentity;
import com.watchmen.clickhouse.mapper.testtablemapper;
import com.watchmen.clickhouse.service.testtableservice;
@service
public class testtableserviceimpl extends serviceimpl<testtablemapper,testtableentity> implements testtableservice {
@override
public page<testtableentity> list(integer page, integer pagesize) {
return this.page(new page<testtableentity>(page,pagesize),
new querywrapper<testtableentity>());
}
}启动类加上扫描注解
import org.mybatis.spring.annotation.mapperscan;
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
@mapperscan("com.watchmen.clickhouse.mapper")
@springbootapplication
public class demoapplication {
public static void main(string[] args) {
springapplication.run(demoapplication.class, args);
}
}application.yml配置 106.12.154.174是我在百度云上搭建的clickhouse搭建可以直接连接测试使用
spring:
datasource:
type: com.alibaba.druid.pool.druiddatasource
click:
driverclassname: ru.yandex.clickhouse.clickhousedriver
url: jdbc:clickhouse://106.12.154.174:8123/default?max_result_bytes=10000
username: root
paswword:
initialsize: 10
maxactive: 100
minidle: 10
maxwait: 6000至此整合就已经完成了写一个 路由层测试一下
import java.util.list;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.restcontroller;
import com.watchmen.clickhouse.entity.testtableentity;
import com.watchmen.clickhouse.service.testtableservice;
/**
*
* @author kk
* clickhouse增删改查测试路由
*/
@restcontroller
@requestmapping("/clickhouse")
public class clickhousetest {
@autowired
testtableservice testtableservice;
/**
* 分页查询
* @return
*/
@getmapping("/list")
public object list(@requestparam(value = "page",defaultvalue = "1") integer page,
@requestparam(value = "page_size",defaultvalue = "10") integer pagesize) {
list<testtableentity> list = testtableservice.list();
system.out.println(list);
return testtableservice.list(page, pagesize);
}
}测试表sql脚本
create table default.test_table ( `id` uint16, `name` string, `value` string, `create_date` date, `array` array(string) ) engine = mergetree(create_date, id, 8192)
经过测试我发现pagehelper和mybatis-plsu都不能正确识别clickhouse数据,只能自己写分页语句,clickhouse的删除语句也比较特殊这里一并写了出来,官方的建议还是批量删除,虽然它支持单条删除,代码如下:
package com.watchmen.clickhouse.mapper;
import java.util.list;
import org.apache.ibatis.annotations.delete;
import org.apache.ibatis.annotations.select;
import com.baomidou.mybatisplus.core.mapper.basemapper;
import com.watchmen.clickhouse.entity.testtableentity;
public interface testtablemapper extends basemapper<testtableentity> {
/**
* 分页查询
* @param page
* @param pagesize
* @return
*/
@select("select * from test_table tt limit #{page}, #{pagesize}")
list<testtableentity> selectpages(integer page, integer pagesize);
/**
* @author kk
* 按id数组数据删除数据
*/
@delete("alter table test_table delete where id = #{id}")
void deletebyid(integer id);
}项目也集成了knife4j可以直接调试
百度云的knife4j是:http://106.12.154.174:8080/doc.html#/home可以直接调试

pom的jar包依赖
<!-- 数据库相关 -->
<dependency>
<groupid>org.mybatis.spring.boot</groupid>
<artifactid>mybatis-spring-boot-starter</artifactid>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupid>com.baomidou</groupid>
<artifactid>mybatis-plus-boot-starter</artifactid>
<version>${mybatis-plsu.version}</version>
</dependency>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<scope>runtime</scope>
</dependency>
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>druid-spring-boot-starter</artifactid>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupid>com.github.pagehelper</groupid>
<artifactid>pagehelper-spring-boot-starter</artifactid>
<version>${pagehelper.version}</version>
</dependency>
<!-- sql性能分析插件 -->
<dependency>
<groupid>p6spy</groupid>
<artifactid>p6spy</artifactid>
<version>${p6spy.version}</version>
</dependency>
<!-- clickhouse-jdbc驱动 -->
<dependency>
<groupid>ru.yandex.clickhouse</groupid>
<artifactid>clickhouse-jdbc</artifactid>
<version>${clickhouse-jdbc.version}</version>
</dependency>到此这篇关于mybatisplus3.3.1整合clickhouse的过程的文章就介绍到这了,更多相关mybatisplus整合clickhouse内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论