论坛首页 Java版 企业应用

E3平台之 E3.ID 1.0 发布

浏览 340 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间: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

E3ID 是由8位日期号 + 12位序号组合成的,是字符串类型,当序号不足时,自动会补零.

如:20081010000000000001

20081010000000000002

每天生成的ID日期号都不一样,所以每天最多允许生成的ID9999亿(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());

 

 

 

 

   
时间:2008-05-04
忘记加sequence 分类ID了,如果项目中有多个sequence ,要给sequence分类
net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator userIDSequenceGenerator =

new net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator("USER_ID");
net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator roleIDSequenceGenerator =

new net.jcreate.e3.commons.id.sequence.DefaultSequenceGenerator("ROLE_ID");
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐