Spring应用数据主键的生成策略盘点


所属类别:Java

文章作者:IT168 陈雄华

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


,提供了一个可以返回新增记录对应主键值的方法:int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)org.springframework.jdbc.support.KeyHolder是一个回调接口,Spring使用它保存新增记录对应的主键,该接口的接口方法描述如下: Number getKey() throws InvalidDataAccessApiUsageException当仅插入一行数据,主键不是复合键且是数字类型时,通过该方法可以直接返回新的主键值。如果是复合主键,或者有多个主键返回时,该方法抛出InvalidDataAccessApiUsageException。该方法是最常用的方法,因为一般情况下,我们一次仅插入一条数据并且主键字段类型为数字类型; Map getKeys() throws InvalidDataAccessApiUsageException如果是复合主键,则列名和列值构成Map中的一个Entry。如果返回的是多个主键,则该方法抛出InvalidDataAccessApiUsageException异常; List getKeyList():如果返回多个主键,即PreparedStatement新增了多条记录,则每一个主键对应一个Map,多个Map构成一个List。 Spring为KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder,该类返回新增记录时的自增长主键值。假设我们希望在新增论坛板块对象后,希望将主键值加载到对象中,则可以按以下代码进行调整:

这样,在调用addForum(final Forum forum)新增forum领域对象后,forum将拥有对应的主键值,方便后继的使用。在JDBC 3.0之前的版本中,PreparedStatement不能绑定主键,如果采用表自增键(如MySql的auto increment或SqlServer的identity)将给获取正确的主键值带来挑战――因为你必须在插入数据后,马上执行另一条获取新增主键的查询语句。表 1给出了不同数据库获取最新自增主键值的查询语句: 表 1 不同数据库获取新增加的主键值

相关信息

· 摄像头大用处 VideoCap录有声电影

· [COCOON+Jfor]将FO转换为RTF格式文档

· ARP绑定网关及批处理

· 和luster学习在Linux创建库函数(6)








....

64487 29870