用GeneratedKeyHolder获得新建数据主键值
博客专区 > i_bobby 的博客 > 博客详情
用GeneratedKeyHolder获得新建数据主键值
i_bobby 发表于4年前
用GeneratedKeyHolder获得新建数据主键值
  • 发表于 4年前
  • 阅读 318
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 有时候我们向DB新插入一条数据,都需要获取对应的主键值。在采用数据库自增主键的方案里,如果JDBC驱动不能绑定新增记录对应的主键,就需要手工执行查询语句以获取对应的主键值,对于高并发的系统,这很容易返回错误的主键。

Spring提供了一个可以返回新增记录对应主键值的方法: 
int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)

Spring为KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder,该类返回新增记录时的自增长主键值。
如:新增用户对象后,希望将主键值加载到对象中: 

public  User  createUser ( final  User  user )  {
         final  String  sql  =  "insert into sys_users(username, password, salt, locked) values(?,?,?, ?)" ;
         GeneratedKeyHolder  keyHolder  =  new  GeneratedKeyHolder ( ) ;
         jdbcTemplate . update ( new  PreparedStatementCreator ( )  {
              public  PreparedStatement  createPreparedStatement ( Connection  connection )  throws  SQLException  {
                   PreparedStatement  psst  =  connection . prepareStatement ( sql ,  new  String [ ]  {  "id"  }) ;
                   psst . setString ( 1 ,  user . getUsername ( )) ;
                   psst . setString ( 2 ,  user . getPassword ( )) ;
                   psst . setString ( 3 ,  user . getSalt ( )) ;
                   psst . setBoolean ( 4 ,  user . getLocked ( )) ;
                   return  psst ;
              }
         } ,  keyHolder ) ;
         user . setId ( keyHolder . getKey ( ) . longValue ( )) ;
         return  user ;
     }




  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 11
博文 43
码字总数 20797
×
i_bobby
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: