useGeneratedKeys="true" keyProperty="id"的使用

useGeneratedKeys="true" keyProperty="id"的使用

http://img1.sycdn.imooc.com//climg/5cf2aef40001fdc912170135.jpg

是不是有了指定了这个属性,在添加页面时,我们不用手动输入一个报销单编号。插入时会自动生成。

同时要使用这个属性,也需要数据库的这个字段也设置成Auto increment才可以对吗?

如果没设置Auto increment还能用吗?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好!指定了useGenerateKeys属性为true的目的是为了获得插入完数据之后的id值,这个id值是自增字段,我们在插入数据时是不指定值的,所以就不知道主键值是多少。我们在传入报销单对象ClaimVoucher时是不知道主键值的,但是通过下面的设置,就会在执行插入语句后,为ClaimVoucher的主键对应字段设置值了,这样也就知道主键值是多少了。

http://img1.sycdn.imooc.com//climg/5cf343bc0001df6d11600144.jpg

另外,如果这么设置,是需要数据库中设置id为自增字段,也就是auto_increment的。所以,报销单编号是自动生成的,不需要手动输入。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 三又十二分之四 提问者 #1
    <insert id="insert" parameterType="ClaimVoucherItem"> insert into claim_voucher_item(claim_voucher_id,item,amount,comment) values(#{claimVoucherId},#{item},#{amount},#{comment}) </insert> 这是报销单条目ClaimVoucherItem 的插入语句 在插入数据时也没有指定自己的id,但是也能自增长赋值 意思是不是useGenerateKeys这个属性跟自增长无关,只是当要获取id字段才需要设置位true
    2019-06-02 11:50:04
  • 是的,你的理解是对的,只要字段是自增长类型就是可以增长的,和useGenerateKeys无关,这里只是为了取得id的值。祝学习愉快!
    2019-06-02 15:17:04
  • 我有一点想不明白的是,无论有没有useGenerateKeys mapper文件里都可以通过select * 获得id值,再用类里面的getId不就能获得id了吗~~~
    2019-06-02 17:05:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师