mybatis插入数据返回自增主键id

1. mybatis返回主键的方式有两种 , 我用的是下面这种
useGeneratedKeys : 为true,返回主键id的值

keyProperty : java对象成员属性名

keyColumn : 数据库字段 

<insert id="addCommodity"  useGeneratedKeys="true" keyProperty="CommodityId" parameterType="com.anonymity.project.InsertExcel.Commodity" >
INSERT INTO
   Commodity (
      CommodityCode,
      name,
      Title,
      Summary,
      STATUS,
      CreateTime,
      
   )
VALUES
      (#{commodity.commodityCode},#{commodity.name},#{commodity.title},#{commodity.summary},0,NOW())
   </insert>
@Mapper
public interface ReadExcelMapper {

    int addCommodity(@Param("commodity") Commodity commodity);

}

上面的代码 , 可以正常的插入数据 , 但是返回的数据是插入的行数 , 不是 主键id

2. 解决办法 :  将pojo对象 中的参数 , 改成和数据库一致 ( 注意大小写

<insert id="addCommodity"  useGeneratedKeys="true" keyProperty="CommodityId" parameterType="com.anonymity.project.InsertExcel.Commodity" >
            INSERT INTO
                Commodity (
                    CommodityCode,
                    name,
                    Title,
                    Summary,
                    STATUS,
                    CreateTime
                )
            VALUES
                    (#{CommodityCode},#{Name},#{Title},#{Summary},0,NOW())
                </insert>

去掉mapper接口中的 @Param 注解

@Mapper
public interface ReadExcelMapper {

    int addCommodity(Commodity commodity);

}

注意 : @Param 的使用

使用@Param时注意的问题
1.
●当用@Param注解来声明参数时,使用# {}或者${}都可以
●当不使用@Param注解时,必须使用#{},否则会报错

2.
如果是多个参数 , 要用@Param注解区分

注解是把双刃剑 , 

3. 注意 , 返回的主键不是你接收的数据 , 是在你的 pojo 对象里面 , 通过get方法来获取

int CommodityId= readExcelServiceImpl.addCommodity(commodity);

            System.out.println(CommodityId);

            int commodityId = commodity.getCommodityId();


//  CommodityId ==1;

// commodityId == 主键 id ; 

 结束 , 感谢帮我解决这个问题的朋友  Auster.

原文地址:https://www.cnblogs.com/Anonymity-zhang/p/13331630.html