mybatis如何实现获取新增得id

<insert id="saveCustomer" parameterType="com.xiaonatech.dsx.entity.CustomerEntity" useGeneratedKeys="true" keyProperty="policyID">

        insert into customer                 (certType,code,password,name,mobile,effDate,expDate,address,createID,createTime,updateID,updateTime) 
        values
             (#{certType},#{code}, #{password}, #{name}, #{mobile},  #{effDate},#{expDate},#{address},#{createID},#{createTime} ,#{updateID},#{updateTime})
</insert>

dao层
public int saveCustomer(CustomerEntity cs);
这个方法返回得一直是1。 对象.id得值 一直是空。数据库是mysql
CustomerEntity applyRecord = new CustomerEntity();

    applyRecord.setCertType("0");
    applyRecord.setCode("423565462256");
    applyRecord.setPassword("123456");
    applyRecord.setName("sds");
    applyRecord.setMobile("12345678978");
    applyRecord.setCreateID("150");
    applyRecord.setUpdateID("150");
    applyRecord.setUpdateTime(new Date());
    int i = dao.saveCustomer(cs);
    System.out.println("i========="+i+"  id================"+applyRecord.getCarOwnerID());
阅读 5.4k
6 个回答

1.数据库id必须是auto_increment
2.配置useGeneratedKeys="true"以及keyProoerty
3.你调用mapper接口的方法得到的数值,也就是总拿到的1是影响的记录数,要想拿到对象的id,请点用对应的getter方法

这个方法返回的实际是影响的记录数。
你insert之后直接去取实体类的id即可。

ApplyRecord applyRecord = new ApplyRecord();
applyRecord.setAccount("1234");
applyRecord.setCode("123");
Timestamp now = new Timestamp(System.currentTimeMillis());
applyRecord.setGmtCreate(now);
applyRecord.setGmtModified(now);
int i = applyRecordDao.insert(applyRecord);
logger.info("{}",applyRecord.getId());

useGeneratedKeys="true" keyProperty="id" xml配置中keyProperty为主键 你看你的数据数是不是设id为主键并设置期为自增,如果设置执行完insert后,主键的值就会反射到你实体类的主键中

<insert id="save" parameterType="atyy.model.ArticleCategoryPO" useGeneratedKeys="true">
</insert>
加入一个属性就行了useGeneratedKeys="true"

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题