# common-utils **Repository Path**: xcc/common-utils ## Basic Information - **Project Name**: common-utils - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-02-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # common-utils JAVA 开发常用的工具类封装,并不是每一处都合理,欢迎大家来共同优化 项目依赖 lombok,若编译不通过,请检查是否已安装 lombok 插件 底部会对封装的类进行索引说明; 请尊重开源,转载请注明来源: https://gitee.com/xcc/common-utils https://github.com/x403368945/common-utils ### 本地安装步骤 下载源码 ``` git clone https://gitee.com/xcc/common-utils.git git clone https://github.com/x403368945/common-utils.git ``` 编译安装 jar 包到本地仓库 ``` mvn install # 默认会打包源码并跳过测试 # mvn install 等同于 mvn source:jar install -Dmaven.test.skip=true ``` maven 依赖 ``` com.github.x403368945 common-utils 1.0.0 ch.qos.logback logback-classic ``` ### 发布 release 流程 可以通过 jitpack.io 依赖任何开源仓库的 release 版本 ``` # 预发布环境准备,将代码推送到 github , 失败后可重新执行 mvn release:prepare -Dresume=false -X # 回滚预发布环境 mvn release:rollback -X ``` ### jitpack 依赖 github 开源项目配置 项目 pom 文件新增仓库配置,注意本地 maven 仓库如果存在 com/github 目录需要先删除 ``` jitpack.io https://jitpack.io com.github.x403368945 common-utils 1.0.3 ``` ### 常用注解说明 ``` >> 类头部注解 @Table(name = "table_name"):注解映射数据库表名 @Entity:声明数据库映射实体类,将会被Spring JPA扫描 @Document:声明 MongoDB 映射实体类,将会被Spring Mongo扫描 @QueryEntity:声明 QueryDSL 实体类,将会被 QueryDSL 通用查询框架扫描,生成Q{ClassName}.java @DynamicInsert:声明,编译生成 insert 语句时,当字段为 null ,则被忽略 @DynamicUpdate:声明,编译生成 update 语句时,当字段为 null ,则被忽略 // @DynamicUpdate // 这里有坑,当数据库字段有值,希望把数据库字段设置为 null,这种情况需要使用其他解决方案; // 方案1:数据库设计时,数字默认 0,字符串默认 '' ;需要置空时,实体类设置属性为默认的 0 和 ''; // 优点:代码量少逻辑简单; // 缺点:JPA 只支持 ID 字段作为更新条件 // 方案2【推荐】:代码构建需要更新的字段,因为数据库有些字段可能不适合设置默认值 // 优点:更灵活,场景可适配;可以使用 ID 组合其他字段作为更新匹配条件 // 缺点:代码量增加 @NoArgsConstructor:生成无参构造函数 @AllArgsConstructor:生成全参构造函数 @RequiredArgsConstructor(staticName = "of"):生成 final 修饰字段或者是以 @Nonnull 声明字段的静态构造函数,函数名为 of ;前提是类不能有以下注解 @NoArgsConstructor,@AllArgsConstructor @Builder:生成链式类构造器 @Data:生成 get & set & toString & hashCode & equals 方法 @Accessors(chain = {true|false}):声明 @Data & @Setter 注解生成 set 方法时返回 this,便于链式调用; // @Accessors(chain = true) // 这里有坑,使用 QueryDSL 框架的 Projections.bean 时,因为 set 方法都带返回值,所以出现检测不到 set 方法 // 所以不建议在数据库映射的实体类中使用该注解;下面是采坑后的测试代码 // Stream.of(Introspector.getBeanInfo(Item.class).getPropertyDescriptors()).forEach(prop -> System.out.println(String.format("%s :----> %s", prop.getWriteMethod(), prop.getReadMethod()))); @Accessors(fluent = {true|false}):声明 @Data & @Setter & @Getter 注解生成 get & set 方法时不要 get & set 前缀 @JSONType(orders = {"id","name"}):声明实体类属性在 JSON 序列化时的排序;警告:必须声明所有返回字段的顺序,否则此声明不起作用;版本升级后再次测试发现该 bug 有修正,会对 orders 的字段优先,orders 不存在的字段才会乱序 @Slf4j:注解生成 log 属性,可在类中通过 log.{debug|info} 输出日志 >> 方法注解 @Synchronized:给方法加上同步锁 @SneakyThrows:声明自动抛异常,不需要 在方法上加 throw {Exception|NullPointException|IOException} >> 属性注解 @Setter:生成当前属性的 get 方法 @Getter:生成当前属性的 set 方法 @Transient > @org.springframework.data.annotation.Transient:spring-data mongodb 声明 JPA + Mongo 不与数据库建立映射,且 insert 和 update 忽略该属性 @Transient > @javax.persistence.Transient:spring-data jpa hibernate 声明 JPA + Hibernate 不与数据库建立映射,且 insert 和 update 忽略该属性 @Indexed > @org.springframework.data.mongodb.core.index.Indexed:声明 mongodb 数据库生成索引 >> 属性或 get 方法都适用的注解 @JSONField(serialize = {true|false}):声明该属性或 get 方法在 JSON.toJSONString() 时是否被忽略,默认 true;为 false 表示忽略 @JSONField(deserialize = {true|false}):声明该属性或 set 方法在 JSON.parseObject() 时是否被忽略,默认 true;为 false 表示忽略 @JSONField(fromat = "yyyy-MM-dd HH:mm:ss"):声明 JSON.toJSONString() | JSON.parseObject() 时的日期格式 @Column(insertable = {true|false}):声明当 JPA 执行数据库 insert 时是否强制忽略(不论是否有值),默认 true,为 false 则强制忽略 @Column(updatable = {true|false}):声明当 JPA 执行数据库 update 时是否强制忽略(不论是否有值),默认 true,为 false 则强制忽略 @Id > @org.springframework.data.annotation.Id:注解声明 mongodb 实体ID @Id > @javax.persistence.Id:注解声明 jpa hibernate 实体ID @QueryTransient:声明生成 Q{ClassName}.java 时忽略该属性 ``` ### 常用类说明,一般类底部都会有 main 方法测试 com.utils.IJson:接口:实现该接口附加默认的json格式化操作,有默认实现;依赖:https://github.com/alibaba/fastjson com.utils.enums.Charsets:枚举:定义编码类型 com.utils.enums.Colors:枚举:定义颜色 com.utils.enums.ContentType:枚举:定义http请求和响应类型 com.utils.enums.HttpState:枚举:定义http响应状态码 com.utils.enums.Image:枚举:定义图片类型 com.utils.excel.enums.Column:类:定义Excel操作列 com.utils.excel.enums.Formula:类:Excel公式封装 com.utils.excel.CellStyles:类:Excel写入单元格样式 com.utils.excel.CloneStyles:类:指定Excel写入样式来源文件,写入时从该来源克隆样式 com.utils.excel.ExcelReader:类:封装Excel读操作,支持xls和xlsx,xls格式不支持依赖其他文件的样式;依赖:https://github.com/apache/poi com.utils.excel.ExcelRewriter:类:封装Excel边读边写操作,支持xls和xlsx,xls格式不支持依赖其他文件的样式;依赖:https://github.com/apache/poi com.utils.excel.Rownum:类:定义行号行索引封装类,因为普通读写使用索引,公式使用的是行号 com.utils.excel.SSheetWriter:类:带缓冲区限制的Excel表写入,当需要全表刷新公式的表格不能使用该方式写入,否则会抛出异常;最大缓存行依赖于实例化 new SXSSFWorkbook(max) 指定的值;max 默认值为100 com.utils.excel.XSheetWriter:类:不带缓冲区限制的Excel表写入,数据量太大时容易OOM,支持全表刷新公式(带公式的单元格写入时不执行刷新操作则不会计算值) com.utils.util.Base64:类:Base64编码解码 com.utils.util.CodeImage:类:验证码生成 com.utils.util.Dates:类:日期操作 com.utils.util.Dates#Range:类:日期区间操作 com.utils.util.FCopy:类:文件复制 com.utils.util.FPath:类:文件路径构造及基本操作 com.utils.util.FWrite:类:文件写操作 com.utils.util.FZip:类:文件及文件夹压缩操作 com.utils.util.HtmlPdfWriter:类:将html页面写入pdf;依赖:https://github.com/itext/itextpdf com.utils.util.JSEngine:类:挂起JS引擎,执行JS代码 com.utils.util.Maps:类:链式构建Map com.utils.util.Num:类:数字操作 com.utils.util.Range:类:数字区间操作 com.utils.util.RangeInt:类:int数字区间操作 com.utils.util.RangeLong:类:long数字区间操作 com.utils.util.QRCode:类:二维码生成;依赖:https://github.com/zxing/zxing com.utils.util.Util:类:常用基础方法封装