diff --git a/README.md b/README.md index 943eabf..6cc2e53 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ 使用方法: -+ 在项目中放置jar包的地方把seq-1.5.2.jar、seq-1.5.2-sources.jar、seq-1.5.2-pom.xml复制过去 ++ 在项目中放置jar包的地方把seq-1.6.2.jar、seq-1.6.2-sources.jar、seq-1.6.2-pom.xml复制过去 + 在pom.xml中增加以下内容,然后执行maven命令:mvn clean ```xml @@ -18,7 +18,7 @@ com.yanghuanglin seq - 1.5.2 + 1.6.2 @@ -50,13 +50,13 @@ - ${project.basedir}/lib/seq-1.5.2.jar - ${project.basedir}/lib/seq-1.5.2-pom.xml - ${project.basedir}/lib/seq-1.5.2-sources.jar + ${project.basedir}/lib/seq-1.6.2.jar + ${project.basedir}/lib/seq-1.6.2-pom.xml + ${project.basedir}/lib/seq-1.6.2-sources.jar default com.yanghuanglin seq - 1.5.2 + 1.6.2 jar true @@ -478,6 +478,20 @@ public interface Generator { */ void release(Date begin, Date end); + /** + * 释放从开始时间开始,到现在时间之间未使用的序号。结束时间为方法执行时的时间 + * + * @param begin 开始时间 + */ + void releaseAfter(Date begin); + + /** + * 释放结束时间以前的序号 + * + * @param end 结束时间 + */ + void releaseBefore(Date end); + /** * 释放指定序号。一般用于业务对象删除后,对应序号需要回收使用时。 * @@ -494,5 +508,20 @@ public interface Generator { * 清空指定时间段内闲置序号和未锁定序号 */ void clear(Date begin, Date end); + + /** + * 清空从开始时间到限制时间之间闲置序号和未锁定序号,结束时间为方法执行时的时间 + * + * @param begin 开始时间 + */ + void clearAfter(Date begin); + + /** + * 清空结束时间之前的限制序号和未锁定序号 + * + * @param end 结束时间 + */ + void clearBefore(Date end); } + ``` \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5cf34b9..48eef53 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.yanghuanglin seq - 1.5.2 + 1.6.2 seq seq diff --git a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnlockDaoImpl.java b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnlockDaoImpl.java index c5445bf..c10a932 100644 --- a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnlockDaoImpl.java +++ b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnlockDaoImpl.java @@ -48,9 +48,22 @@ public class SequencesUnlockDaoImpl implements SequencesUnlockDao { @Override public List listByDate(Date begin, Date end) { - String sql = "select * from `%s_unlock` where `%s`>=? and `%s`<=?"; - sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn(), tableConfig.getCreateTimeColumn()); - return this.jdbcTemplate.query(sql, rowMapper(), begin, end); + String sql; + if (begin != null && end != null) { + sql = "select * from `%s_unlock` where `%s`>=? and `%s`<=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.query(sql, rowMapper(), begin, end); + } else if (begin != null) { + sql = "select * from `%s_unlock` where `%s`>=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.query(sql, rowMapper(), begin); + } else if (end != null) { + sql = "select * from `%s_unlock` where `%s`<=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.query(sql, rowMapper(), end); + } else { + return listAll(); + } } @Override @@ -63,10 +76,22 @@ public class SequencesUnlockDaoImpl implements SequencesUnlockDao { @Override public boolean deleteByDate(Date begin, Date end) { - String sql = "delete from `%s_unlock` where `%s`>=? and `%s`<=?"; - sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn(), tableConfig.getCreateTimeColumn()); - int result = this.jdbcTemplate.update(sql, begin, end); - return result != 0; + String sql; + if (begin != null && end != null) { + sql = "delete from `%s_unlock` where `%s`>=? and `%s`<=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.update(sql, begin, end) != 0; + } else if (begin != null) { + sql = "delete from `%s_unlock` where `%s`>=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.update(sql, begin) != 0; + } else if (end != null) { + sql = "delete from `%s_unlock` where `%s`<=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.update(sql, end) != 0; + } else { + return deleteAll(); + } } @Override diff --git a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java index 67d5184..fc0de5e 100644 --- a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java +++ b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java @@ -118,10 +118,22 @@ public class SequencesUnusedDaoImpl implements SequencesUnusedDao { @Override public boolean deleteByDate(Date begin, Date end) { - String sql = "delete from `%s_unused` where `%s`>=? and `%s`<=?"; - sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn(), tableConfig.getCreateTimeColumn()); - int result = this.jdbcTemplate.update(sql, begin, end); - return result != 0; + String sql; + if (begin != null && end != null) { + sql = "delete from `%s_unused` where `%s`>=? and `%s`<=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.update(sql, begin, end) != 0; + } else if (begin != null) { + sql = "delete from `%s_unused` where `%s`>=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.update(sql, begin) != 0; + } else if (end != null) { + sql = "delete from `%s_unused` where `%s`<=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn()); + return this.jdbcTemplate.update(sql, end) != 0; + } else { + return deleteAll(); + } } private RowMapper rowMapper() { diff --git a/src/main/java/com/yanghuanglin/seq/generator/Generator.java b/src/main/java/com/yanghuanglin/seq/generator/Generator.java index ff24fb9..fd1c2a7 100644 --- a/src/main/java/com/yanghuanglin/seq/generator/Generator.java +++ b/src/main/java/com/yanghuanglin/seq/generator/Generator.java @@ -184,6 +184,20 @@ public interface Generator { */ void release(Date begin, Date end); + /** + * 释放从开始时间开始,到现在时间之间未使用的序号。结束时间为方法执行时的时间 + * + * @param begin 开始时间 + */ + void releaseAfter(Date begin); + + /** + * 释放结束时间以前的序号 + * + * @param end 结束时间 + */ + void releaseBefore(Date end); + /** * 释放指定序号。一般用于业务对象删除后,对应序号需要回收使用时。 * @@ -200,4 +214,18 @@ public interface Generator { * 清空指定时间段内闲置序号和未锁定序号 */ void clear(Date begin, Date end); + + /** + * 清空从开始时间到限制时间之间闲置序号和未锁定序号,结束时间为方法执行时的时间 + * + * @param begin 开始时间 + */ + void clearAfter(Date begin); + + /** + * 清空结束时间之前的限制序号和未锁定序号 + * + * @param end 结束时间 + */ + void clearBefore(Date end); } diff --git a/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java b/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java index e9e8ea0..1031d10 100644 --- a/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java +++ b/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java @@ -50,7 +50,7 @@ public class SequencesGenerator implements Generator { * * @param autoCreate 是否自动创建 */ - private void createTable(Boolean autoCreate) { + private synchronized void createTable(Boolean autoCreate) { if (!autoCreate) return; this.sequencesDao.createTable(); @@ -274,6 +274,16 @@ public class SequencesGenerator implements Generator { sequencesUnlockDao.deleteByDate(begin, end); } + @Override + public synchronized void releaseAfter(Date begin) { + release(begin, null); + } + + @Override + public synchronized void releaseBefore(Date end) { + release(null, end); + } + @Override public synchronized void release(Sequences sequences) { if (sequences == null) @@ -283,14 +293,24 @@ public class SequencesGenerator implements Generator { } @Override - public void clear() { + public synchronized void clear() { sequencesUnlockDao.deleteAll(); sequencesUnusedDao.deleteAll(); } @Override - public void clear(Date begin, Date end) { + public synchronized void clear(Date begin, Date end) { sequencesUnlockDao.deleteByDate(begin, end); sequencesUnusedDao.deleteByDate(begin, end); } + + @Override + public synchronized void clearAfter(Date begin) { + clear(begin, null); + } + + @Override + public synchronized void clearBefore(Date end) { + clear(null, end); + } }