6.3.1.2 **translate缓存翻译**
6.3.1.2.1 **常规用法**
缓存翻译的目的在于简化sql逻辑,避免sql过多的关联,比如:查询员工信息表,员工的岗位、籍贯、技能等级等属于数据字典,要显示相应的中文。支持对多值进行翻译。
如:某个字段结构是A,B,C这种格式,翻译结果为:A名称,B名称,C名称:
传统模式:
![](images/b5f87015da7730356f1c9a1022ba46280a8c8ced.png)
是不是这酱汁的?好长的sql呀!关联了2次数据字典,性能必然下降!
sqltoy是怎么做呢?
![](images/2bc18d43cfde3fa8b55b8d552f54274efe798ea3.png)
属性名称
是否可选
说明
cache
必选项
缓存的名称
cache-type
可选项
这里主要实现传递一个分类,如数据字典类别
columns
必选项
对哪些列进行翻译(可以多列)
cache-indexs
可选项
默认为1,值要跟columns对应
split-regex
可选项
针对多值进行翻译时的切割符号
link-sign
可选项
多值翻译后拼接符号
注: 缓存翻译可以一组代码进行同时翻译。
如:某个字段结构是A,B,C这种格式,翻译结果为:A名称,B名称,C名称:
<translate cache="dictKeyNameCache" columns="SEX\_TYPE" split-regex="\\\\," link-sign=","/>
Sql极度精简,通过缓存(sqltoy默认使用的是ehcache缓存框架,可以根据实际通过接口拓展)翻译只对结果数据通过内存将code转为对应的Name。
Translate定义请参见演示项目sqltoy-quickstart下的sqltoy-translate.xml配置:
![](images/fa00e26497554e38babc66f486a5a7671d50bb87.png)
缓存翻译查询必须要:key,name,aliaseName,topName等形式,查询结果是以LinkedHashMap<String,Object\[\]> 形式存储,因此cache-index,0列对应的是key,1列对应name,等等!
spring中配置的sqltoyContext中配置的缓存翻译
![](images/8607d3aa121735855d4aebad8fdb710d69d00097.png)
6.3.1.2.2 **特殊场景介绍**
假如要翻译商品名称,根据local选择确定是中文和英文
这种场景缓存的模式分2种:
* 多字段确认模式
代码名称(PROD\_CODE)
环境(ENV\_TYPE)
名称(PROD\_NAME)
A001
CN
苹果
A001
EN
APPLE
设置缓存时,双字段组合成一个唯一的key:
select concat(PROD\_CODE,ENV\_TYPE) GLOBAL\_KEY, PROD\_NAME
代码中则通过QueryExecutor或EntityQuery动态传递Translate,通过设置keyTemplate将key和外部参数组合起来作为缓存的key
![](images/5c625a4ab22928f39ca73a960dd66fedc3d48b14.png)
* 多列模式
代码名称(PROD\_CODE)
中文名称
英文名称
A001
苹果
APPLE
A002
香蕉
BANANA
Java代码中则可以动态设置cache-index
![](images/774c37baa2eb208d8a993044b36769057400971e.png)
上述是EntityQuery单表查询,针对xml中定义的复杂sql,我们使用QueryExecutor来实现!
![](images/9eed2ee43ea5f1fbcd1a487f8f76b686779f5814.png)
注意:使用QueryExecutor对应的缓存设置sql中须写完整
Select key as translateName,如:下图所示的STAFF\_ID staffName等
![](images/7e199d28ba355236aca473fc8950a14f25130f2f.png)
6.3.1.2.3 **对接口数据进行翻译**
* 数据来源于其他的接口服务,其中有部分信息需要将编码转为名称,无法通过sql中配置缓存翻译,sqltoy提供了直接对集合进行翻译的方式。
![](images/8d3e02451ae944442cbf51dc021c30927b26eb32.png)
* 用法说明:
![](images/cb325be25df6c22ec9075b2c3569e19502d711c4.png)
- 1.简介
- 开发历程
- 技术架构
- 问答了解
- 版本历史
- update-5.1.4、4.18.43
- update-5.1.2
- 早期历史
- 5.1.15.rc1
- 2.快速使用
- 示例与环境
- quickvo工具使用
- 用法说明
- 关键注意事项
- 严格VO(DTO)和POJO(entity)分层
- 3.教程
- spring项目搭建
- Toy-ORM 配置
- 详细配置参数
- 缓存功能
- 缓存配置、缓存扩展
- 扩展缓存框架配置
- 缓存翻译
- 其他缓存应用场景
- 公共功能
- 表(对象)关联
- 公共字段赋值
- 链式操作
- DTO与POJO互转
- 对象操作
- save + update
- delete + trunk
- load加载数据
- 唯一验证
- 树形数据
- sharding分库分表
- SQL操作
- sql文件规则
- filters说明
- 缓存翻译
- 分库分表
- 汇总、环比
- 行列转换
- 数据脱敏
- 格式化-数字日期
- sqlToy的sql查询基本规则
- Sql查询功能
- load操作
- get操作
- find操作
- 分页查询
- 并行查询
- execute操作
- executeSql
- executeStore
- 数据库特性
- 主键策略
- JSON等类型扩展支持
- 跨库说明--异种库兼容
- 数据库保留字处理
- 多源-多库-异库
- 多数据源
- Mongodb支持
- ElasticSearch支持
- 高级扩展
- 补充-if+fast+blank+value+loop
- 高级功能
- 完美sql
- 快速分页
- 缓存翻译
- 防止sql注入
- 字段加解密
- 扩展集成