# kinyx-framework
**Repository Path**: Kinyx/kinyx-framework
## Basic Information
- **Project Name**: kinyx-framework
- **Description**: No description available
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-04-25
- **Last Updated**: 2022-05-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# kinyx-framework
## 介绍
### 1、目标
+ 尽可能让业务开发使用更少的代码完成更多的功能
+ 尽可能消除业务开发中的重复代码
+ 尽可能让业务开发避免低级bug
### 2、功能
+ 基础工具类
+ 基础定义
+ 插件式开发的日志
+ 统一的异常处理
+ 统一的校验注解实现(javax.validation:validation-api)
+ 统一的国际化处理
+ 统一的API输入输出参数定义
## 软件架构
|框架项目|三方依赖|描述|
|----|----|----|
|kinyx-framework|org.projectlombok:lombok|MAVEN项目的parent项目|
|[kinyx-framework-lang](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-lang)|javax.validation:validation-api|主要约定功能定义与实现、不依赖其它三方的工具类|
|[kinyx-framework-log-log4j2](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-log-log4j2)|org.apache.logging.log4j:log4j-core|插件扩展实现(log4j2)|
|[kinyx-framework-data-jackson](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-data-jackson)|com.fasterxml.jackson.dataformat:jackson-dataformat|JSON、XML相关工具类|
|[kinyx-framework-jexl](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-jexl)|org.apache.commons:commons-jexl3|执行表示代码的字符串,从而可以通过配置字符串代码的方式实现一些功能,如随机值配置等。|
|[kinyx-framework-crawler](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-crawler)|org.jsoup:jsoup|爬虫相关工具类|
|[kinyx-framework-db](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-db)|javax.persistence:javax.persistence-api|数据库相关|
## 使用说明
+ 1、pom.xml中配置parent,使用框架定义的pom。
```xml
com.kinyx.projects
kinyx-project
1.0.0.RELEASE
../pom.xml
```
+ 2、pom.xml中配置build,使用打包插件。
```xml
org.apache.maven.plugins
maven-shade-plugin
```
+ 3、创建com.kinyx.KMain.java代码,并声明主函数。
```java
package com.kinyx;
public class KMain {
public static void main(final String[] args) {
}
}
```
+ 4、在主函数中做自定义实现。
+ 5、将项目打包,mvn install
+ 6、启动项目,java -jar target/xxx.jar
## 框架实现
### 1、工具类
|package|命名规则|
|----|----|
|按照功能类型归纳|以K开头,以Utils结尾或名词性结尾。|
#### 1.1、常用类型辅助工具类
+ [com.kinyx.framework.utils.KArrayUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KArrayUtils.java) 数组工具类
+ [com.kinyx.framework.utils.KCalendarUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KCalendarUtils.java) 日历工具类
+ [com.kinyx.framework.utils.KCharUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KCharUtils.java) 字符工具类
+ [com.kinyx.framework.utils.KDateTimeUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KDateTimeUtils.java) 日期时间工具类
+ [com.kinyx.framework.utils.KEnumUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KEnumUtils.java) 枚举工具类
+ [com.kinyx.framework.utils.KListUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KListUtils.java) 列表工具类
+ [com.kinyx.framework.utils.KMapUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KMapUtils.java) 集合工具类
+ [com.kinyx.framework.utils.KMatcherUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KMatcherUtils.java) 匹配工具类
+ [com.kinyx.framework.utils.KNumberUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KNumberUtils.java) 数字工具类
+ [com.kinyx.framework.utils.KStringUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KStringUtils.java) 字符串工具类
#### 1.2、反射相关工具类
+ [com.kinyx.framework.reflect.KAnnotationUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KAnnotationUtils.java) 注解工具类
+ [com.kinyx.framework.reflect.KBeanUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KBeanUtils.java) JavaBean工具类
+ [com.kinyx.framework.reflect.KClassScanner](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KClassScanner.java) 类扫描工具类
+ [com.kinyx.framework.reflect.KClassUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KClassUtils.java) 类工具类
+ [com.kinyx.framework.reflect.KFieldUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KFieldUtils.java) 字段工具类
+ [com.kinyx.framework.reflect.KTypeConverter](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KTypeConverter.java) 类型转换工具类
#### 1.3、文件处理工具类
+ [com.kinyx.framework.file.KFileReader](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KFileReader.java) 文件读取工具类
+ [com.kinyx.framework.file.KFileUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KFileUtils.java) 文件工具类
+ [com.kinyx.framework.file.KFileWriter](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KFileWriter.java) 文件写入工具类
+ [com.kinyx.framework.file.KI18NUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KI18NUtils.java) 国际化工具类
+ [com.kinyx.framework.file.KPathUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KPathUtils.java) 路径工具类
+ [com.kinyx.framework.file.KPropertiesReader](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KPropertiesReader.java) 属性文件读取工具类
+ [com.kinyx.framework.file.KReader](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KReader.java) 读取工具类
#### 1.5、加密解密工具类
+ [com.kinyx.framework.security.KBASE64](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KBASE64.java) BASE64编码/解码工具类
+ [com.kinyx.framework.security.KMD5](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KMD5.java) MD5加密工具类
+ [com.kinyx.framework.security.KOTP](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KOTP.java) OTP编码工具类
+ [com.kinyx.framework.security.KRSA](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KRSA.java) RSA编码工具类
#### 1.5、图像处理工具类
+ [com.kinyx.framework.image.KImageCropper](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/image/KImageCropper.java) 图片修剪工具类
+ [com.kinyx.framework.image.KImageDrawer](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/image/KImageDrawer.java) 图片绘画工具类
+ [com.kinyx.framework.image.KImageUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/image/KImageUtils.java) 图片工具类
#### 1.6、树形结构相关工具类
+ [com.kinyx.framework.tree.KCodeUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/tree/KCodeUtils.java) 编码工具类
+ [com.kinyx.framework.tree.KTreeUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/tree/KTreeUtils.java) 树形结构工具类
#### 1.7、其它业务型工具类
+ [com.kinyx.framework.business.KAreaUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KAreaUtils.java) 区域工具类
+ [com.kinyx.framework.business.KHexUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KHexUtils.java) 十六进制工具类
+ [com.kinyx.framework.business.KHTMLUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KHTMLUtils.java) HTML工具类
+ [com.kinyx.framework.business.KRandomUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KRandomUtils.java) 随机工具类
+ [com.kinyx.framework.business.KURLConnection](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KURLConnection.java) 连接工具类
#### 1.8、其它业务型工具类(扩展实现包)
+ [kinyx-framework-data-jackson](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-data-jackson)
+ [com.kinyx.framework.data.KJsonUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils.java) JSON工具类
+ [com.kinyx.framework.data.KXmlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils.java) XML工具类
+ [com.kinyx.framework.data.KJsonUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils4Jackson.java) JSON工具类
+ [com.kinyx.framework.data.KXmlUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils4Jackson.java) XML工具类
+ [kinyx-framework-jexl](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-jexl)
+ [com.kinyx.framework.jexl.KJexlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KJexlUtils.java) Jexl工具类
+ [com.kinyx.framework.jexl.KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java) 随机工具类
+ [kinyx-framework-crawler](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-crawler)
+ [com.kinyx.framework.crawler.KCrawler](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KCrawler.java) 抓取工具类
+ [com.kinyx.framework.crawler.KSoupUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KSoupUtils.java) HTML工具类
+ [kinyx-framework-db](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-db)
+ [com.kinyx.framework.db.daos.JDBCTool](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-db/src/main/java/com/kinyx/framework/db/daos/JDBCTool.java) JDBC工具类
### 2、对象类
#### 2.1、Java增强实现对象
|package|命名规则|实现逻辑|
|----|----|----|
|归入javax同名包|以X开头同名类|继承自Java原对象,不修改Java原对象的任何方法,只增加方法。|
+ [javax.util.XArrayList](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/javax/util/XArrayList.java) 扩展实现ArrayList
+ [javax.util.XHashMap](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/javax/util/XHashMap.java) 扩展实现HashMap
#### 2.2、Java重写实现对象
|package|命名规则|实现逻辑|
|----|----|----|
|归入javax同名包|以Y开头同名类|内部持有Java原对象,对外提供Java原对象提供的方法,并进行特定的实现。|
+ [javax.math.YBigDecimal](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/javax/math/YBigDecimal.java) 数字对象
#### 2.3、自定义对象
|package|命名规则|
|----|----|
|com.kinyx.framework.bean|正常命名|
+ [com.kinyx.framework.bean.DKHashMap](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/DKHashMap.java) 双键集合
+ [com.kinyx.framework.bean.GetArgs](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/GetArgs.java) GET请求参数
+ [com.kinyx.framework.bean.KeyValues](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/KeyValues.java) 键值对
+ [com.kinyx.framework.bean.KImageInfo](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/KImageInfo.java) 图片对象
+ [com.kinyx.framework.bean.MainArgs](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/MainArgs.java) 主参数处理器
+ [com.kinyx.framework.bean.PackageScaner](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/PackageScaner.java) 包扫描工具
+ [com.kinyx.framework.bean.StringFormatter](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/StringFormatter.java) 字符串格式化对象
+ [com.kinyx.framework.bean.TreeNode](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/TreeNode.java) 树节点对象
### 3、日志
框架对日志进行了基础定义以及实现,采用插件式开发方式,即对业务代码提供一致的用法,插入哪个实现插件,则将使用该插件的实现对日志进行处理。
#### 3.1、扩展实现逻辑
+ 1、提供[com.kinyx.framework.log.Log](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/Log.java)的实现类
+ 2、提供[com.kinyx.framework.log.LogFactory](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/LogFactory.java)的实现类
+ 3、提供配置文件[configs-log-impl.properties](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/resources/configs-log-impl.properties),并配置log.LogFactory=com.kinyx.framework.log.LogFactory的实现类。
#### 3.2、默认插件实现(控制台输出),在kinyx-framework-lang项目中。
+ [com.kinyx.framework.log.Log4Console](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/Log4Console.java)
+ [com.kinyx.framework.log.LogFactory4Console](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/LogFactory4Console.java)
#### 3.3、插件扩展实现(log4j2),在kinyx-framework-log-log4j2项目中,如需使用该插件,只需在MAVEN项目中配置依赖即可。
+ [com.kinyx.framework.log.Log4log4j2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-log-log4j2/src/main/java/com/kinyx/framework/log/Log4log4j2.java)
+ [com.kinyx.framework.log.LogFactory4Log4j2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-log-log4j2/src/main/java/com/kinyx/framework/log/LogFactory4Log4j2.java)
```xml
com.kinyx.framework
kinyx-framework-log-log4j2
```
#### 3.4、业务代码使用
```java
import com.kinyx.framework.log.Log;
import com.kinyx.framework.log.Logger;
Log logger = Logger.getLog(KMain.class);
if(logger.isTraceEnabled()){
logger.trace(Object message);
logger.trace(Object message, Throwable t);
}
if(logger.isDebugEnabled()){
logger.debug(Object message);
logger.debug(Object message, Throwable t);
}
if(logger.isInfoEnabled()){
logger.info(Object message);
logger.info(Object message, Throwable t);
}
if(logger.isWarnEnabled()){
logger.warn(Object message);
logger.warn(Object message, Throwable t);
}
if(logger.isErrorEnabled()){
logger.error(Object message);
logger.error(Object message, Throwable t);
}
if(logger.isFatalEnabled()){
logger.fatal(Object message);
logger.fatal(Object message, Throwable t);
}
```
### 4、异常
框架内部实现将捕获所有已声明的异常,并进行处理,如需业务处理,则将抛出[com.kinyx.framework.KRuntimeException](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/exception/KRuntimeException.java)(指定错误编码)。
### 5、校验注解
框架依赖javax.validation:validation-api进行了扩展实现。
#### 5.1、可配置校验注解
采用正则表达式匹配校验逻辑。如默认的正则表达式不能满足业务需求,无需修改源代码,只需创建配置文件configs-constraints.properties,在配置文件中配置对应的正则表达式即可。
+ [com.kinyx.framework.constraints.AppKey](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/AppKey.java)
+ [com.kinyx.framework.constraints.BASE64](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/BASE64.java)
+ [com.kinyx.framework.constraints.Cellphone](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Cellphone.java)
+ [com.kinyx.framework.constraints.Chinese](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Chinese.java)
+ [com.kinyx.framework.constraints.Email](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Email.java)
+ [com.kinyx.framework.constraints.ID](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/ID.java)
+ [com.kinyx.framework.constraints.IDCard](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/IDCard.java)
+ [com.kinyx.framework.constraints.Locale](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Locale.java)
+ [com.kinyx.framework.constraints.LoginName](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/LoginName.java)
+ [com.kinyx.framework.constraints.MD5](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/MD5.java)
+ [com.kinyx.framework.constraints.SecurityCode](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/SecurityCode.java)
+ [com.kinyx.framework.constraints.SendID](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/SendID.java)
+ [com.kinyx.framework.constraints.Text](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Text.java)
+ [com.kinyx.framework.constraints.Token](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Token.java)
+ [com.kinyx.framework.constraints.URL](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/URL.java)
+ [com.kinyx.framework.constraints.UUID](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/UUID.java)
+ [com.kinyx.framework.constraints.WindowsPath](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/WindowsPath.java)
#### 5.2、枚举类校验注解
使用枚举定义的参数,只能输入枚举对应的值,因而该类注解不可进行自定义配置。
+ [com.kinyx.framework.constraints.ClientType](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/ClientType.java)
+ [com.kinyx.framework.constraints.UsingStatus](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/UsingStatus.java)
#### 5.3、自定义校验注解
该注解提供regex参数进行自定义配置,只需在使用时,自定义配置即可。
+ [com.kinyx.framework.constraints.Validator](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Validator.java)
### 6、国际化
#### 6.1、工具类([KI18NUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KI18NUtils.java))
##### 6.1.1、使用
```java
import java.util.Locale;
import java.util.Properties;
import com.kinyx.framework.file.KI18NUtils;
import com.kinyx.framework.file.KPropertiesReader;
Locale locale = Locale.SIMPLIFIED_CHINESE;
String category = "UsingStatus";
String key = "USING";
String defaultValue = null;
Properties properties = KI18NUtils.getProperties(locale, category);
String value = KPropertiesReader.getStringValue(properties, key, defaultValue);
```
##### 6.1.2、实现逻辑伪代码
```java
读取配置文件[/i18n/{locale}/{category}.properties]
if (读取成功) {返回读取结果}
// 读取失败,尝试读取类似配置。
if (locale.equals(Locale.CHINESE)) {// 中文,尝试读取简体中文对应的配置文件。
读取配置文件[/i18n/zh_CN/{category}.properties]
if (读取成功) {返回读取结果}
读取失败返回null
} else {// 其它,尝试读取语言对应的配置文件。
读取配置文件[/i18n/locale.getLanguage()/{category}.properties]
if (读取成功) {返回读取结果}
读取失败返回null
}
```
##### 6.1.3、示例
###### 目录结构
+ resources
+ i18n
+ zh
+ A.properties
+ B.properties
+ zh_CN
+ A.properties
+ C.properties
+ fr
+ A.properties
+ B.properties
+ fr_CA
+ A.properties
+ C.properties
###### 6.1.3.1、category == A
+ KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "A");
+ 读取配置文件【/i18n/zh_CN/A.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.CHINESE, "A");
+ 读取配置文件【/i18n/zh/A.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.CANADA_FRENCH, "A");
+ 读取配置文件【/i18n/fr_CA/A.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.FRENCH, "A");
+ 读取配置文件【/i18n/fr/A.properties】成功
+ 返回读取结果
###### 6.1.3.2、category == B
+ KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "B");
+ 读取配置文件【/i18n/zh_CN/B.properties】失败
+ 读取配置文件【/i18n/zh/B.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.CHINESE, "B");
+ 读取配置文件【/i18n/zh/B.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.CANADA_FRENCH, "B");
+ 读取配置文件【/i18n/fr_CA/B.properties】失败
+ 读取配置文件【/i18n/fr/B.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.FRENCH, "B");
+ 读取配置文件【/i18n/fr/B.properties】成功
+ 返回读取结果
###### 6.1.3.3、category == C
+ KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "C");
+ 读取配置文件【/i18n/zh_CN/C.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.CHINESE, "C");
+ 读取配置文件【/i18n/zh/C.properties】失败
+ 读取配置文件【/i18n/zh_CN/C.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.CANADA_FRENCH, "C");
+ 读取配置文件【/i18n/fr_CA/C.properties】成功
+ 返回读取结果
+ KI18NUtils.getProperties(Locale.FRENCH, "C");
+ 读取配置文件【/i18n/fr/C.properties】失败
+ 返回null
###### 6.1.3.4、category == D
+ KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "D");
+ 读取配置文件【/i18n/zh_CN/D.properties】失败
+ 读取配置文件【/i18n/zh/D.properties】失败
+ 返回null
+ KI18NUtils.getProperties(Locale.CHINESE, "D");
+ 读取配置文件【/i18n/zh/D.properties】失败
+ 读取配置文件【/i18n/zh_CN/D.properties】失败
+ 返回null
+ KI18NUtils.getProperties(Locale.CANADA_FRENCH, "D");
+ 读取配置文件【/i18n/fr_CA/D.properties】失败
+ 读取配置文件【/i18n/fr/D.properties】失败
+ 返回null
+ KI18NUtils.getProperties(Locale.FRENCH, "D");
+ 读取配置文件【/i18n/fr/D.properties】失败
+ 返回null
#### 6.2、枚举定义([I18NEnum](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/enums/I18NEnum.java))&简体中文定义([IEnum_zh_CN](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/enums/IEnum_zh_CN.java))
##### 6.2.1、说明
在国内业务开发中,通常情况下,默认的国际化都是简体中文。
通过实现中文接口的方式,可直接将国际化的信息进行配置。
其它国际化情况下,再通过配置文件实现。
这样即简化了开发流程(不需要单独配置简体中文的配置文件),又同时支持国际化实现。
且最常用的简体中文可直接取值,无需读取配置文件,效率上也将显著提高。
##### 6.2.2、使用&示例
详见[单元测试代码](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/test/java/com/kinyx/framework/enums/I18NEnum_Tester.java)
### 7、统一的API输入输出参数定义
#### 7.1、输入参数[InData\](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/InData.java) 将API定义的参数(userDatas)外包装一层,以实现统一约定的参数(sysDatas、pageDatas)传输。
+ [SysData](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/SysData.java) sysDatas 框架约定数据。API必须出入的数据,用于确定请求端的相关信息。
+ String sendId 唯一标识,由发送方设定值。
+ String receiveId 唯一标识,由接收方设定值。
+ Date sendTime 发送时间,由发送方设定值。
+ Date receiveTime 接收时间,由接收方设定值。
+ String appKey 客户端唯一标识
+ String clientType 客户端类型
+ Byte versionX 客户端版本号(大版本号)
+ Byte versionY 客户端版本号(中版本号)
+ Short versionZ 客户端版本号(小版本号)
+ String token 令牌
+ [InPageData](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/InPageData.java) pageDatas 分页信息数据。查询分页数据API或列表数据API时使用。
+ int pageNumber 页面编号(从0开始)(仅分页查询时使用)
+ int pageSize 页面大小(小于0时,列表查询时表示不限制;分页查询时将修改为默认页面大小;)
+ D userDatas 用户信息数据。API定义的参数。
#### 7.2、输出参数[OutData\](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/OutData.java) 将API定义的结果数据(datas)外包装一层,以实现统一约定的参数(errorCode、errorMessage)传输。
+ int errorCode 错误编码。全局唯一编码。0:成功;负数:框架内部定义错误;10000-:框架实现层定义错误;10000+:业务自定义错误;
+ String errorMessage 错误信息。框架根据错误编码将会进行国际化处理。
+ D datas 数据。API定义的结果数据。
### 8、扩展实现
#### 8.1、[kinyx-framework-data-jackson](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-data-jackson)
提供统一功能的工具类
+ [com.kinyx.framework.data.KJsonUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils.java) JSON工具类
+ [com.kinyx.framework.data.KXmlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils.java) XML工具类
提供特殊功能的工具类
+ [com.kinyx.framework.data.KJsonUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils4Jackson.java) JSON工具类
+ [com.kinyx.framework.data.KXmlUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils4Jackson.java) XML工具类
提供配置文件[configs-jackson.properties](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/resources/configs-jackson.properties),并配置ObjectMapperFactory=[com.kinyx.framework.data.ObjectMapperFactory](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/ObjectMapperFactory.java)的实现类。
#### 8.2、[kinyx-framework-jexl](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-jexl)
提供特殊功能的工具类
+ [com.kinyx.framework.jexl.KJexlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KJexlUtils.java) Jexl工具类
+ [com.kinyx.framework.jexl.KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java) 随机工具类
+ 创建随机对象时,首先读取字段上是否配置有随机表达式注解([com.kinyx.framework.annotation.RandomExpression](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/annotation/RandomExpression.java)),如果有配置注解,则读取注解值,如果没有配置注解,则取该类型默认的随机表达式值(已经实现了基本类型及其封装类型、字符串类型)。
+ 如希望补充某类型的默认随机表达式,可使用[KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java).addDefaultExpression(Class>, String)方法添加默认随机表达式。
+ 如随机表达式中需要使用更多的参数对象,需使用[KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java).addMappingParam(String, Object)方法添加映射参数。
#### 8.3、[kinyx-framework-crawler](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-crawler)
提供特殊功能的工具类
+ [com.kinyx.framework.crawler.KCrawler](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KCrawler.java) 抓取工具类
+ [com.kinyx.framework.crawler.KSoupUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KSoupUtils.java) HTML工具类
#### 8.4、[kinyx-framework-db](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-db)
+ JDBC功能实现
+ JPA功能实现(尽可能兼容H实现)
+ 无限制多数据库实现
+ 无限制数据库方言实现
+ Java代码方式书写SQL语句