前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis-Plus 基础+进阶+实战 之 自定义类型处理器

MyBatis-Plus 基础+进阶+实战 之 自定义类型处理器

作者头像
AI码师
发布2022-09-19 11:55:39
1K0
发布2022-09-19 11:55:39
举报

B站(乐哥聊编程)、西瓜(乐哥聊编程) 有完整配套视频,免费观看

背景

当项目中的实体 包含了另外一个实体,并且想要将包含的实体当作字段存入数据库,这个时候就需要类型处理器了。

虽然MyBatisPlus给我们提供了默认的处理器,将数据作为json存入字段,但是只处理了单个实体的存入和读取,并没有处理集合数据的读取反射,所以这节课就带大家怎么去处理集合数据从单个字段中进行读取映射。

使用默认的处理器处理单实体

实体修改

代码语言:javascript
复制

/**
 * <p>
 * 
 * </p>
 *autoResultMap = true 
 * @author 乐哥聊编程
 * @since 2022-07-18
 */
@TableName(value = "manage_user",autoResultMap = true)
代码语言:javascript
复制
 @TableField(typeHandler = JacksonTypeHandler.class)
    private Permission permission;

编写测试代码

代码语言:javascript
复制
    @Test
    public void testSave() {
        Permission permission = Permission.builder()
                .url("/api/user/add")
                .method("get")
                .name("新增用户")
                .build();
        ManageUser manageUser = ManageUser.builder()
                .userName("乐哥1000008")
                .delFlag(false)
                .email("110120119@qq.com")
                .nickName("乐哥聊编程")
                .mobile("13098987766")
                .permission(permission)
                .build();
        manageUserServiceImpl.save(manageUser);
    }

查看数据库

读取数据

定义集合处理器

代码语言:javascript
复制
package com.lglbc.mybatispluslearning.configuration;

import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.core.type.TypeReference;
import com.lglbc.mybatispluslearning.entity.Permission;

import java.io.IOException;
import java.util.List;

public class    MyListTypeHandler extends JacksonTypeHandler {
    private Class<?> type=null;
    public MyListTypeHandler(Class<?> type) {
        super(type);
        this.type=type;
    }

    @Override
    protected Object parse(String json) {
        try {
            return getObjectMapper().readValue(json, new TypeReference<List<Permission>>() {
            });
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

修改实体

代码语言:javascript
复制

    @TableField(typeHandler = MyListTypeHandler.class)
    private List<Permission> permission;
代码语言:javascript
复制
@TableName(value = "manage_user", autoResultMap = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ManageUser implements Serializable {

编写测试代码

代码语言:javascript
复制
    @Test
    public void testSave() {
        Permission permission = Permission.builder()
                .url("/api/user/add")
                .method("get")
                .name("新增用户")
                .build();
        ManageUser manageUser = ManageUser.builder()
                .userName("乐哥1000009")
                .delFlag(false)
                .email("110120119@qq.com")
                .nickName("乐哥聊编程")
                .mobile("111111")
                .permission(Arrays.asList(permission))
                .build();
        manageUserServiceImpl.save(manageUser);
    }

查看数据库

读取数据(不用自定义处理器)

读取数据(使用自定义处理器)

成长心路 | 优质书单 | 面试资料

牛人故事 | 前沿技术 | 视频教程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哥聊编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 使用默认的处理器处理单实体
    • 实体修改
      • 编写测试代码
        • 查看数据库
          • 读取数据
          • 定义集合处理器
            • 修改实体
              • 编写测试代码
                • 查看数据库
                  • 读取数据(不用自定义处理器)
                    • 读取数据(使用自定义处理器)
                    相关产品与服务
                    数据库
                    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档