tk.Mybatis 插入数据获取Id
武汉加油、中国加油 人气:01、问题描述
几种代码写法会有不同的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
了,查看数据库。
很明显对上了。
3、总结
加载全部内容