使用递归唯一性验证的方式生成主键

JadePool作为简化JDBC编程工具,提供主键生成方法是必须的。在JadePool中,ProcessVO用于事务型数据库的DML操作,Access用于非事务型数据库的DML操作,Access参照ProcessVO实现。

目前,JadePool只提供了单主键的键值生成方法,没有提供复合主键的生成方法。这里以ProcessVO为例。ProcessVO提供了三个插入主键的方法,分别是:

public Long insertKey(String tableName);
public Object insertAutoKey(String tableName);
public String insertKey(String tableName, String keyValue);


参数tableName是表的名称,虽然没有提供XML映射、注入映射,但创建ProcessVO对象时,通过实例化DbCenter的某一个实例,数据库的结构信息已经被保存在该实例的相关属性中。在tableName表中,哪一个字段是主键,该字段有哪些属性,这些信息均可以通过访问DbCenter的实例得到。



一、长整形主键键值生成策略
调用insertKey(String tableName)插入长整形键值。

insertKey在多例模式的某一个实例中实现,取值范围是系统时间*10000+[0~9999]。在这个取值范围内,按照从小到大的方向,通过递归唯一性验证的方式获取第一个符合条件的值。用户在使用JadePool时,应当注意,一个数据库只使用DbCenter的一个实例。

一个数据库只使用DbCenter的一个实例,这同使用单例模式的效果是相同的。

插入主键的过程是这样的,ProcessVO的对象向DbCenter的实例请求插入主键键值,DbCenter的实例通过调用自身管理的Table对象的方法makeLongKeyValue()计算唯一性的主键值, 将结果返回给DbCenter的实例,逐步返回给ProcessVO对象。
在Table对象中,makeLongKeyValue()方法调用了一个递归方法onlyLongValue(),用于确保返回的键值是唯一的。


ProcessVO		DbCenter		
   |                   |                   
   |                   |                   
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值