Mybatis Plus使用@TableId之坑及解决

目录
  • Mybatis Plus使用@TableId之坑
    • 1. TableId 可选类型
    • 2. @TableId(value = “id”,type= IdType.AUTO)
    • 3. @TableId(value = “id”,type= IdType.ID_WORKER)
  • Mybatis Plus TableId无效

Mybatis Plus使用@TableId之坑

1. TableId 可选类型

不添加注解时,默认使用ID_WORKER(3)

public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型(将跟随全局)
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),
    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 全局唯一ID (idWorker)
     */
    ID_WORKER(3),
    /**
     * 全局唯一ID (UUID)
     */
    UUID(4),
    /**
     * 字符串全局唯一ID (idWorker 的字符串表示)
     */
    ID_WORKER_STR(5);
    }

2. @TableId(value = “id”,type= IdType.AUTO)

使用条件:

  • id 类型可以是Interger/Long;
  • 数据库主键id,mysql必须设置自增主键,postgreSQL必须设置自增序列,才能够使用此注解。

3. @TableId(value = “id”,type= IdType.ID_WORKER)

使用条件:

  • id 类型必须是Long;
  • 因为ID_WORKER 生成的snowflakeId 是19位的全局id。

Mybatis Plus TableId无效

初次使用mybatisplus,刚开始正常,后来发现插入时总是duplicate key,百事不得其解,后发现问题如下

    @TableId(type = IdType.ID_WORKER)
    private Long id; # 正确
    private long id; # 错误
    private int id;  # 错误

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

记录一次脑瘫操作。。。。

(0)

相关推荐

  • mybatis-plus id主键生成的坑

    简要说明 由于mybatis-plus会自动插入一个id到实体对象, 不管你封装与否, 所以有时候导致一些意外的情况发生 默认是生成一个长数字字符串(编码不同可能结尾带有字母) 错误 ested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.xxx' with value '1110423703487479810' Cause: ja

  • MybatisPlus中@TableField注解的使用详解

    实现 官方文档说明: com.baomidou.mybatisplus.annotations.TableField TableField注解新增属性 update 预处理 set 字段自定义注入 (讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了) 例如: @TableFie

  • 使用mybatis-plus的insert方法遇到的问题及解决方法(添加时id值不存在异常)

    mybatis在持久层框架中还是比较火的,一般项目都是基于ssm.虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活.但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦. 下面给大家介绍使用mybatis-plus的insert方法遇到的问题,具体内容如下所示: 我在添加的时候,无缘无辜的给我报 java.sql.SQLException: Field 'id' doesn't have a default value 如图: 后来了解到 使用 mybati

  • Mybatis-plus使用注解 @TableField(exist = false)

    当表中午字段,但是实体类中需要这个成员变量时怎么办,可以使用mybatis-plus中@TableField(exist=false) 如下: import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomi

  • Mybatis Plus使用@TableId之坑及解决

    目录 Mybatis Plus使用@TableId之坑 1. TableId 可选类型 2. @TableId(value = "id",type= IdType.AUTO) 3. @TableId(value = "id",type= IdType.ID_WORKER) Mybatis Plus TableId无效 Mybatis Plus使用@TableId之坑 1. TableId 可选类型 不添加注解时,默认使用ID_WORKER(3) public enu

  • 一次mybatis连接查询遇到的坑实战记录

    前言 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.本文主要介绍的是mybatis连接查询遇到的一个坑以及解决方法,下面话不多说了,来一起看看详细的介绍吧 1.遇到的问题: 通过角色ID获取role_menu表中对应的菜单id,再通过菜单id获取菜单项的权限编码 , 使用mybatis连接查询,代码如下 // SysRoleMapper // 通过菜单id连接查询对应的权限编码 @Select("select menu_id from sys_role_me

  • 浅谈MyBatis原生批量插入的坑与解决方案

    目录 原生批量插入的"坑" 解决方案 分片 Demo 实战 原生批量插入分片实现 总结 前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入.MyBatis Plus 批量插入.MyBatis 原生批量插入,详情请点击<MyBatis 批量插入数据的 3 种方法!> 但之前的文章也有不完美之处,原因在于:使用 「循环单次插入」的性能太低,使用「MyBatis Plus 批量插入」性能还行,但要额外的引入 MyBatis Plus 框架,使用「MyBati

  • 使用shardingsphere对SQLServer坑的解决

    背景:最近一个使用SQLServer的项目,业务量太大,开始对业务有影响了,因此用户要求升级改造,技术上采用shardingsphere进行分库分表. 经过一系列调研,设计...哐哐一顿操作之后开始动刀改造.pom依赖如下: <!--sharding--> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-

  • mybatis-plus 关于savebatch,saveorupdatebatch遇到的坑及解决办法

    目录 一.背景 二.解决办法 三.sql注入器实现批量更新,批量新增或更新功能 一.背景 最近mybatis-plus框架的更新,让我们基础开发中如虎添翼.其中基本的增删改查,代码生成器想必大家用着那叫一个爽.本人在使用中,也遇到一些坑.比如savebatch,saveorupdatebatch,看着这不是批量新增,批量新增或更新嘛,看着api进行开发,感觉也太好用啦.开发完一测试,速度跟蜗牛一样,针对大数据量真是无法忍受.在控制台上发现,怎么名义上是批量插入,还是一条一条的进行插入,难怪速度龟

  • Android 弹出软键盘所遇到的坑及解决方法

    demo下载 重要代码: //1.此layout作为最外层的layout: //2.设置需要调整的view: setAdjustView(View view); //3.如果需要控制输入框的显示与隐藏,可以实现OnInputViewVisibleListener接口: public class SoftInputAdjustLayout extends RelativeLayout { private static final String TAG = SoftInputAdjustLayout

  • MySQL5.7中的sql_mode默认值带来的坑及解决方法

    在正常项目开发过程中,如果MySQL版本从5.6升级到5.7版本.作为DBA在考虑数据库版本升级带来的影响时,一般会有几个注意点: sql_mode optimizer_switch 本文主要内容是MySQL升级到5.7版本之后,由于默认的 sql_mode 值带来的坑以及对应的解决方案. 案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 (42000): Expression #3 of X

  • 浅谈vue引入css,less遇到的坑和解决方法

    在使用vux开发手机页面时,引入vux的公共样式less一直报错,通过各种百度,Google都没有解决,走了很多弯路.最后才发现钻牛角尖了,可以换一种方法引入. 1.报错的使用:在App中 @ ./~/css-loader?{"minimize":false,"sourceMap":false}!./~/vux/src/styles/reset. less 3:10-115 @ ./~/css-loader?{"minimize":false,&

  • 基于IOS端微信分享失效的踩坑及解决方法

    最近的一个公众号是基于vue的spa应用,在接入微信分享和微信语音的时候出现了:在Android上一切正常,但是在ios端调用wx.config的时候总是失败,去翻了官方文档也并没有找到解决方案,最后在测试中发现是因为初始化的时候传入的URL的问题.具体过程如下: 微信config接口配置,官方文档如下: 所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支

  • ant-design-vue按需加载的坑的解决

    问题 在vue-cli4.x中按需加载ant-design-vue,在编译时报错,错误如下 原因 ant-design-vue使用less预处理器.在less3.0版本以前,javascriptEnabled属性默认为true,3.0以后默认为false.地址 目前项目中less版本为3.0.4,所以在编译中会报错 解决办法 第一种办法,在vue.config.js中添加如下配置 css: { loaderOptions: { less: { javascriptEnabled: true }

随机推荐