国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mybatis-Plus處理Mysql Json類型字段

這篇具有很好參考價值的文章主要介紹了Mybatis-Plus處理Mysql Json類型字段。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

概要

Mysql 5.7.8開始支持Json對象和Json數(shù)組,但在Mysql 8版本中使用Json性能更佳。

使用Json格式的好處:

  1. 無須預(yù)定義字段:字段可以無限拓展,避免了ALTER ADD COLUMN的操作,使用更加靈活。
  2. 處理稀疏字段:避免了稀疏字段的NULL值,避免冗余存儲。
  3. 支持索引:相比于字符串格式的JSON,JSON類型支持索引做特定的查詢優(yōu)化。

整體實現(xiàn)流程

  1. 查看Mysql版本
SELECT VERSION();

mybatis plus mysql json,mysql,json,mybatis
2、創(chuàng)建mysql表

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` json DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

mybatis plus mysql json,mysql,json,mybatis
3、定義實體類

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.Data;

@Data
//開啟自動映射
@TableName(value = "test",autoResultMap = true)
public class Test {

    @TableId(type = IdType.AUTO)
    private Integer id;
	//定義Json字段handler
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JsonNode text;
}
import lombok.Data;

import java.io.Serializable;

@Data
public class JsonNode implements Serializable {

    private Integer id;

    private String name;

    private Integer age;
}

4、定義Mapper、Service、ServiceImpl

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yiyou.base.entity.Test;

public interface TestMapper extends BaseMapper<Test> {
}
import com.baomidou.mybatisplus.extension.service.IService;
import com.yiyou.base.entity.Test;

public interface TestService extends IService<Test> {

    boolean insert(Test test);
}
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yiyou.base.entity.Test;
import com.yiyou.base.mapper.TestMapper;
import com.yiyou.base.service.TestService;
import org.springframework.stereotype.Service;

@Service
public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {


    @Override
   public boolean insert(Test test) {
        return this.saveOrUpdate(test);
    }
}

5、Controller層實現(xiàn)

import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.yiyou.base.entity.Test;
import com.yiyou.base.service.TestService;
import com.yiyou.model.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;


@Slf4j
@Api(tags = "test")
@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private TestService testService;

    @ApiOperation("新增")
    @PostMapping("/save")
    public R<Boolean> save(@RequestBody Test test) {
        return R.ok(testService.insert(test));
    }

    @ApiOperation("根據(jù)Id獲取對象")
    @GetMapping("/getById/{id}")
    public R<Test> getById(@PathVariable("id") Integer id) {
        return R.ok(testService.getById(id));
    }

    @ApiOperation("根據(jù)Id刪除")
    @DeleteMapping("/deleteById/{id}")
    public R<Boolean> deleteById(@PathVariable("id") Integer id) {
        return R.ok(testService.removeById(id));
    }

    @ApiOperation("條件查詢")
    @PostMapping("/findList")
    public R<List<Test>> findList(@RequestBody Test test) {
        LambdaQueryChainWrapper<Test> queryWrapper =  testService.lambdaQuery();
        queryWrapper
                .eq(Objects.nonNull(test.getId()),Test::getId,test.getId())
//                .apply(Objects.nonNull(test.getText()),"text -> '$.name' LIKE CONCAT('%',{0},'%')",test.getText().getName())
                .apply(Objects.nonNull(test.getText()), "text -> '$.age' = {0}", test.getText().getAge());
//                .like(Objects.nonNull(test.getText()),Test::getText,test.getText());
        return R.ok(queryWrapper.list());
    }

技術(shù)細(xì)節(jié)

  • Json字段模糊查詢
SELECT * FROM TEST WHERE text -> '$[*].name' like '%測%'

或 上面的"*"也可以使用下標(biāo)

SELECT * FROM TEST WHERE text -> '$[1].name' like '%測%'
  • Json字段精確查詢

  • 使用箭頭函數(shù)

SELECT * FROM TEST WHERE text -> '$.name' = '測試'
  • 使用 JSON_CONTAINS
SELECT * FROM TEST WHERE JSON_CONTAINS(text,JSON_OBJECT('name', '測試'))
  • 查詢json中的name字段
SELECT id, text -> '$[*].name' AS name FROM TEST;

  • 使用JSON_EXTRACT 函數(shù),帶雙引號
SELECT id, JSON_EXTRACT( text, '$[*].name' ) AS name FROM TEST;

  • 使用 JSON_UNQUOTE 函數(shù),不帶雙引號
SELECT id, JSON_UNQUOTE(text, '$[*].name' ) AS name FROM TEST;

  • 查詢Json字段中所有的值,用 “*”
SELECT id, text -> '$[*].*' AS name FROM TEST;

Mybatis Plus使用LambdaQueryChainWrapper查詢

提示:使用apply方法拼接sql片段,apply 是可以通過占位符的形式,傳入多個參數(shù)。

例如:文章來源地址http://www.zghlxwxcb.cn/news/detail-772079.html

LambdaQueryChainWrapper<Test> queryWrapper =  testService.lambdaQuery();
        queryWrapper
.apply(Objects.nonNull(test.getText()),"text -> '$.name' LIKE CONCAT('%',{0},'%')",test.getText().getName())//模糊查詢
.apply(Objects.nonNull(test.getText()), "text -> '$.age' = {0}", test.getText().getAge());//精確查詢

到了這里,關(guān)于Mybatis-Plus處理Mysql Json類型字段的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • mybatis-plus更新字段為null值

    mybatis-plus更新字段為null值

    mybatis-plus相信大家都不陌生所以不在介紹 首先我們先看一下mybatis-plus的官網(wǎng)上的介紹 ?官網(wǎng)推薦的有三種方式可以實現(xiàn) 第一種:調(diào)整全局策略, mybatis-plus默認(rèn)的全局策略為NOT_NULL非空默認(rèn)策略,其實就是當(dāng)更新是某個字段為空,則不對該字段進(jìn)行更新,這也是我們常用的策略所此種

    2024年02月14日
    瀏覽(25)
  • mybatis-plus 根據(jù)指定字段 批量 刪除/修改

    mybatis-plus 根據(jù)指定字段 批量 刪除/修改

    mybatis-plus 提供了根據(jù)id批量更新和修改的方法,這個大家都不陌生 但是當(dāng)表沒有id的時候怎么辦) 這個就不說了,就是因為不想手寫SQL 所以才有這篇博客 mybatis plus 的 executeBatch 參考 mybatis plus 的updateBatchById 方法. 調(diào)用處: 接口 重寫方法 實現(xiàn) 這種寫法其實批量的效率還是比較慢的

    2024年02月13日
    瀏覽(17)
  • Mybatis ,Mybatis-plus列表多字段排序,包含sql以及warpper

    Mybatis ,Mybatis-plus列表多字段排序,包含sql以及warpper

    首先根據(jù)咱們返回前端的數(shù)據(jù)列來規(guī)劃好排序字段 如下: 這里的字段為返回VO的字段,要轉(zhuǎn)換成數(shù)據(jù)庫字段然后加入到排序中 示例,穿了 surname,cerRank 多字段,然后是倒序 false 首先創(chuàng)建好映射,如下代碼,第一個List 為前端字段VO, 第二個List 為數(shù)據(jù)庫字段。Util.handle 是將兩個轉(zhuǎn)換

    2024年02月14日
    瀏覽(18)
  • MyBatis-Plus如何將字段修改為空值

    不推薦使用原因:作用范圍太廣,調(diào)用MyBatis-Plus封裝的update會不經(jīng)意將字段改為空 不推薦使用原因:相對于方案一作用范圍相對較小,但調(diào)用MyBatis-Plus封裝的update也會不經(jīng)意將字段改為空 推薦原因:不影響任何地方只在此處生效

    2024年02月16日
    瀏覽(15)
  • Mybatis-plus通過其他字段批量更新或新增

    根據(jù)某個或者多個非ID字段進(jìn)行批量更新 示例通過名稱與id兩個字段更新 引用mybatis-plus根據(jù)某個指定字段批量更新數(shù)據(jù)庫 通過其他字段批量更新或新增

    2024年02月12日
    瀏覽(19)
  • mybatis-plus 數(shù)據(jù)字段進(jìn)行加解密入庫,且加密字段支持模糊搜索

    mybatis-plus 數(shù)據(jù)字段進(jìn)行加解密入庫,且加密字段支持模糊搜索

    1. 開發(fā)框架、環(huán)境 springboot+mybatis-plus+mysql5.7(oracle應(yīng)該也是可以的,沒有測試,但實現(xiàn)思路是都可以滿足,懶得測oracle了,哈哈) 2. 需求介紹(背景) 需求很簡單: 就是將數(shù)據(jù)存儲到數(shù)據(jù)庫,并且將敏感數(shù)據(jù)字段進(jìn)行加密處理保存(比如:身份證,手機(jī)號,銀行卡 等等)

    2024年02月09日
    瀏覽(18)
  • SpringBoot - MyBatis-Plus - 如何在查詢時排除某些字段?

    寫在前面 查詢時部分字段不想給前端顯示,怎么辦? (1)使用SELECT方法,排除字段\\\"password\\\" (2)使用SELECT方法,只顯示某些字段 (3)使用@TableField(exist = false),排除某些字段 注:表示當(dāng)前屬性不是數(shù)據(jù)庫的字段,但在項目中必須使用,這樣的話在新增/查詢等使用BEAN時,

    2024年02月12日
    瀏覽(16)
  • Mybatis-Plus不能更新對象字段為空值問題解決

    Mybatis-Plus不能更新對象字段為空值問題解決

    問題描述: 在使用Mybatis-Plus調(diào)用updateById方法進(jìn)行數(shù)據(jù)更新默認(rèn)情況下是不能更新空值字段的,而在實際開發(fā)過程中,往往會遇到需要將字段值更新為空值的情況,該如何解決呢? 原因分析: Mybatis-Plus中字段的更新策略是通過FieldStrategy屬性控制的。在實體字段上,如果不通

    2024年02月12日
    瀏覽(20)
  • MyBatis-plus更新對象時將字段值更新為null

    ????????mybatis-plus在執(zhí)行更新操作,當(dāng)更新字段為 空字符串 或者 null 的則不會執(zhí)行更新。如果要將指定字段更新null,可以通過以下三種方式實現(xiàn)。 1、全局配置 ????????可以在 application.yml 配置文件中注入配置 GlobalConfiguration 屬性 update-strategy, 將 update-strategy 策略調(diào)

    2024年02月15日
    瀏覽(24)
  • 【Mybatis-plus】updateById()方法不能更新字段為null的原因及解決辦法

    一、問題描述 ? 在日常項目開發(fā)過程中,經(jīng)常會使用Mybatis-plus的updateById()方法,快速將接收道德參數(shù)或者查詢結(jié)果中原本不為null的字段更新為null,并且該字段在數(shù)據(jù)庫中可為null,這個時候使用updateById()并不能實現(xiàn)這個操作,不會報錯,但是對應(yīng)的字段并沒有更新為null。

    2024年02月02日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包