package org.quickbundle.base.beans.idwrapper;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.quickbundle.base.beans.AbstractDbWrapper;
import org.quickbundle.base.beans.TableIdRuleVo;
import org.quickbundle.itf.base.IRmIdWrapper;
import org.quickbundle.tools.context.RmBeanHelper;
public class MaxInDbWrapper extends AbstractDbWrapper implements IRmIdWrapper {
// 开发模式下每次都查表获得最新ID的SQL
private String sqlSelectMax = null;
// 生产模式下的ID增长Long
private AtomicLong atomicLong = null;
public MaxInDbWrapper(TableIdRuleVo ruleVo) {
super(ruleVo);
}
public void init() {
sqlSelectMax = getSqlSelectMax();
}
public synchronized String[] nextValue(int length) {
// generateIdFromDb模式下每次都查询的sql
List<String> maxIds = RmBeanHelper.getCommonServiceInstance().queryForList(sqlSelectMax, String.class);
long lTableId = getMaxIdOrDefault(maxIds.size() == 0 ? null : maxIds.get(0));
if (atomicLong == null || atomicLong.longValue() < lTableId) {
atomicLong = new AtomicLong(lTableId);
}
// 返回值
String[] ids = new String[length];
for (int i = 0; i < ids.length; i++) {
ids[i] = String.valueOf(atomicLong.getAndIncrement());
}
return ids;
}
}