1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SpringBoot + Mybatis-puls + ClickHouse增刪改查入門教程

        共 7262字,需瀏覽 15分鐘

         ·

        2021-11-05 14:17

        你知道的越多,不知道的就越多,業(yè)余的像一棵小草!

        你來,我們一起精進!你不來,我和你的競爭對手一起精進!

        編輯:業(yè)余草

        blog.csdn.net/qq_15371293

        推薦:https://www.xttblog.com/?p=5288

        項目場景:

        ClickHouse 操作基于 Mybatis-plus 源碼擴展開發(fā)。解決 ClickHouse 的修改和刪除 SQL 操作與 MySQL 不相同。

        基于 Mybatis-puls

        update、updateById、delete 函數(shù)。

        SqlMethodDiv.java?文件枚舉類,對 SQL 腳本定義

        package?com.demo.infrastructure.injector.enums;

        public?enum?SqlMethodDiv?{

        ????/**
        ?????*?刪除
        ?????*/

        ????DELETE_BY_ID("deleteByIdClickHouse",?"根據(jù)ID?刪除一條數(shù)據(jù)",?""),

        ????/**
        ?????*?邏輯刪除
        ?????*/

        ????LOGIC_DELETE_BY_ID("deleteByIdClickHouse",?"根據(jù)ID?邏輯刪除一條數(shù)據(jù)",?""),

        ????/**
        ?????*?修改?條件主鍵
        ?????*/

        ????UPDATE_BY_ID("updateByIdClickHouse",?"根據(jù)ID?選擇修改數(shù)據(jù)",?""),
        ????/**
        ?????*?修改?條件主鍵
        ?????*/

        ????UPDATE("updateClickHouse",?"根據(jù)?whereEntity?條件,更新記錄",?"");

        ????private?final?String?method;
        ????private?final?String?desc;
        ????private?final?String?sql;

        ????SqlMethodDiv(String?method,?String?desc,?String?sql)?{
        ????????this.method?=?method;
        ????????this.desc?=?desc;
        ????????this.sql?=?sql;
        ????}

        ????public?String?getMethod()?{
        ????????return?method;
        ????}

        ????public?String?getDesc()?{
        ????????return?desc;
        ????}

        ????public?String?getSql()?{
        ????????return?sql;
        ????}
        }

        UpdateByIdClickHouse.java 類文件,繼承 AbstractMethod 重載?injectMappedStatement

        package?com.demo.infrastructure.injector.methods;

        import?com.baomidou.mybatisplus.core.injector.AbstractMethod;
        import?com.baomidou.mybatisplus.core.metadata.TableInfo;
        import?com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
        import?com.demo.infrastructure.injector.enums.SqlMethodDiv;
        import?org.apache.ibatis.executor.keygen.NoKeyGenerator;
        import?org.apache.ibatis.mapping.MappedStatement;
        import?org.apache.ibatis.mapping.SqlSource;

        /**
        ?*?@desc?通過MybatisPlus源碼?擴展修改
        ?*/

        public?class?UpdateByIdClickHouse?extends?AbstractMethod?{

        ????@Override
        ????public?MappedStatement?injectMappedStatement(Class?mapperClass,?Class?modelClass,?TableInfo?tableInfo)?{
        ????????SqlMethodDiv?sqlMethod?=?SqlMethodDiv.UPDATE_BY_ID;

        ????????final?String?additional?=?optlockVersion(tableInfo)?+?tableInfo.getLogicDeleteSql(true,?true);
        ????????String?sql?=?String.format(sqlMethod.getSql(),?tableInfo.getTableName(),
        ????????????????this.sqlSet(tableInfo.isWithLogicDelete(),?false,?tableInfo,?false,?ENTITY,?ENTITY_DOT),
        ????????????????tableInfo.getKeyColumn(),?ENTITY_DOT?+?tableInfo.getKeyProperty(),?additional);
        ????????SqlSource?sqlSource?=?languageDriver.createSqlSource(configuration,?sql,?modelClass);
        ????????return?this.addInsertMappedStatement(mapperClass,?modelClass,
        ????????????????sqlMethod.getMethod(),?sqlSource,?new?NoKeyGenerator(),?null,?null);
        ????}

        ????/**
        ?????*?SQL?更新?set?語句
        ?????*?@param?logic??是否邏輯刪除注入器
        ?????*?@param?ew?????是否存在?UpdateWrapper?條件
        ?????*?@param?table??表信息
        ?????*?@param?alias??別名
        ?????*?@param?prefix?前綴
        ?????*?@return?sql
        ?????*/

        ????@Override
        ????protected?String?sqlSet(boolean?logic,?boolean?ew,?TableInfo?table,?boolean?judgeAliasNull,?final?String?alias,
        ????????????????????????????final?String?prefix)
        ?
        {
        ????????String?sqlScript?=?table.getAllSqlSet(logic,?prefix);
        ????????if?(judgeAliasNull)?{
        ????????????sqlScript?=?SqlScriptUtils.convertIf(sqlScript,?String.format("%s?!=?null",?alias),?true);
        ????????}
        ????????if?(ew)?{
        ????????????sqlScript?+=?NEWLINE;
        ????????????sqlScript?+=?SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(U_WRAPPER_SQL_SET),
        ????????????????????String.format("%s?!=?null?and?%s?!=?null",?WRAPPER,?U_WRAPPER_SQL_SET),?false);
        ????????}
        ????????sqlScript?=?convertSet(sqlScript);
        ????????return?sqlScript;
        ????}

        ????/**
        ?????*?去掉sest?和?suffixOverrides=","代表去掉第一個逗號
        ?????*
        ?????*?@param?sqlScript
        ?????*?@return
        ?????*/

        ????public?static?String?convertSet(final?String?sqlScript)?{
        ????????return?"?"?+?sqlScript?+?"\n"?+?"";
        ????}
        }

        ClickHouseSqlInjector.java 注冊方法,繼承?DefaultSqlInjector

        package?com.demo.infrastructure.injector;

        import?com.baomidou.mybatisplus.core.injector.AbstractMethod;
        import?com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
        import?com.demo.infrastructure.injector.methods.DeleteClickHouse;
        import?com.demo.infrastructure.injector.methods.UpdateByIdClickHouse;
        import?com.demo.infrastructure.injector.methods.UpdateClickHouse;

        import?java.util.List;

        /**
        ?*?注冊方法
        ?*/

        public?class?ClickHouseSqlInjector?extends?DefaultSqlInjector?{

        ????@Override
        ????public?List?getMethodList(Class?mapperClass)?{
        ????????/**
        ?????????*?這里很重要,先要通過父類方法,獲取到原有的集合,不然會自帶的通用方法會失效的
        ?????????*/

        ????????List?methodList?=?super.getMethodList(mapperClass);
        ????????/***
        ?????????*?添加自定義方法類
        ?????????*/

        ????????methodList.add(new?UpdateByIdClickHouse());
        ????????methodList.add(new?UpdateClickHouse());
        ????????methodList.add(new?DeleteClickHouse());
        ????????return?methodList;
        ????}
        }

        編寫SuperMapper 繼承BaseMapper ,讓所有Mapper 繼承extends

        package?com.demo.domain.mapper;

        import?com.baomidou.mybatisplus.core.conditions.Wrapper;
        import?com.baomidou.mybatisplus.core.mapper.BaseMapper;
        import?org.apache.ibatis.annotations.Param;

        import?java.io.Serializable;

        /**
        ?*?自定義方法
        ?*/

        @SuppressWarnings("all")
        public?interface?SuperMapper<T>?extends?BaseMapper<T>?{

        ????/**
        ?????*?@return
        ?????*?@Description:?刪除并填充刪除人信息
        ?????*?@param:?id?主鍵id
        ?????*?@auther:?zpq
        ?????*?@date:?2020/11/10?11:47?上午
        ?????*/

        ????boolean?updateByIdClickHouse(@Param("et")?T?entity);

        ????/**
        ?????*?@return
        ?????*?@Description:?刪除并填充刪除人信息
        ?????*?@param:?id?主鍵id
        ?????*?@auther:?zpq
        ?????*?@date:?2020/11/10?11:47?上午
        ?????*/

        ????boolean?updateClickHouse(@Param("et")?T?entity,?@Param("ew")?Wrapper?updateWrapper);

        ????/**
        ?????*?主鍵刪除
        ?????*?@param?id
        ?????*?@return
        ?????*/

        ????int?deleteByIdClickHouse(Serializable?id);
        }

        單元測試看效果

        package?com.demo.test;

        import?com.demo.DemoClickHouse;
        import?com.demo.domain.dataobject.User;
        import?com.demo.domain.service.UserService;
        import?com.demo.infrastructure.util.page.PageResult;
        import?org.junit.Test;
        import?org.junit.runner.RunWith;
        import?org.springframework.beans.factory.annotation.Autowired;
        import?org.springframework.boot.test.context.SpringBootTest;
        import?org.springframework.test.context.junit4.SpringRunner;

        @RunWith(SpringRunner.class)
        @SpringBootTest(classes?
        =?DemoClickHouse.class)
        public?class?UserMapperTest?
        {
        ????@Autowired
        ????UserService?userService;

        ????@Test
        ????public?void?findById_Test()?{
        ????????User?byId?=?userService.findById(1);
        ????????System.out.println("查詢用戶ID=1信息:"?+?byId);
        ????}

        ????@Test
        ????public?void?page_Test()?{
        ????????User?user?=?new?User();
        ????????Integer?page?=?1;
        ????????Integer?limit?=?2;
        ????????PageResult?userList?=?userService.page(user,?page,?limit);
        ????????System.out.println("查詢用戶信息分頁:"?+?userList);
        ????}

        ????@Test
        ????public?void?create_Test()?{
        ????????User?user?=?new?User();
        ????????user.setUserName("張三");
        ????????user.setPassWord("123");
        ????????user.setPhone("12312222");
        ????????user.setEmail("[email protected]");
        ????????userService.create(user);
        ????????System.out.println("創(chuàng)建:"?+?user);
        ????}

        ????@Test
        ????public?void?update_Test()?{
        ????????User?user?=?new?User();
        ????????user.setId(1395347901827317761l);
        ????????user.setUserName("小李飛刀");
        ????????user.setPassWord("123");
        ????????user.setPhone("12312222");
        ????????user.setEmail("[email protected]");
        ????????userService.update(user);
        ????????System.out.println("創(chuàng)建:"?+?user);
        ????}

        ????@Test
        ????public?void?delete_Test()?{
        ????????userService.delete(1l);
        ????????System.out.println("刪除:"?+?1l);
        ????}

        }

        最后需要本文完整 demo 源碼的,加我微信:xttblog2,免費獲?。?/p>

        瀏覽 72
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲丝袜美腿诱惑 | 国精产品一码一码三mba | 中文字幕日本在线 | 4库成人无码A片观看视频 | 黄色污污视频 | 色五月婷婷五月天激情 | 免费无遮挡 在线观看视频 | 久久久久中文字幕 | 久久久久久久99精品国产片 | 亚洲中文字幕一二三无码欧美 |