锁定老帖子 主题:数据库表SEQUENCE产生
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-19
最后修改:2009-02-19
sagacity(睿智)架构 第三讲:数据库sequence产生 先抛一个问题: 大家在做系统时对一些表要产生主键(一般以流水或日期加流水方式产生),大家一般怎么做呢? 是不是: select max(id) from table 或则通过hibernate自带的uuid等方式产生呢? 这种做法非常痛苦,要想sequence有点意义(如日期+流水)就比较麻烦,效率也低,每次都去对应的表里面做全量查询! sagacity中怎么做呢? 我们通过一个TABLE_SEQUENCE表存放各个表的当前sequence,表结构如下: create table SYS_TABLE_SEQUENCE alter table SYS_TABLE_SEQUENCE comment '系统流水表'; 同时通过hibernate建立一个对象,SysTableSequence.java放在sagacity核心库中 项目中的用法: 在applicationContext.xml中配置sessionFactory时添加 <property name="mappingResources">
在DAO中我们如此调用 1.单个流水: BigDecimal seq=this.getBigDecimalSequence(PmPurchaseOrderList.class); 2. 批量流水,取得的流水为第一个,其它的流水通过seq+1 BigDecimal seq=this.getBigDecimalSequence(PmPurchaseOrderList.class,size); 3.日期+几位流水 BigDecimal getDateSequence(Class entityClass, Date nowDate,String dateStyle, int length); 4.批量取日期+几位流水 BigDecimal getDateSequence(Class entityClass, Date nowDate,String dateStyle, int length, int size);
代码片段如下: /**
/**
/**
/**
/** // 非第一次创建表序号,取出当前的SEQNO Long dateValue = null; dateValue = Long.valueOf(DateUtil.formatDate(seqDate, // SEQNO 设置为当前SEQNO+增加量 // 返回起始seqNO
请期待我的第四讲,excel导入工具! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-20
受教了,搂住辛苦了
|
|
返回顶楼 | |
发表时间:2009-02-21
据说MySQL是不支持SEQUENCE的,支持IDENTITY和TABLE方式
|
|
返回顶楼 | |
发表时间:2009-02-21
不错,跨数据库的sequence,兄弟,集群环境下如何?
|
|
返回顶楼 | |
发表时间:2009-02-22
好象只有oracle,db2支持sequence吧
|
|
返回顶楼 | |
发表时间:2009-02-22
postgreSQL也支持sequence...
|
|
返回顶楼 | |
发表时间:2009-02-23
哦,谢谢楼上的提醒
受教了 不过说实话没接触过postgreSQL,呵呵。。。 |
|
返回顶楼 | |
发表时间:2009-02-23
我也是最近项目才接触的.
|
|
返回顶楼 | |
发表时间:2009-02-23
方案可以改进些,缓存1000个,这样对数据库的操作减少,速度也快。
|
|
返回顶楼 | |
浏览 4852 次