mp高版本的一些小问题

mp也就是mybatis-plus,是一款java操作持久层的框架,也是mybatis的增强版。mp对于操作mysql中json类型的字段也有处理方式。
只需要以下两步即可:

  1. 在MySQL表中创建一个json类型的字段,通过mp的代码生成器生成对应的实体类:在这里插入图片描述
    在这里插入图片描述
    实体类属性上的注解是swagger2的,在这里没有什么太大意义,可忽略。很明显可以看出代码生成器生成后,json类型的字段,映射成了String类型的属性。

2.给实体类加上注解:
在这里插入图片描述
value是这个表的表名,重要的在于设置后面的autoResultMap = true
注意,对于该mp的注解@TableName,在较低版本是没有autoResultMap属性的,(至少我之前用的3.0.5版本没有)所以我在此处引用了目前最新的mp3.4.3.1版本,mp的高版本之后是把代码生成器这一模块分开了的,还有扩展模块也是分开了的。所以在pom.xml引入依赖应该是如下:

<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.1</version>
</dependency>
<!--mp高版本将generator extension 模块分别引入-->
<!--mybatis-generator-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.0</version>
</dependency>
<!--mybatis-extension-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.4.3.1</version>
</dependency>
<!--mybatis-plus 模板引擎-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>

需要使用generator模块建议不要引入版本太低或者太高,因为会出现一些兼容和属性,方法的问题:
比如在最新版本的mp中id注解策略就有所改变,低版本的是Id.Type.ID_WORKER_STR而现在的是IdType.ASSIGN_ID,两个都是表示使用雪花算法来做主键id。

对于分页插件与逻辑删除插件(v3.4.3.1):

package com.sixteen.im.common.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "com.sixteen.im.mapper")
public class Config {
    @Bean//最新版分页插件,最新版mp自带逻辑删除插件
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//根据数据库类型填写
        return interceptor;
    }
}

这个新版的分页插件就在mybatis-plus-extension依赖中,为什么说新版的自带逻辑删除插件呢?可以看以下一段源码:
在这里插入图片描述
所以无需在配置类中添加逻辑删除插件。而且官方还提供了一次性设置需要逻辑删除的属性:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

步骤2就是在实体类逻辑删除属性加@TableLogic注解,对于一些其他的东西官方文档也有,这边就不多说了。
言归正传,给实体类加上@TableName(value = "im_member",autoResultMap = true)后,在json字段映射出来的属性做一些处理:

@ApiModelProperty(value = "扩展信息")
@TableField(typeHandler = FastjsonTypeHandler.class)
private Map<String,Object> exInfo;

在这里插入图片描述
注意,typeHandler,FastjsonTypeHandler.class都是新版mp才有的,低版本实在要用的话可以使用el表达式吧,此处就不做介绍了。

以上,就可以解决json字段在返回数据出去是不是String的类型,而是转换好的Json对象。新版mp对我的感受就是变化很大,不过还好现在能使用了,建议不要一直使用一个版本的东西进行开发(此处指的是我自己开发捣鼓)。ps:当然这样完成json字段的解析,好像用处也不是很大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值