标签名
描述
提交信息
操作

1、增强sql自动分页提取count部分sql的算法,兼容最终from前面有非(select from)对称场景:

select field1,(day form(xxx)) as aliase from table 

2、优化DateUtil,对非规范长度的字符串(如:2024-11-07 10:52:36.12345)转LocalDateTime、LocalTime的兼容处理
3、强化opengauss系列getTables方法,表名匹配小写化

<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy</artifactId>
         <!-- jdk8 对应的版本号为:5.6.31.jre8 -->
	<version>5.6.31</version>
</dependency>

<!-- springboot  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-spring-starter</artifactId>
         <!-- jdk8 对应的版本号为:5.6.31.jre8 -->
	<version>5.6.31</version>
</dependency>

<!-- solon 插件  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
        <!-- jdk8 对应的版本号为:5.6.31.jre8 -->
	<version>5.6.31</version>
</dependency>
2024-11-08 12:42

1、增加opengauss、stardb数据库的支持,将vastbase、mogdb改为继承opengauss模式

<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy</artifactId>
         <!-- jdk8 对应的版本号为:5.6.30.jre8 -->
	<version>5.6.30</version>
</dependency>

<!-- springboot  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-spring-starter</artifactId>
         <!-- jdk8 对应的版本号为:5.6.30.jre8 -->
	<version>5.6.30</version>
</dependency>

<!-- solon 插件  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
        <!-- jdk8 对应的版本号为:5.6.30.jre8 -->
	<version>5.6.30</version>
</dependency>
2024-10-28 12:41

1、增加vastbase、stardb、opengauss数据库的支持

2024-10-28 12:41

1、增加vastbase数据库的支持

2024-10-28 12:41

1、增加海量数据库(vastbase)支持,默认映射成gaussdb执行
2、分页最大单页记录pageFetchSizeLimit(对应参数:spring.sqltoy.pageFetchSizeLimit)小于0表示不做限制
3、优化个别rs.close()行为,统一放入finally块中处理
4、升级solon3.0.2版本

<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy</artifactId>
         <!-- jdk8 对应的版本号为:5.6.29.jre8 -->
	<version>5.6.29</version>
</dependency>

<!-- springboot  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-spring-starter</artifactId>
         <!-- jdk8 对应的版本号为:5.6.29.jre8 -->
	<version>5.6.29</version>
</dependency>

<!-- solon 插件  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
        <!-- jdk8 对应的版本号为:5.6.29.jre8 -->
	<version>5.6.29</version>
</dependency>
2024-10-20 00:22

1、规范if\else的逻辑

select * from table where name='测试'
-- 非if逻辑场景下,内部动态参数为null,最终为and status=1 也要自动剔除
#[and status=1 #[and type=:type] #[and orderName like :orderName] ]
-- flag==1成立,因为内容存在动态参数,所以继续变成#[and status=:status]参数为null剔除,不为null则保留
#[@if(:flag==1) and status=:status]
-- 成立,因为and status=1 没有动态参数,则保留and status=1
#[@if(:flag==1) and status=1 ]
#[@else and status in (1,2)]

<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy</artifactId>
         <!-- jdk8 对应的版本号为:5.6.28.jre8 -->
	<version>5.6.28</version>
</dependency>

<!-- springboot  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-spring-starter</artifactId>
         <!-- jdk8 对应的版本号为:5.6.28.jre8 -->
	<version>5.6.28</version>
</dependency>

<!-- solon 插件  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
        <!-- jdk8 对应的版本号为:5.6.28.jre8 -->
	<version>5.6.28</version>
</dependency>
2024-10-15 21:17

1、规范if\else的逻辑

select * from table where name=1
-- 非if逻辑场景下,内部动态参数为null,最终为and status=1 也要自动剔除
#[and status=1 #[and type=:type] #[and orderName like :orderName] ]
-- flag==1成立,因为内容存在动态参数,所以继续变成#[and status=:status]参数为null剔除,不为null则保留
#[@if(:flag==1) and status=:status]
-- 成立,因为and status=1 没有动态参数,则保留and status=1
#[@if(:flag==1) and status=1 ]
#[@else and status in (1,2)]

2024-10-15 21:17

1、修复StringUtil.firstToLowerCase单字符处理缺陷

<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy</artifactId>
         <!-- jdk8 对应的版本号为:5.6.27.jre8 -->
	<version>5.6.27</version>
</dependency>

<!-- springboot  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-spring-starter</artifactId>
         <!-- jdk8 对应的版本号为:5.6.27.jre8 -->
	<version>5.6.27</version>
</dependency>

<!-- solon 插件  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
        <!-- jdk8 对应的版本号为:5.6.27.jre8 -->
	<version>5.6.27</version>
</dependency>
2024-10-15 21:17

1、针对batchUpdate、saveAll、updateAll、saveOrUpdateAll、loadAll等批量操作,针对超大数据集场景提供并行执行机制

@Test
public void testDeleteAll() {
    List entites = new ArrayList();
    for (int i = 1; i < 3000; i++) {
        entites.add(new ComplexpkHeadVO(LocalDateTime.parse("2020-09-08T12:11:20"), "S000" + i));
    }
    // 最小1000作为一个并行分组,并行度10、最大等待时间120秒
    lightDao.delete().parallelConfig(ParallelConfig.create().groupSize(1000)
    .maxThreads(10).maxWaitSeconds(120)).many(entites);
    //批量修改		 
    //lightDao.update().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);
    //批量保存
    //lightDao.save().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);  		  
    //批量saveOrUpdate,saveMode(SaveMode.UPDATE)存在则修改
    //lightDao.save().saveMode(SaveMode.UPDATE).parallelConfig(ParallelConfig.create()
    // .groupSize(1000)).many(entites);
}

2、sql支持if\elseif\else 逻辑

String sql = """
    select * from table where 1=1
    #[@if(:flag==1) and status=:status
        #[@if(:operateType==2) and saleType is not :saleType]
        #[@else and saleType is :saleType]
    ]
    #[@elseif(:flag==2) and name like :name]
    #[@else and orderType=:orderType]
    #[@if(:tenantId==4) and tenant=1]
    #[@elseif(:tenantId==3) and tenant=3]
""";
SqlToyResult result = SqlConfigParseUtils.processSql(sql,new String[] { "flag", "status", "name", "orderType", "saleType", "operateType", "tenantId" },new Object[] { 1, 1, "张", "SALE", null, 4, 3 });
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy</artifactId>
         <!-- jdk8 对应的版本号为:5.6.26.jre8 -->
	<version>5.6.26</version>
</dependency>

<!-- springboot  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-spring-starter</artifactId>
         <!-- jdk8 对应的版本号为:5.6.26.jre8 -->
	<version>5.6.26</version>
</dependency>

<!-- solon 插件  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
        <!-- jdk8 对应的版本号为:5.6.26.jre8 -->
	<version>5.6.26</version>
</dependency>
2024-09-29 20:25

1、针对batchUpdate、saveAll、updateAll、saveOrUpdateAll、loadAll等批量操作,针对超大数据集场景提供并行执行机制

@Test
public void testDeleteAll() {
    List entites = new ArrayList();
    for (int i = 1; i < 3000; i++) {
        entites.add(new ComplexpkHeadVO(LocalDateTime.parse("2020-09-08T12:11:20"), "S000" + i));
    }
    // 最小1000作为一个并行分组,并行度10、最大等待时间120秒
    lightDao.delete().parallelConfig(ParallelConfig.create().groupSize(1000)
    .maxThreads(10).maxWaitSeconds(120)).many(entites);
    //批量修改		 
    //lightDao.update().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);
    //批量保存
    //lightDao.save().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);  		  
    //批量saveOrUpdate,saveMode(SaveMode.UPDATE)存在则修改
    //lightDao.save().saveMode(SaveMode.UPDATE).parallelConfig(ParallelConfig.create()
    // .groupSize(1000)).many(entites);
}

2、sql支持if\elseif\else 逻辑

String sql = """
    select * from table where 1=1
    #[@if(:flag==1) and status=:status
        #[@if(:operateType==2) and saleType is not :saleType]
        #[@else and saleType is :saleType]
    ]
    #[@elseif(:flag==2) and name like :name]
    #[@else and orderType=:orderType]
    #[@if(:tenantId==4) and tenant=1]
    #[@elseif(:tenantId==3) and tenant=3]
""";
SqlToyResult result = SqlConfigParseUtils.processSql(sql,new String[] { "flag", "status", "name", "orderType", "saleType", "operateType", "tenantId" },new Object[] { 1, 1, "张", "SALE", null, 4, 3 });
2024-09-29 20:25

1、针对batchUpdate、saveAll、updateAll、saveOrUpdateAll、loadAll等批量操作,针对超大数据集场景提供并行执行机制

@Test
public void testDeleteAll() {
    List entites = new ArrayList();
    for (int i = 1; i < 3000; i++) {
        entites.add(new ComplexpkHeadVO(LocalDateTime.parse("2020-09-08T12:11:20"), "S000" + i));
    }
    // 最小1000作为一个并行分组,并行度10、最大等待时间120秒
    lightDao.delete().parallelConfig(ParallelConfig.create().groupSize(1000)
    .maxThreads(10).maxWaitSeconds(120)).many(entites);
    //批量修改		 
    //lightDao.update().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);
    //批量保存
    //lightDao.save().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);  		  
    //批量saveOrUpdate,saveMode(SaveMode.UPDATE)存在则修改
    //lightDao.save().saveMode(SaveMode.UPDATE).parallelConfig(ParallelConfig.create()
    // .groupSize(1000)).many(entites);
}

2、sql支持if\elseif\else 逻辑

String sql = """
    select * from table where 1=1
    #[@if(:flag==1) and status=:status
        #[@if(:operateType==2) and saleType is not :saleType]
        #[@else and saleType is :saleType]
    ]
    #[@elseif(:flag==2) and name like :name]
    #[@else and orderType=:orderType]
    #[@if(:tenantId==4) and tenant=1]
    #[@elseif(:tenantId==3) and tenant=3]
""";
SqlToyResult result = SqlConfigParseUtils.processSql(sql,new String[] { "flag", "status", "name", "orderType", "saleType", "operateType", "tenantId" },new Object[] { 1, 1, "张", "SALE", null, 4, 3 });
2024-09-29 20:25

1、针对batchUpdate、saveAll、updateAll、saveOrUpdateAll、loadAll等批量操作,针对超大数据集场景提供并行执行机制

@Test
public void testDeleteAll() {
    List entites = new ArrayList();
    for (int i = 1; i < 3000; i++) {
        entites.add(new ComplexpkHeadVO(LocalDateTime.parse("2020-09-08T12:11:20"), "S000" + i));
    }
    // 最小1000作为一个并行分组,并行度10、最大等待时间120秒
    lightDao.delete().parallelConfig(ParallelConfig.create().groupSize(1000)
    .maxThreads(10).maxWaitSeconds(120)).many(entites);
    //批量修改		 
    //lightDao.update().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);
    //批量保存
    //lightDao.save().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);  		  
    //批量saveOrUpdate,saveMode(SaveMode.UPDATE)存在则修改
    //lightDao.save().saveMode(SaveMode.UPDATE).parallelConfig(ParallelConfig.create()
    // .groupSize(1000)).many(entites);
}

2、sql支持if\elseif\else 逻辑

String sql = """
	select * from table where name=1
	#[@if(:flag==1) and #[status=:status]]
	#[@elseif(:flag==2) and name like :name]
	#[@else and orderType=:orderType]
	""";
SqlToyResult result = SqlConfigParseUtils.processSql(sql,
new String[] { "flag", "status", "name", "orderType" }, new Object[] { 1, 1, "张", "SALE" });
2024-09-29 20:25

1、针对batchUpdate、saveAll、updateAll、saveOrUpdateAll、loadAll等批量操作,针对超大数据集场景提供并行执行机制

@Test
public void testDeleteAll() {
    List entites = new ArrayList();
    for (int i = 1; i < 3000; i++) {
        entites.add(new ComplexpkHeadVO(LocalDateTime.parse("2020-09-08T12:11:20"), "S000" + i));
    }
    // 最小1000作为一个并行分组,并行度10、最大等待时间120秒
    lightDao.delete().parallelConfig(ParallelConfig.create().groupSize(1000)
    .maxThreads(10).maxWaitSeconds(120)).many(entites);
    //批量修改		 
    //lightDao.update().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);
    //批量保存
    //lightDao.save().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);  		  
    //批量saveOrUpdate,saveMode(SaveMode.UPDATE)存在则修改
    //lightDao.save().saveMode(SaveMode.UPDATE).parallelConfig(ParallelConfig.create()
    // .groupSize(1000)).many(entites);
}

2、sql支持if\elseif\else 逻辑

String sql = """
	select * from table where name=1
	#[@if(:flag==1) and #[status=:status]]
	#[@elseif(:flag==2) and name like :name]
	#[@else and orderType=:orderType]
	""";
SqlToyResult result = SqlConfigParseUtils.processSql(sql,
new String[] { "flag", "status", "name", "orderType" }, new Object[] { 1, 1, "", "SALE" });
2024-09-29 20:25

1、针对batchUpdate、saveAll、updateAll、saveOrUpdateAll、loadAll等批量操作,针对超大数据集场景提供并行执行机制

@Test
	public void testDeleteAll() {
		List entites = new ArrayList();
		for (int i = 1; i < 3000; i++) {
			entites.add(new ComplexpkHeadVO(LocalDateTime.parse("2020-09-08T12:11:20"), "S000" + i));
		}
		// 最小1000作为一个并行分组,并行度10、最大等待时间120秒
		lightDao.delete().parallelConfig(ParallelConfig.create().groupSize(1000).maxThreads(10).maxWaitSeconds(120))
				.many(entites);
//		//批量修改
//		lightDao.update().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);
//		//批量保存
//		lightDao.save().parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);
//		//批量saveOrUpdate,saveMode(SaveMode.UPDATE)存在则修改
//		lightDao.save().saveMode(SaveMode.UPDATE).parallelConfig(ParallelConfig.create().groupSize(1000)).many(entites);

	}
2024-09-29 20:25

1、save操作增加判断主键值不为空时,且是sequence主键策略则主动调整为assgin,避免sequence跳号
2、batchUpdate、executeSql操作时,增加判断sql是否是merge into 且方言是sqlserver,帮助自动补充分号结尾(sqlserver merge into 必须是;结尾)
3、完善代码注释以及变更日志,增强代码可理解性和变更原因
4、升级pom第三方组件的依赖版本

<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy</artifactId>
         <!-- jdk8 对应的版本号为:5.6.25.jre8 -->
	<version>5.6.25</version>
</dependency>

<!-- springboot  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-spring-starter</artifactId>
         <!-- jdk8 对应的版本号为:5.6.25.jre8 -->
	<version>5.6.25</version>
</dependency>

<!-- solon 插件  -->
<dependency>
	<groupId>com.sagframe</groupId>
	<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
        <!-- jdk8 对应的版本号为:5.6.25.jre8 -->
	<version>5.6.25</version>
</dependency>
2024-09-29 09:45

1、save操作增加判断主键值不为空时,且是sequence主键策略则主动调整为assgin,避免sequence跳号
2、batchUpdate、executeSql操作时,增加判断sql是否是merge into 且方言是sqlserver,帮助自动补充分号结尾(sqlserver merge into 必须是;结尾)

2024-09-27 23:38
2024-09-20 21:32
2024-09-20 21:32
2024-09-05 13:48
2024-09-05 13:48