如何获取主键自增值?为啥获取不到返回的自增主键id的值?

项目场景:

往b表里添加a表获取的自增主键id

问题描述:

大家注意这里有好多坑

  1. 怎么实现?
  2. keyProperty怎麽设置?
  3. 都写好了就是获取不到主键ID

解决方案:

1.第一个问题,怎么实现?

DamageListGoodsDao(也就时a表主表,要获取的主键id表)

int insertDamageList(@Param("damageList") DamageList damageList);

DamageListGoodsMapper.xml(敲重点了!!!)

1.首先得设置主键自增,也就是useGeneratedKeys=“true”
2.其次设置keyProperty中对应的值是实体类的属性,千万不要设置成数据库的字段

 <insert id="insertDamageList" useGeneratedKeys="true" keyProperty="damageList.damageListId" parameterType="com.atguigu.jxc.entity.DamageList">
        insert into t_damage_list(damage_number,damage_date,remarks,user_id)
        values (#{damageList.damageNumber},#{damageList.damageDate},#{damageList.remarks},#{damageList.userId})
    </insert>

最后,获取到新增行的主键ID,会返回给设置的model模型(也就是实体类)中,然后直接调用实体类属性就可以得到值了

DamageListGoodServiceImpl(测试结果,这里展示关键的service代码)

// 调用dao层插入a表的方法 说明damageList是DamageList实体类的对象
damageListGoodsDao.insertDamageList(damageList);
// 输出得到的主键值 这里的主键值已经封装给实体类了
System.out.println(damageList.getDamageListId());
// 把a表查到的主键值插入到b表 damageListGoods是前端传来b表的数据
// 根据你自己的代码看是否传该参数
damageListGoodsDao.insertDamageListGoods(damageList,damageListGoods);

细节注意:都写好了就是获取不到主键ID:


1.查看dao层中的调用a表的方法传的参数 有俩种方法

第一种:传参时加@Param()的如下

DamageListGoodsDao(也就时a表主表,要获取的主键id表)

int insertDamageList(@Param("damageList") DamageList damageList);

使用这种方式传的参,keyProperty必须要设置为
keyProperty=“damageList.damageListId”

<insert id="insertDamageList" keyProperty="damageList.damageListId" parameterType="com.atguigu.jxc.entity.DamageList" useGeneratedKeys="true">
   insert into t_damage_list(damage_number,damage_date,remarks,user_id)
   values (#{damageList.damageNumber},#{damageList.damageDate},#{damageList.remarks},#{damageList.userId})
</insert>

第二种:传参时不加@Param()的如下

int insertDamageList(DamageList damageList);

这种方式,keyProperty设置为实体类对应的主键id就可以了
keyProperty=“damageListId”

 <insert id="insertDamageList" parameterType="com.atguigu.jxc.entity.DamageList" useGeneratedKeys="true" keyProperty="damageListId">
    insert into t_damage_list(damage_number,damage_date,remarks,user_id)
    values (#{damageNumber},#{damageDate},#{remarks},#{userId})
</insert>

2.查看数据库表,是否设置了主键

总结:

1.主要设好useGeneratedKeys以及keyProperty这两个属性
2.@Parm("") 传的参要与keyProperty=“”值得格式一样
3.数据库表的主键

补充知识点
在不使用@Param注解的时候,只能使用一个参数,并且在查询语句取值时只能用#{}(如果想传递多个参数,parameterType参数类型为map(此处为别名)或者为JavaBean)
在使用@Param注解的时候,可以使用多个参数,无需再设置parameterType,并且在查询语句中使用时可以使用#{}或者${}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值