数据库中设置了主键自增,在MyBatis中调用mapper接口中insert(Object obj)方法,在数据保存成功后并不能直接返回主键,这时候我们通过obj对象无法直接获得主键。可以使用SELECT LAST_INSERT_ID()语句来获得主键。
mapper.java如下:
int insert(BaseCompany record);
mapper.xml配置如下:
<insert id="insert" parameterType="com.shiningcity.company.pojo.BaseCompany">
<selectKey keyProperty="pkid" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into tb_base_company (PKID, COMPANY_CODE, COMPANY_NAME,
COMPANY_ADDRESS, FIRST_MANAGER_NAME, CERTIFICATE_CODE,
FIRST_MANAGER_TELEPHONE, GROUP_CODE, REGION_CODE
)
values (#{pkid,jdbcType=INTEGER}, #{companyCode,jdbcType=VARCHAR}, #{companyName,jdbcType=VARCHAR},
#{companyAddress,jdbcType=VARCHAR}, #{firstManagerName,jdbcType=VARCHAR}, #{certificateCode,jdbcType=VARCHAR},
#{firstManagerTelephone,jdbcType=VARCHAR}, #{groupCode,jdbcType=VARCHAR}, #{regionCode,jdbcType=VARCHAR}
)
</insert>
这样我们就可以直接通过insert()方法的参数对象来获得主键
@Test
public void testInsert() {
//fail("Not yet implemented");
BaseCompany company = new BaseCompany();
company.setCompanyCode("com001");
company.setCompanyName("企业001");
companyService.insert(company);
System.out.println(JSON.toJSON(company));
}
company对象打印结果:
{"companyCode":"com001","pkid":98,"companyName":"企业001"}
注意:在批量插入语句中,SELECT LAST_INSERT_ID()只会返回第一条语句的主键。