tk.Mybatis|tk.Mybatis 插入数据获取Id问题
目录
- 1、问题描述
- 2、问题分析
- 3、总结
1、问题描述 几种代码写法会有不同的
ID
返回值,下面我们一一分析。2、问题分析 ??首先一种插入写法,源码如下:
SysUser .java
/** * 用户管理(SysUser)实体类 * * @author Chen * @since 2020-05-06 14:16:48 */@Data@ApiModel("用户管理")public class SysUser implements Serializable {private static final long serialVersionUID = 993569543176442301L; /*** 编号*/@Idprivate Long id; /*** 用户名*/private String name; /*** 昵称*/private String nickName; /*** 头像*/private String avatar; /*** 密码*/private String password; /*** 加密盐*/private String salt; /*** 邮箱*/private String email; /*** 手机号*/private String mobile; /*** 状态0:禁用1:正常*/private Object status; /*** 机构ID*/private Long deptId; /*** 创建人*/private String createBy; /*** 创建时间*/private Date createTime; /*** 更新人*/private String lastUpdateBy; /*** 更新时间*/private Date lastUpdateTime; /*** 是否删除-1:已删除0:正常*/private Object delFlag; }
测试类
@Testvoid insert() {SysUser sysUser = new SysUser(); sysUser.setName("zhangsan3"); sysUser.setNickName("张三3"); SysUser insert = sysUserService.insert(sysUser); System.out.println(insert); }
结果输出:
【tk.Mybatis|tk.Mybatis 插入数据获取Id问题】SysUser(id=null, name=zhangsan3, nickName=张三3, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)是的我们获取到的是
id=null
,这显然不符合我们的预期。于是修改代码。只改测试类。比如输入id=0
。源码如下:@Testvoid insert() {SysUser sysUser = new SysUser(); sysUser.setId(0L); sysUser.setName("zhangsan6"); sysUser.setNickName("张三6"); SysUser insert = sysUserService.insert(sysUser); System.out.println(insert); }
再次运行程序,控制台输出如下:
SysUser(id=0, name=zhangsan4, nickName=张三4, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)嗯,好像确实输出了
id=0
,符合我们的预期,但是真的是这样吗?我们看看数据库限制是什么样。文章图片
没错,我们的真实
id
是38。这里就有问题了。查阅相关资料说是在实体类中添加@GeneratedValue(strategy = GenerationType.IDENTITY)
就可以了。于是我们照做。修改实体类如下:/** * 用户管理(SysUser)实体类 * * @author Chen * @since 2020-05-06 14:16:48 */@Data@ApiModel("用户管理")public class SysUser implements Serializable {private static final long serialVersionUID = 993569543176442301L; /*** 编号*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id; /*** 用户名*/private String name; /*** 昵称*/private String nickName; /*** 头像*/private String avatar; /*** 密码*/private String password; /*** 加密盐*/private String salt; /*** 邮箱*/private String email; /*** 手机号*/private String mobile; /*** 状态0:禁用1:正常*/private Object status; /*** 机构ID*/private Long deptId; /*** 创建人*/private String createBy; /*** 创建时间*/private Date createTime; /*** 更新人*/private String lastUpdateBy; /*** 更新时间*/private Date lastUpdateTime; /*** 是否删除-1:已删除0:正常*/private Object delFlag; }
文章图片
主要就是改了这里。OK,继续运行程序,结果如下:
SysUser(id=0, name=zhangsan5, nickName=张三5, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)这里的
id
还是0,什么鬼。再看看数据库。文章图片
明显不是0。所以这里不能设置id的属性。修改测试类。源码如下:
@Testvoid insert() {SysUser sysUser = new SysUser(); sysUser.setName("zhangsan6"); sysUser.setNickName("张三6"); SysUser insert = sysUserService.insert(sysUser); System.out.println(insert); }
继续运行程序,结果如下:
SysUser(id=40, name=zhangsan6, nickName=张三6, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)这次
id=40
了,查看数据库。文章图片
很明显对上了。
3、总结 到此这篇关于tk.Mybatis 插入数据获取Id问题的文章就介绍到这了,更多相关tk.Mybatis 插入数据获取Id内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 使用协程爬取网页,计算网页数据大小
- Java|Java基础——数组
- Python数据分析(一)(Matplotlib使用)
- Jsr303做前端数据校验
- Spark|Spark 数据倾斜及其解决方案
- 数据库设计与优化
- 爬虫数据处理HTML转义字符
- 数据库总结语句
- MySql数据库备份与恢复