背景
在看前辈代码的时候,偶然发现一个奇怪的现象。
使用save 、saveOrUpdate保存对象后,在下面直接使用他的Id。
去网上找后发现,这个功能在mybatis的时候就有了(没用过)
而mybatis-plus 好像是默认支持返回主键id自增的情况
mybatis-plus
可以直接使用
iCustomerUserService.saveOrUpdate(customerUser);
iCustomerUserService.save(customerUser);
System.out.println(customerUser.getId());
mybatis设置
方式一
useGeneratedKeys=“true” 开启(默认时false) 允许jdbc自动生成主键 ,适用于主键自增
keyProperty=“id” 返回的值保存在对象的那个属性
然后就可以直接getId()
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
</insert>
方式二
order = “AFTER” 是执行主sql之后赋值
order = “BEFORE” 是执行主sql之前赋值
keyProperty = “mId” 对象属性
可适用uuid 或者自己想要的对应数据
<insert id = "insert">
<selectKey resultType = "integer" order = "AFTER" keyProperty = "mId" >
select last_insert_id() //写个sql去赋自己需要的值,这里是最后一个id
</selectKey>
insert into student(id,name) values(#{id},#{name})
</insert>
拓展
不仅可以反id,可以通过keyColumn反多个值,都是可以直接get到的
<insert id="addCompany" parameterType="company" >
<selectKey resultType="record" order="BEFORE" keyProperty="companyName,scale" keyColumn="name,age">
select name, age from record limit 1
</selectKey>
insert into company (company_name,scale,company_address,company_industry)
values (#{companyName},#{scale},#{companyAddress},#{companyIndustry})
</insert>