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.