Spring中获得数据库的自增主键值

本文介绍在Spring框架下如何正确使用自增主键获取功能,特别关注MySQL的SELECT LAST_INSERT_ID()用法及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  1. ...  
  2.     class Insert extends SqlUpdate {  
  3.   
  4.         private final Logger logger = Logger.getLogger(Insert.class);  
  5.   
  6.         public Insert(DataSource dataSource) {  
  7.             super(dataSource, INSERT_SQL);  
  8.             initInsertParams(this);  //初始化insert参数,与此处没有直接关系  
  9.               
  10.             this.setReturnGeneratedKeys(true);  //设置可以返回主键信息  
  11.               
  12.             if(logger.isDebugEnabled())  
  13.                 logger.debug(" sql =" + this.getSql());  
  14.         }  
  15.     }  
  16.   
  17.     private Insert insert;  
  18.   
  19.     private synchronized void insert(Object obj) {  
  20.         Object[] values = getInsertValues(obj);  
  21.           
  22.         //返回的主键信息将保存在GeneratedKeyHolder的LinkedList中  
  23.         KeyHolder keyHolder = new GeneratedKeyHolder();  
  24.         this.insert.update(values, keyHolder);  
  25.           
  26.         ((ObjectId) obj).setId(keyHolder.getKey().longValue());  
  27.     }  
  28. ...  

以上是AbstractDao的部分代码,提醒的一点是:如果在Spring中使用获取最新自增主键值的查询语句,比如MySQL的SELECT LAST_INSERT_ID()时,一定要注意SELECT LAST_INSERT_ID()是真对当前insert或update的Connection的,而Spring中每次操作是如此获得Connection的【Connection con = DataSourceUtils.getConnection(getDataSource());】,所以如果不能正确使用会得不到自己想要的结果。

转载自http://webwork.iteye.com/blog/361348

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值