# agile-dictionary
**Repository Path**: memcacheon/agile-dictionary
## Basic Information
- **Project Name**: agile-dictionary
- **Description**: 字典解析器
启动自动加载 集成该组件后,字典数据加载将伴随spring应用启动,将持久层字典数据加载如缓存,以便提高缓存查询性能
缓存同步 集成缓存组件agile-cache可实现缓存方式切换spring.cache.type,如redis、ehcache、memory等方式,缓存使用请参照缓存组件https://gitee.com/agile-framework/agile-cache
复杂翻译 通过提供工具类cloud.agileframework.dictionary.util.DictionaryUtil,实现诸多复杂字典翻译方式,如字典码与字典值相互转换,根据父子字典信息翻译、全路径字典值/码翻译、字典注解解析 集合数据字典翻译、自定义字典分隔符、指定默认值等等一系列工具
字典注解 用于pojo类属性上添加cloud.agileframework.dictionary.annotation.Dictionary字典注解,通过DictionaryUtil.cover方法或内嵌至持久层组件中,实现无感翻译。 agile-jpa组件中已集成该组件实现无感翻译。
自定义字典
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2024-03-17
- **Last Updated**: 2024-03-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# agile-dictionary : 字典解析器
[](https://img.shields.io/badge/spring-LATEST-green)
[](https://img.shields.io/badge/build-maven-green)
## 它有什么作用
* **启动自动加载**
集成该组件后,字典数据加载将伴随spring应用启动,将持久层字典数据加载如缓存,以便提高缓存查询性能
* **缓存同步**
集成缓存组件agile-cache可实现缓存方式切换`spring.cache.type`
,如redis、ehcache、memory等方式,缓存使用请参照缓存组件https://gitee.com/agile-framework/agile-cache
* **复杂翻译**
通过提供工具类cloud.agileframework.dictionary.util.DictionaryUtil,实现诸多复杂字典翻译方式,如字典码与字典值相互转换,根据父子字典信息翻译、全路径字典值/码翻译、字典注解解析
集合数据字典翻译、自定义字典分隔符、指定默认值等等一系列工具
* **字典注解**
用于pojo类属性上添加cloud.agileframework.dictionary.annotation.Dictionary字典注解,通过DictionaryUtil.cover方法或内嵌至持久层组件中,实现无感翻译。
agile-jpa组件中已集成该组件实现无感翻译。
* **自定义字典分隔符**
字典分隔符指针对全路径字典值/码的分级标识符,如`状态`字典有子值`开`与`关`两种类型,则`开`与`关`字典值分别对应`状态/开`
与`状态/关`,其中斜杠`/`就是字典分隔符,该分隔符可在调用翻译工具或字典
翻译注解中指定,且对字典值/码不存在任何特殊符号限制。
* **支持枚举、整数、字符串等类型数据**
字典支持使用经常用于判断得整型、字符串、枚举等类型作为转换源,枚举类型会取枚举项name值作为转换源,可以参照源码中测试用例
* **全路径字典值码翻译**
除当前字典值/码翻译以外,还提供携带所有父级字典值/码以字典分隔符标记的全路径字典翻译,如`状态`字典有子值`开`与`关`
两种类型,则`开`与`关`为当前字典值,全路径字典值则分别对应`状态/开`与`状态/关`
字典码亦是如此
* **级联字典值码翻译**
以“国家”、“城市”、“地区”一类的级联字典为例子,其数据结构中往往同时存在这三个属性,翻译子字典时需要依赖父字典值。在字典注解中提供了该功能的支持,用法如下:
country代表国家、city代表城市、region代表地区。
* **隔离数据源**
支持同时存在多数据源(多套字典)。
```
private String country;
private String city;
private String region;
@Dictionary(fieldName = {"country"})
private String countryValue;
@Dictionary(fieldName = {"country","city"})
private String cityValue;
@Dictionary(fieldName = {"country","city","region"})
private String regionValue;
```
* **正向/反向翻译支持**
注解及工具均支持字典码与字典值之间的互转,默认注解方式的转换方向为字典码转字典值,可通过`directionType`转换方向,如:
```
private String countryName;
@Dictionary(fieldName = "countryName", directionType = DirectionType.NameToCode)
private String countryCode;
```
* **自定义持久化数据方式**
字典的持久化方式默认直接使用内存形式,用户可以通过实现`cloud.agileframework.dictionary.DictionaryDataManager`
,实现自定义的字典数据持久化方式,如使用mysql存储字典数据,字典的数据结构
需符合接口`cloud.agileframework.dictionary.DictionaryDataBase`
规范,当切换mysql时,开发人员只需要将字典表的orm映射继承自该接口,并实现接口方法即可完成mysql切换。
* **组件开关**
内置组件开启,配置:agile.dictionary.enable=true,默认为开启,用户也可使用springboot组件排除方式实现排除加载
-------
## 快速入门
开始你的第一个项目是非常容易的。
#### 步骤 1: 下载包
您可以从[最新稳定版本]下载包(https://github.com/mydeathtrial/agile-dictionary/releases). 该包已上传至maven中央仓库,可在pom中直接声明引用
以版本agile-dictionary-2.1.0.M5.jar为例。
#### 步骤 2: 添加maven依赖
```
//声明中央仓库
cent
https://repo1.maven.org/maven2/
//添加依赖
cloud.agileframework
agile-dictionary
2.1.0.M5
```
#### 步骤 3: 开箱即用
##### 工具部分常用方法汇总:
```
/**
* 转换字典对象
*
* @param fullCode 全路径字典码,如status.yes
* @return bean
*/
public static DictionaryDataBase coverDicBean(String fullCode)
/**
* 转换字典对象
*
* @param fullCode 全路径字典码,如status-yes
* @param splitChar 自定义分隔符,如-
* @return bean
*/
public static DictionaryDataBase coverDicBean(String fullCode, String splitChar)
/**
* 转换字典对象
*
* @param fullName 全路径字典值
* @return bean
*/
public static DictionaryDataBase coverDicBeanByFullName(String fullName)
/**
* 转换字典对象
*
* @param fullName 全路径字典值
* @param splitChar 自定义分隔符
* @return bean
*/
public static DictionaryDataBase coverDicBeanByFullName(String fullName, String splitChar)
/**
* 根据父级树形字典码与子树形name获取字典
*
* @param parentCode 字典
* @param name 子字典值
* @return 字典数据
*/
public static DictionaryDataBase coverDicBeanByParent(String parentCode, String name)
/**
* 编码转字典值
*
* @param fullCodes 全路径字典码,支持包含逗号分隔的多全路径字典码,转换结果为逗号分隔非全路径字典值
* @return 字典值
*/
public static String coverDicName(String fullCodes)
/**
* 编码转字典值
*
* @param fullCodes 全路径字典码,支持包含逗号分隔的多全路径字典码,转换结果为逗号分隔非全路径字典值
* @param defaultName 当未找到对应字典时,默认翻译结果
* @return 字典值
*/
public static String coverDicName(String fullCodes, String defaultName)
/**
* 根据父全路径字典码,与子字典码集,转子字典值集
*
* @param parentCode 父全路径字典码
* @param codes 子字典码集合,逗号分隔
* @return 非全路径子字典值集合,逗号分隔
*/
public static String coverDicNameByParent(String parentCode, String codes)
/**
* 根据父级字典与子字典(多,逗号分隔),转换字典值
*
* @param parentCode 父全路径字典码
* @param codes 子字典码集合,逗号分隔
* @param defaultValue 默认值
* @return 非全路径子字典值集合,逗号分隔
*/
public static String coverDicNameByParent(String parentCode, String codes, String defaultValue)
/**
* 根据父级字典与子字典(多,逗号分隔),转换字典值
*
* @param parentCode 父全路径字典码
* @param codes 子字典码集合,逗号分隔
* @param defaultValue 默认值
* @param isFull 是否全路径模式翻译
* @param splitChar 自定义分隔符
* @return 逗号分隔字典值
*/
public static String coverDicNameByParent(String parentCode, String codes, String defaultValue, boolean isFull, String splitChar)
/**
* 编码转字典值
*
* @param fullCodes 全路径字典码,支持包含逗号分隔的多全路径字典码,转换结果为逗号分隔非全路径字典值
* @param defaultName 未找到字典时默认返回值
* @param isFull true 全路径名,false 字典值
* @param splitChar 自定义分隔符
* @return 字典值
*/
public static String coverDicName(String fullCodes, String defaultName, boolean isFull, String splitChar)
/**
* 编码转字典编码
*
* @param fullNames 全路径字典值,支持包含逗号分隔的多全路径字典值,转换结果为逗号分隔非全路径字典码集合
* @return 字典码
*/
public static String coverDicCode(String fullNames)
/**
* 编码转字典码
* @param defaultCode 未找到字典时默认返回值
* @param fullNames 全路径字典值,支持包含逗号分隔的多全路径字典值,转换结果为逗号分隔非全路径字典码集
* @return 字典码
*/
public static String coverDicCode(String fullNames, String defaultCode)
/**
* 根据父全路径字典值,与子字典值集,转子字典码集
*
* @param parentName 父全路径字典值
* @param names 子字典值集合,逗号分隔
* @return 非全路径子字典码集合,逗号分隔
*/
public static String coverDicCodeByParent(String parentName, String names)
/**
* 根据父级字典值与子字典值(多,逗号分隔),转换字典码
*
* @param parentName 父全路径字典值
* @param names 子字典值集合,逗号分隔
* @param defaultValue 默认值
* @return 非全路径子字典码集合,逗号分隔
*/
public static String coverDicCodeByParent(String parentName, String names, String defaultValue)
/**
* 根据父级字典值与子字典值(多,逗号分隔),转换字典码
*
* @param parentName 父全路径字典值
* @param names 子字典值集合,逗号分隔
* @param defaultValue 默认值
* @param isFull 是否全路径模式翻译
* @return 逗号分隔字典码
*/
public static String coverDicCodeByParent(String parentName, String names, String defaultValue, boolean isFull, String splitChar)
/**
* 编码转字典值
*
* @param fulNames 全路径字典值,支持包含逗号分隔的多全路径字典值,转换结果为逗号分隔非全路径字典码
* @param isFull true 全路径名,false 字典值
* @return 字典码
*/
public static String coverDicCode(String fulNames, String defaultName, boolean isFull, String splitChar)
/**
* 集合类型转换字典码工具,转换为List/Map类型
*
* @param list 要进行转换的集合
* @param dictionaryCode 要使用的字典码
* @param suffix 转换出来的字典值存储的字段后缀
* @param column 转换字段集
* @param 泛型
* @return 返回List/Map类型,增加_text字段
* @throws NoSuchFieldException 没有这个字段
* @throws IllegalAccessException 非法访问
*/
public static List