Releases: sagframe/sagacity-sqltoy
第二个预发布版本
4.2.9预发布版本,支持elasticsearch6.3.1 sql特性
通过 实现对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 版本增加日期格式化和数字格式化
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 增强业务主键配置策略和强化缓存翻译功能
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 非空字段修改报错
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 树形表节点路径处理的支持
1、节点路径在mysql8.0下未判断是mysql8导致错误。
优化es原生查询错误提醒和sql中@if()逻辑的处理
1、修复@if(:param=='value' && :param1=='-1')带单双引号后面紧跟+_符号的逻辑处理。
2、优化原生elasticsearch json语法解析错误提醒。
3、修复 elastic suggest 场景查询无法处理的问题
4、修复分页查询count语句优化处理时,在select from 之间有order by语句时处理异常问题。
优化pom依赖和分页查询
1、优化pom依赖,避免每次依赖oracle和其它一下特定需求情况下的依赖。
2、优化查询传参数验证提醒。
3、优化分页查询取count记录数时sql判断order by 并剔除的判断逻辑,确保剔除的精准。
感谢zhangwen 的使用回复,发现问题3在极端特殊情况下未能去除order by的问题。
4.2.2正式发布(一旦拥有你就应该去干大数据、AI了)
改进点:
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 正式发布
1、正式支持elasticsearch(两种模式:1、通过elasticsearch-sql模式和json原生模式),已经经过项目应用。
2、正式支持redis集中式主键策略,已经正式项目应用通过。
3、正式支持redis缓存翻译,已经可以同时支持ehcache和redis
4、修复sql参数过滤的一个bug,将默认blank处理作为第一处理顺序。
5、对schema xsd文件进行了调整优化
6、quickvo 支持swagger api