Skip to content

Releases: sagframe/sagacity-sqltoy

第二个预发布版本

07 Aug 08:54
Compare
Choose a tag to compare

1、修改了主键基于redis生成时@day(MM)或@day(dd),当月是个位数时只有一位数字的问题

4.2.9预发布版本,支持elasticsearch6.3.1 sql特性

19 Jul 15:10
Compare
Choose a tag to compare

通过 实现对elasticsearch6.3.1 sql的支持。

	<property name="elasticEndpoints">
		<list>
			<bean class="org.sagacity.sqltoy.config.model.ElasticEndpoint">
				<constructor-arg value="http://ip:9200" />
				<property name="id" value="default" />
				<!-- 6.3.x 版本支持xpack sql查询-->
				<property name="enableSql" value="true" />
				<!-- <property name="username" value="" /> 
                                           <property name="password" 	value="" /> -->
			</bean>
		</list>
	</property>

用法(原本通过elasticsearch-sql插件实现,语法保持不变):

    <eql id="sys_elastic_test" fields="chineseName,price,trademarkId">
	<value>
	<![CDATA[
		select * from goods_index
		where 1=1
		#[and chineseName =matchPhrase(:keyword)]
		#[and manufacturerName =matchPhrase(:keyword2)]
		#[and trademarkName =matchPhrase(:keyword3)]
		#[and goodsCateId in (:goodsCateIds)]
		#[and transactionType =:transactionType]
		#[and trademarkId =:trademarkId]
		#[and uom =:uom]
		#[and :endPrice >=price]
		#[and price >=:startPrice]
		#[@if(:priceSort==1 && :transactionSort==1) order by price desc,days desc,upTime desc]
		#[@if(:priceSort==0 && :transactionSort==0) order by price asc,days asc,upTime desc]
		#[@if(:priceSort==1 && :transactionSort==0) order by price asc,days asc,upTime desc]
		#[@if(:priceSort==0 && :transactionSort==1) order by price asc,days asc,upTime desc]
	]]>
	</value>
</eql>

调用方式:

    public List findESBySql(OrganInfoVO organInfoVO) throws Exception {
	return elastic().sql("sys_elastic_test").entity(organInfoVO).find();
}


    public PaginationModel findESPageBySql(PaginationModel pageModel, GoodsParam goodsParam)
        throws   Exception {
	return elastic().sql("query_goods").entity(goodsParam).resultType(Goods.class).findPage(pageModel);
}

4.2.8 版本增加日期格式化和数字格式化

05 Jul 09:57
Compare
Choose a tag to compare

4.2.8 版本增加日期格式化和数字格式化,通过算法来解决字段显示格式化问题,尤其数字格式化成中文大写、中文金额等。

   <sql id="companyTrans">
	<value>
		<![CDATA[
		select company_id,account_code,link_tel,total_amt,trans_date	
                    from company_trans
		]]>
	</value>
	<!-- 敏感数据安全脱敏 -->
	<secure-mask columns="account_code" type="public-account"/>
	<secure-mask columns="link_tel" type="tel"/>
	<!-- 日期格式化 -->
	<date-format columns="trans_date" format="yyyy-MM-dd"/>
	<!-- 数字格式化,分:#,###.00 、capital、capital-rmb 等形式 -->
	<number-format columns="total_amt" format="capital-rmb"/>
</sql>

4.2.7 增强业务主键配置策略和强化缓存翻译功能

28 May 03:08
Compare
Choose a tag to compare

1、业务主键策略可以根据多个字段组合形成。quickvo业务主键配置:
1),signature 增加${}引用related-columns 设置相关的列的值,@case() 进行类似oracle的decode函数处理,@df(${xxx},fmt) 对日期进行格式化,第一个参数缺省表示当天,第二个参数缺省为:yyMMdd。
2),related-columns可以维护多个数据库字段,用逗号分隔。

 <business-primary-key >
    <table name="OD_CONTRACT_INFO" column="CONTRACT_ID" 
      signature="${periodType}@case(${orderType},P,PO,S,SO,BN)${tradeType}@df(yyMMdd)" 
      related-columns="periodType,orderType,tradeType" length="12" generator="redis" />
</business-primary-key>

2、缓存翻译可以一组代码进行同时翻译。
如:某个字段结构是A,B,C这种格式,翻译结果为:A名称,B名称,C名称:

   <translate cache="dictKeyNameCache" columns="SEX_TYPE" split-regex="," link-sign=","/>

修复mysql/postgresql 在执行saveOrUpdate 操作时on duplicate key update 非空字段修改报错

19 May 03:59
Compare
Choose a tag to compare

1、mysql/postgresql saveOrUpdate或saveOrUpdateAll操作mysql的on duplicate key update 当某个字段在数据库中设置为not null,发生SQL 错误 [1048] [23000]: Column 'NAME' cannot be null
例如:
CREATE TABLE test1 (
ID varchar(100) NOT NULL,
NAME varchar(100) NOT NULL,
STATUS varchar(100) NOT NULL,
PRIMARY KEY (ID)
)
先插入数据:
insert into TEST1 (ID, NAME,STATUS ) values('4','test','6') ;
insert into TEST1 (ID, NAME,STATUS ) values('4',null,'6') on duplicate key
update TEST1.NAME=ifnull(values(NAME),TEST1.NAME),
TEST1.STATUS=ifnull(values(STATUS),TEST1.STATUS);

修复对mysql8.0 树形表节点路径处理的支持

12 May 02:52
Compare
Choose a tag to compare

1、节点路径在mysql8.0下未判断是mysql8导致错误。

优化es原生查询错误提醒和sql中@if()逻辑的处理

03 May 05:08
Compare
Choose a tag to compare

1、修复@if(:param=='value' && :param1=='-1')带单双引号后面紧跟+_符号的逻辑处理。
2、优化原生elasticsearch json语法解析错误提醒。
3、修复 elastic suggest 场景查询无法处理的问题
4、修复分页查询count语句优化处理时,在select from 之间有order by语句时处理异常问题。

优化pom依赖和分页查询

12 Apr 11:45
Compare
Choose a tag to compare

1、优化pom依赖,避免每次依赖oracle和其它一下特定需求情况下的依赖。
2、优化查询传参数验证提醒。
3、优化分页查询取count记录数时sql判断order by 并剔除的判断逻辑,确保剔除的精准。

感谢zhangwen 的使用回复,发现问题3在极端特殊情况下未能去除order by的问题。

4.2.2正式发布(一旦拥有你就应该去干大数据、AI了)

31 Mar 02:24
Compare
Choose a tag to compare

改进点:
1、缓存翻译全部改为ehcache3.5.2版本,无需再定义cacheManager和ehcache.xml等,大幅减少配置。
2、缓存翻译采用了新的xml schema,支持sql、rest、service等策略。
3、缓存翻译增加了主动侦测数据是否发生变化,然后清空缓存的功能,且配置灵活,支持不同时间不同频率。

bug修复:
1、sql语句@if(a== 'xxx' )逻辑判断,等号后面对比数据有空格时判断错误问题。
2、修复elasticsearch Sql查询时select count(*) count from xxxxx 没有group 时没有判断为聚合查询的bug。

注:目前sql无需再通过eclipse设置schema,已经统一用阿里云提供schema直接访问。
整体而言,4.2.2 是一个最稳定,最强大、最完善的orm框架。拥有sqltoy 你可以腾出精力干其他的了。

sqltoy-translate.xml











<!-- 缓存刷新检测 -->
<cache-update-checkers>
	<!-- 基于sql的缓存更新检测 -->
	<sql-checker check-frequency="0..8:30?600,8:30..20?600,20..24?600" datasource="dataSource">
		<sql><![CDATA[
		--#not_debug#--
		-- 机构缓存更新检测
		select distinct 'organIdName' cacheName,null cache_type
		from sys_organ_info t
		where t.UPDATE_TIME >=:lastUpdateTime
		-- 员工工号姓名缓存检测
		union all 
		select distinct 'staffIdName' cacheName,null cache_type
		from sys_staff_info t1
		where t1.UPDATE_TIME >=:lastUpdateTime
		-- 数据字典key和name缓存检测
		union all 
		select distinct 'dictKeyName' cacheName,t2.DICT_TYPE_CODE cache_type
		from sag_dict_detail t2
		where t2.UPDATE_TIME >=:lastUpdateTime
		]]></sql>
	</sql-checker>
</cache-update-checkers>

spring-sqltoy.xml 配置片段

<bean id="sqlToyContext" name="sqlToyContext" class="org.sagacity.sqltoy.SqlToyContext"
	init-method="initialize">
	<!-- 指定sql.xml 文件的路径实现目录的递归查找,非必须属性 -->
	<property name="sqlResourcesDir" value="classpath:com/sagframe/portal/modules" />
	<!-- 针对不同数据库函数进行转换,非必须属性 -->
	<property name="functionConverts" value="default"/>
	<!-- 缓存翻译管理器,非必须属性 -->
	<property name="translateConfig" value="classpath:sqltoy-translate.xml" />
	<!-- 默认值为:false -->
	<property name="debug" value="${sqltoy.debug}" />
	<!-- 默认值为:50,提供sqltoy批量更新的batch量 -->
	<property name="batchSize" value="${sqltoy.batchSize}" />
	<!-- 如果是单一类型的数据库,建议dialect一定要设置,可避免不必要的数据库类型判断 -->
	<property name="dialect" value="${sqltoy.dialect}" />
	<!-- 默认值为:100000,设置分页查询最大的提取数据记录量,防止恶意提取数据造成系统内存压力以及保障数据安全 -->
	<property name="pageFetchSizeLimit" value="50000" />
	<!-- 默认dataSource -->
	<property name="defaultDataSource" ref="dataSource" />
	<!-- 打印sql的策略 -->
	<property name="printSqlStrategy" value="debug" />
	<!-- 超过多少毫秒打印sql -->
	<property name="printSqlTimeoutMillis" value="20000" />
</bean>

4.1.0 正式发布

20 Feb 12:41
Compare
Choose a tag to compare

1、正式支持elasticsearch(两种模式:1、通过elasticsearch-sql模式和json原生模式),已经经过项目应用。
2、正式支持redis集中式主键策略,已经正式项目应用通过。
3、正式支持redis缓存翻译,已经可以同时支持ehcache和redis
4、修复sql参数过滤的一个bug,将默认blank处理作为第一处理顺序。
5、对schema xsd文件进行了调整优化
6、quickvo 支持swagger api