时间:2008-05-03 关键字: id生成组件
E3.ID 是e3.commons下的一个专门用户生成ID的组件,E3.ID 的特点:
q 支持分布式ID的生成,当你的应用需要部署在多台服务器时,e3.id 允许给ID设置前缀,能有效避免ID冲突的问题.
q E3.ID 是用java开发的,所以跟具体数据库无关,独立数据库,所以具有更好的移值性.
q E3.ID 是有序的,生成的ID排列顺序以调用先后时间一致.
q E3.ID 允许控制序号的最小值,最大值,以及是否循环等属性,所以如果您正在使用数据库的sequence时,可以考虑使用E3.ID, 因为E3.ID 具有更好的移值性.
源代码请到svn下载
svn checkout https://ie3.googlecode.com/svn/trunk/ ie3 --username sunky1@126.com
JAR 包下载请到
http://www.javae3.com/posts/list/30.page
E3ID 是由8位日期号 + 12位序号组合成的,是字符串类型,当序号不足时,自动会补零.
如:20081010000000000001
20081010000000000002
每天生成的ID日期号都不一样,所以每天最多允许生成的ID是9999亿(12位),接近1万亿,应该说足够用了.
生成e3id:
|
System.out.println(net.jcreate.e3.commons.id.util.IDHelper.e3id());
|
E3提供的UUID代码是来自hibernate的,uuid长度固定为32位.因为生成uuid时,不需要做同步处理,速度比较快,所以一次性当需要生成大批量的ID时,可以考虑用UUID.
生成uuid:
|
System.out.println(net.jcreate.e3.commons.id.util.IDHelper.uuid());
|
如果您要生成1,2,3…之类的序号时,使用DefaultIDGenerator
|
net.jcreate.e3.commons.id.generator.DefaultIDGenerator generator =
new net.jcreate.e3.commons.id.generator.DefaultIDGenerator();
System.out.println(generator.create());
|
有的时候您可能需要限制序号的最小值、最大值时,您可以这样做:
|
net.jcreate.e3.commons.id.generator.DefaultIDGenerator generator =
new net.jcreate.e3.commons.id.generator.DefaultIDGenerator();
net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator sequenceGenerator =
new net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator();
sequenceGenerator.setMinValue(1000);
sequenceGenerator.setMaxValue(9999);
generator.setSequenceGenerator(sequenceGenerator);
System.out.println(generator.create());
|
如果您希望生成的ID长度固定是多少位时,可以使用使用SequenceFormater来处理.
|
net.jcreate.e3.commons.id.generator.DefaultIDGenerator generator =
new net.jcreate.e3.commons.id.generator.DefaultIDGenerator();
net.jcreate.e3.commons.id.formater.DefaultSequenceFormater sequenceFormater =
new net.jcreate.e3.commons.id.formater.DefaultSequenceFormater();
sequenceFormater.setPattern("000000");
generator.setSequenceFormater(sequenceFormater);
System.out.println(generator.create());
|
sequenceFormater.setPattern("000000"); 用于确定输出序号的模式.
当您希望给所有的ID都追加一个前缀时,可以使用SequencePrefix来处理.下面的用法是给ID加上”E3”前缀.
|
net.jcreate.e3.commons.id.generator.DefaultIDGenerator generator =
new net.jcreate.e3.commons.id.generator.DefaultIDGenerator();
net.jcreate.e3.commons.id.prefix.DefaultPrefixGenerator prefixGenerator =
new net.jcreate.e3.commons.id.prefix.DefaultPrefixGenerator();
generator.setPrefixGenerator(prefixGenerator);
prefixGenerator.setPrefix("E3");
System.out.println(generator.create());
|
prefixGenerator.setPrefix("E3");用来设置前缀.
如果您的ID是每天都从初始值开始编码时,请使用日循环序号生成器.
|
net.jcreate.e3.commons.id.generator.DefaultIDGenerator generator =
new net.jcreate.e3.commons.id.generator.DefaultIDGenerator();
net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator sequenceGenerator =
net.jcreate.e3.commons.id.sequence.TimeRollingSequenceGenerator.getDayRollingSequenceGenerator();
sequenceGenerator.setMinValue(1000000);
sequenceGenerator.setMaxValue(9999999);
generator.setSequenceGenerator(sequenceGenerator);
System.out.println(generator.create());
|
如果您的ID是每月都从初始值开始编码时,请使用日循环序号生成器.
|
net.jcreate.e3.commons.id.generator.DefaultIDGenerator generator =
new net.jcreate.e3.commons.id.generator.DefaultIDGenerator();
net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator sequenceGenerator =
net.jcreate.e3.commons.id.sequence.TimeRollingSequenceGenerator.getMonthRollingSequenceGenerator();
sequenceGenerator.setMinValue(1000000);
sequenceGenerator.setMaxValue(9999999);
generator.setSequenceGenerator(sequenceGenerator);
System.out.println(generator.create());
|
如果您的ID是每年都从初始值开始编码时,请使用日循环序号生成器.
|
net.jcreate.e3.commons.id.generator.DefaultIDGenerator generator =
new net.jcreate.e3.commons.id.generator.DefaultIDGenerator();
net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator sequenceGenerator =
net.jcreate.e3.commons.id.sequence.TimeRollingSequenceGenerator.getYearRollingSequenceGenerator();
sequenceGenerator.setMinValue(1000000);
sequenceGenerator.setMaxValue(9999999);
generator.setSequenceGenerator(sequenceGenerator);
System.out.println(generator.create());
|