最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
tk.Mybatis插入数据获取Id问题代码示例
时间:2022-06-29 02:02:32 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下tk.Mybatis插入数据获取Id问题代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
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; /** * 编号 */ @Id 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; }
测试类
@Test void insert() { SysUser sysUser = new SysUser(); sysUser.setName("zhangsan3"); sysUser.setNickName("张三3"); SysUser insert = sysUserService.insert(sysUser); System.out.println(insert); }
结果输出:
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。源码如下:
@Test void 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的属性。修改测试类。源码如下:
@Test void 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了,查看数据库。
很明显对上了。
相关文章
- 《原神》5.2卡池抽取建议 11-14
- 《原神》5.2版本新怪物介绍 11-14
- 《原神》希诺宁增伤触发方法 11-14
- 《原神》循音觅奇活动入口 11-14
- 《原神》循音觅奇兑换码获取方法 11-14
- 《原神》花羽会活动飞行技巧介绍 11-14