Mybatis-plus操作json字段实战

Mybatis-plus操作json字段实战后端动态列设计与实现三部曲,这是最后一步,使用java语言,结合mybatis-plus神技操作json字段。简单介绍下mybatis-plus,大厂中mybatis使用的非常多,而mybatis-plus是基于mybatis做了扩展,进一步增强,在不影响数据存储的情况下,简化操作方式。有兴趣的朋友可以去官网了解:https://www.baomidou.com/1、架构图2、功能3、表结构DROPTABLEIFEXISTSuser;CREATETABLEuser(……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

后端动态列设计与实现三部曲,这是最后一步,使用java语言,结合mybatis-plus神技操作json字段。

简单介绍下mybatis-plus,大厂中mybatis使用的非常多,而mybatis-plus是基于mybatis做了扩展,进一步增强,在不影响数据存储的情况下,简化操作方式。有兴趣的朋友可以去官网了解:https://www.baomidou.com/

1、架构图

Mybatis-plus操作json字段实战

2、功能

Mybatis-plus操作json字段实战

3、表结构

DROP TABLE IF EXISTS user;CREATE TABLE user(  id BIGINT(20) NOT NULL COMMENT '主键ID',  name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',  age INT(11) NULL DEFAULT NULL COMMENT '年龄',  email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',  wallet VARCHAR(3000) NULL DEFAULT NULL COMMENT '钱包',  other_info VARCHAR(3000) NULL DEFAULT NULL COMMENT '其他信息',  PRIMARY KEY (id));
INSERT INTO user (id, name, age, email, wallet, other_info) VALUES(1, 'Jone', 18, 'test1@baomidou.com', '{"name": "支付宝钱包","currencyList": [{"type": "USD","amount": 999.19},{"type": "RMB","amount": 1000.19}]}', '{"sex": "男","city": "南昌"}'),(2, 'Jack', 20, 'test2@baomidou.com', '{"name": "微信钱包","currencyList": [{"type": "USD","amount": 888.18},{"type": "RMB","amount": 1000.18}]}', '{"sex": "男","city": "青岛"}');

Jetbrains全家桶1年46,售后保障稳定

4、实体定义 

package com.baomidou.mybatisplus.samples.typehandler.entity;

import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableName;import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;import lombok.experimental.Accessors;
/**用户实体对应表 user * @author hubin * @since 2018-08-11 */@Data@Accessors(chain = true)@TableName(autoResultMap = true)public class User {
  
      private Long id;    private String name;    private Integer age;    private String email;
    /**     * 注意!!必须开启映射注解     *     * @TableName(autoResultMap = true)     *     * 以下两种类型处理器,二选一 也可以同时存在     *     * 注意!!选择对应的 JSON 处理器也必须存在对应依赖包     */    @TableField(typeHandler = JacksonTypeHandler.class)    private Wallet wallet;
    @TableField(typeHandler = FastjsonTypeHandler.class)    private OtherInfo otherInfo;}
package com.baomidou.mybatisplus.samples.typehandler.entity;
import java.util.List;
import lombok.Data;
/** * 钱包 */@Datapublic class Wallet {
  
      /**     * 名称     */    private String name;    /**     * 各种货币     */    private List<Currency> currencyList;}

package com.baomidou.mybatisplus.samples.typehandler.entity;
import lombok.Data;
/** * 货币 */@Datapublic class Currency {
  
      /**     * 类型: 人民币 RMB , 美元 USD     */    private String type;    /**     * 金额     */    private Double amount;}
package com.baomidou.mybatisplus.samples.typehandler.entity;
import lombok.Data;
/** * 其他信息 */@Datapublic class OtherInfo {
  
      /**     * 性别     */    private String sex;    /**     * 居住城市     */    private String city;}

5、Dao定义 ​​​​​​​

package com.baomidou.mybatisplus.samples.typehandler.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.baomidou.mybatisplus.samples.typehandler.entity.User;
/** * <p> * MP 支持不需要 UserMapper.xml 这个模块演示内置 CRUD 咱们就不要 XML 部分了 * </p> * * @author hubin * @since 2018-08-11 */public interface UserMapper extends BaseMapper<User> {
  
  }

6、类型转换器​​​​​​​

package com.baomidou.mybatisplus.samples.typehandler.config;
import com.baomidou.mybatisplus.extension.handlers.GsonTypeHandler;import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;import com.fasterxml.jackson.databind.ObjectMapper;import com.google.gson.Gson;import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;
/** * @author miemie * @since 2019-11-28 */@Componentpublic class MpJsonConfig implements CommandLineRunner {
  
  
    /**     * 可以set进去自己的     */    @Override    public void run(String... args) throws Exception {
  
          JacksonTypeHandler.setObjectMapper(new ObjectMapper());        GsonTypeHandler.setGson(new Gson());    }}

 7、测试

​​​​​​​

package com.baomidou.mybatisplus.samples.typehandler;
import javax.annotation.Resource;
import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;
import com.baomidou.mybatisplus.samples.typehandler.entity.User;import com.baomidou.mybatisplus.samples.typehandler.mapper.UserMapper;
/** * <p> * 内置 类型处理器 演示 * </p> * * @author hubin * @since 2018-08-11 */@RunWith(SpringRunner.class)@SpringBootTestpublic class SampleTest {
  
  
    @Resource    private UserMapper userMapper;
    /**     * 自定义类型处理器演示参考 mybatis-plus-sample-deluxe 模块     */    @Test    public void test() {
  
          User Jone = userMapper.selectById(1);        System.out.println(Jone);        System.err.println(Jone.getName());
        User Jack = userMapper.selectById(1);        System.err.println(Jack.getName());    }}

结果如下:​​​​​​​

2020-11-22 12:46:58.164  INFO 3168 --- [           main] c.b.m.samples.typehandler.SampleTest     : Started SampleTest in 4.125 seconds (JVM running for 5.707)2020-11-22 12:46:58.477 DEBUG 3168 --- [           main] c.b.m.s.t.mapper.UserMapper.selectById   : ==>  Preparing: SELECT id,name,age,email,wallet,other_info FROM user WHERE id=?2020-11-22 12:46:58.509 DEBUG 3168 --- [           main] c.b.m.s.t.mapper.UserMapper.selectById   : ==> Parameters: 1(Integer)2020-11-22 12:46:58.713 DEBUG 3168 --- [           main] c.b.m.s.t.mapper.UserMapper.selectById   : <==      Total: 1User(id=1, name=Jone, age=18, email=test1@baomidou.com, wallet=Wallet(name=支付宝钱包, currencyList=[Currency(type=USD, amount=999.19), Currency(type=RMB, amount=1000.19)]), otherInfo=OtherInfo(sex=男, city=南昌))2020-11-22 12:46:58.715 DEBUG 3168 --- [           main] c.b.m.s.t.mapper.UserMapper.selectById   : ==>  Preparing: SELECT id,name,age,email,wallet,other_info FROM user WHERE id=?2020-11-22 12:46:58.715 DEBUG 3168 --- [           main] c.b.m.s.t.mapper.UserMapper.selectById   : ==> Parameters: 2(Integer)2020-11-22 12:46:58.716 DEBUG 3168 --- [           main] c.b.m.s.t.mapper.UserMapper.selectById   : <==      Total: 1User(id=2, name=Jack, age=20, email=test2@baomidou.com, wallet=Wallet(name=微信钱包, currencyList=[Currency(type=USD, amount=888.18), Currency(type=RMB, amount=1000.18)]), otherInfo=OtherInfo(sex=男, city=青岛))2020-11-22 12:46:58.736  INFO 3168 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...2020-11-22 12:46:58.747  INFO 3168 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

总结,使用mybatis-plus可以提高应用程序操作数据库的效率,让开发人员专注于业务逻辑实现。在使用mybatis-plus操作json字段的要点主要有:

1、在需要处理的字段上使用@TableField(typeHandler = JacksonTypeHandler.class),同时实体开启@TableName(autoResultMap = true)

2、注册工具类,MpJsonConfig.

mybatis-plus 还有许多很好用的功能,感兴趣的朋友可以自己去官网上下看,也可能从github或者gitee上拉取最新代码,了解它的工作原理,结合自己的业务做一些增强。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226879.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 史上最新最全面的java大数据学习路线(新手小白必看版本)

    史上最新最全面的java大数据学习路线(新手小白必看版本)第一阶段:大数据基础Java语言基础阶段1.1:Java开发介绍1.1.1Java的发展历史1.1.2Java的应用领域1.1.3Java语言的特性1.1.4Java面向对象1.1.5Java性能分类1.1.6搭建Java环境1.1.7Java工作原理 1.2:熟悉Eclipse开发工具1.2.1Eclipse简介与下载1.2.2安…

    2022年5月28日
    33
  • 一文读懂自监督学习

    一文读懂自监督学习公众号关注“视学算法”设为“星标”,DLCV消息即可送达!来自|知乎作者丨Sherlock来源丨https://zhuanlan.zhihu.c…

    2022年9月14日
    3
  • 51单片机系列有哪些类型_51单片机1602液晶显示原理

    51单片机系列有哪些类型_51单片机1602液晶显示原理Lcd液晶屏幕带有背光显示,可选择蓝光白光黄光三种背光颜色的屏幕,它更具有美光性,在实际生活中有广泛的应用。实物图原理图RS:1为数据/0为指令;RW:1为读/0为写;E1为数据有效,下降沿执行指令示例代码main.c#include”reg52.h” //此文件中定义了单片机的一些特殊功能寄存器#include”lcd.h”typedefunsignedintu16; //对数据类型进行声明定义typedefunsignedcharu8;u8Disp

    2022年9月17日
    2
  • Vue常用指令(一)

    Vue常用指令(一)1、v-once 只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。代码:<body><div id=”app”> <p v-once>原始值: {{msg}}</p> <p>后面的: {{msg}}</p> <input typ…

    2022年6月13日
    28
  • matlab plot函数详解取值范围_matlab为什么plot不出来图

    matlab plot函数详解取值范围_matlab为什么plot不出来图 在matlab中,plot函数用来绘制二维图像。1.plot默认格式 plot(x,y)这种格式中,若x,y是向量,则它们必须具有相同的长度。函数将以x为横轴,绘制y。                  若x,y都是矩阵,则它们必须具有相同的尺寸,plot函数将针对x的各列绘制y的每列。更确切的说,将x和y的对应的各列取出来,绘制曲线。比如x和y分别为n*n…

    2022年10月16日
    4
  • 毫无头绪的自学Python,你可能连门槛都摸不到![通俗易懂]

    毫无头绪的自学Python,你可能连门槛都摸不到![通俗易懂]目前的IT行业发展日趋迅猛,IT产业的产值成倍增长,不少人都打算从零基础开始学习python。对于零基础的初学者来说,最迷茫的是不知道怎样开始学习?那这里小编为大家规划了一条零基础自学必看pyth

    2022年7月3日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号