package org.quickbundle.base.beans.factory;
import org.quickbundle.itf.base.IRmIdGenerator;
/**
* ID生成器单例
*
* @author 白小勇
*/
public class RmIdFactory {
/**
* 获得单例
* @return
*/
public static IRmIdGenerator getIdGenerator() {
if(!isInitId) {
synchronized (RmIdFactory.class) {
if(!isInitId) {
idGenerator = (IRmIdGenerator) RmBeanFactory.getBean("org.quickbundle.itf.base.IRmIdGenerator");
idGenerator.init();
isInitId = true;
}
}
}
return idGenerator;
}
/**
* 获取单个唯一ID,Long格式
*
* @param tableName 表名
* @return 返回内存中自增长的ID,未找到返回null
*/
public static Long requestIdLong(String tableName) {
return new Long(requestId(tableName));
}
/**
* 获取单个唯一ID
*
* @param tableName 表名
* @return 返回内存中自增长的ID,未找到返回null
*/
public static String requestId(String tableName) {
String[] ids = requestId(tableName, 1);
if(ids == null || ids.length == 0) {
return null;
}
return ids[0];
}
/**
* 批量获取唯一ID
* @param tableName 表名
* @param length 批量数
* @return 返回内存中自增长的ID,未找到返回null
*/
public static String[] requestId(String tableName, int length) {
if(length < 1) {
return new String[0];
}
IRmIdGenerator instance = getIdGenerator();
if(idGenerator == null && isInitId) {
return null;
}
return instance.requestIdInner(tableName.toUpperCase(), length);
}
/**
* 批量获取唯一ID,Long[]格式
* @param tableName 表名
* @param length 批量数
* @return 返回内存中自增长的ID,未找到返回null
*/
public static Long[] requestIdLong(String tableName, int length) {
String[] ids = requestId(tableName, length);
Long[] result = new Long[length];
for (int i = 0; i < ids.length; i++) {
result[i] = new Long(ids[i]);
}
return result;
}
//全局单例
private static IRmIdGenerator idGenerator = null;
//全局单例的初始化标记,用于双检锁安全判断
private static volatile boolean isInitId = false;
}