您的位置: 新闻频道 开源新闻

原创新闻 E3平台之 E3.ID 1.0 发布

2008-05-03 by 见习记者 huangyh
评论(1) 有307人浏览 e3 id 主键 uuid e3id 日循环id 月循环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 具有更好的移值性.


来自:www.javae3.com

评论 共 1 条 发表评论

huangyh 2008-05-04 09:40
生成E3ID
E3ID 是由8位日期号 + 12位序号组合成的,是字符串类型,当序号不足时,自动会补零.

如:20081010000000000001

20081010000000000002

每天生成的ID日期号都不一样,所以每天最多允许生成的ID是9999亿(12位),接近1万亿,应该说足够用了.



生成e3id:

System.out.println(net.jcreate.e3.commons.id.util.IDHelper.e3id());







生成UUID
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
如果您的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
如果您的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
如果您的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());

发表评论

您还没有登录,请登录后发表评论