判空
对于list和map使用CollectionUtils.isEmpty()判空(null和size=0) 对于对象使用ObjectUtils.isEmpty()判定,可以尝试使用Optional.ofNullable() 对于数组使用ArrayUtils.isEmpty()判空(null和length=0) 对于字符串使用 StringUtils.isBlank()判空(null和空字符串)
工具类
使用hutool 可以方便的进行文件类型的判断 、唯一id(uuid,Snowflake)的生成 、数据加密解密 、二维码生成 、图片加水印 、BASE64编码解码 、图片验证码 等操作
集合
使用Arrays.asList()返回的list为数组的内部list,只允许遍历不允许增删,可以使用Stream流转换为list Collection和map对于仅遍历可以使用增强for循环和,但如果有删除为避免错误必须使用迭代器 foreach遍历不允许改变变量的地址,java的参数是值传递,修改了形参的地址并不影响原来的参数,故即使你修改了值也不会同步到原变量中,故操作的变量都显式或者隐式的定义为final
JSON
fastjson
parseArray(String text, Class<T> clazz)
解析ListparseObject(String text, Class<T> clazz)
解析Object
## JSON对于null、空白字符串、“null”会返回null
if ( text == null) {
return null;
} else {
DefaultJSONParser parser = new DefaultJSONParser ( text, ParserConfig. getGlobalInstance ( ) ) ;
JSONLexer lexer = parser. lexer;
int token = lexer. token ( ) ;
ArrayList list;
if ( token == 8 ) {
lexer. nextToken ( ) ;
list = null;
}
}
String toJSONString(Object object)
将对象转为StringtoJSONBytes(Object object, SerializerFeature... features)
将对象转为byte[]@JSONField()
可以忽略字段serialize ,别名映射name,日期格式化format等
jackson
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
设置Date到前台的格式@JsonIgnore
SpringMVC不会向前台传递该字段
ObjectMapper mapper = new ObjectMapper ( ) ;
String str = mapper. writeValueAsString ( admin) ;
mapper. readValue ( s, Admin. class ) ;
EasyExcel
官方API https://www.yuque.com/easyexcel/doc
使用类注解@ExcelIgnoreUnannotated
配合@ExcelProperty
操作 @ExcelProperty
可以指定表头列名,列顺序和表头的合并@ColumnWidth(10)
可以指定列宽,其长度约为(中文length*3+英文length*1)@DateTimeFormat(value="yyyy-MM-dd HH:mm:ss")
可以指定日期格式自定义策略实现SheetWriteHandler工作表回调接口,在afterSheetCreate()工作表创建之后方法可以
自定义策略实现RowWriteHandler行回调接口,在afterRowDispose()行操作完之后方法可以
自定义策略实现CustomerCellHandler单元格回调接口,在afterCellDispose()单元格操作完之后方法可以
根据行号,列宽甚至是单元格的值来设置单元格样式 可以对单元格的值获取和修改 样式通常包括内容格式、批注、背景色、自动换行、平和垂直居中、边框大小和颜色、字体实例(格式,颜色,大小,加粗等)等 自定义策略继承AbstractMergeStrategy单元格合并抽象类,在merge()方法中可以通过CellRangeAddress合并单元格 过于复杂的表格可以使用模板,配合写出write和填充fill一起使用
Mybatis
在mapper方法的@select中也是可以直接书写动态SQL的,但要使用<script></script>包裹,这样就不用在java文件和xml文件切换了,将@select中包裹的代码直接放到浏览器的控制台输出后会自动转义\n,\t,+,"等 动态sql中“<” 和 “>” 号要用转义字符 “<” 和 ”>“ (分号要带) 动态sql中test中表达式通常使用 test=“id != null and id != ‘’”,要注意的是字符串不能直接识别单引号,有两种方法使用id==“1001"或者id==‘1001’.toString(),另外参数如果是boolean,可以直接使用test=”!flag",如果判定集合的话可以使用 test=“list != null and list.size>0” 返回数据类型为Map只能接收一条记录,字段为键名,字段值为值,但通常是用实体类接收,或是使用注解@MapKey来进行每条记录的映射,效果等同于List用Stream流转Map foreach遍历list collection=“list” item=“vo” separator="," open="(" close=")"> #{vo.id} foreach遍历map
collection=“map” index=“key” item=“value”,#{key}获取建,#{value}获取值,$亦可 collection=“map.entrySet()” index=“key” item=“value”,同上 collection=“map.keys” item=“key”,#{key}为键 不要使用where 1=1,使用动态where拼接,会自动剔除where后多余的and和or 单个参数时无论基本和引用并且未使用在动态SQL可以不加参数注解@Param,但一旦参数大于一个或者参数在动态SQL中使用就必须加@Param #并不是直接把参数加引号,而是变成?的形式交给prepareStatement处理,$直接使用值,当ORDER BY诸如此类不需要加引号的参数时,使用$代替#,但为避免sql注入,该参数不能交由用户控制
Plus
官方API https://baomidou.com/guide/
@TableName
表名@TableField(strategy = FieldStrategy.IGNORED)
更新不会忽略NULL值@TableField(exist = false)
表明该字段非数据字段,否则新增更新会报错MybatisPlus对于单表的操作还是非常优秀的,在对单表进行新增或者更新的时候经常使用,但对于单表的查询业务上很少出现仅仅查询一张表的情况,但也会有,如果条件不大于3个还是可以使用的,多了倒没有直接写SQL来的方便了 MybatisPlus的批量插入也是通过for循环插入的,还是建议使用Mybatis的动态foreach进行批量插入 MybatisPlus的分页器会对方法中的参数判断,如果存在分页对象就先查询总数看是否大于0,然后拼接当前的数据库limit语句,所以如果我们分页对象为null,就可以实现不分页查询
Object paramObj = boundSql. getParameterObject ( ) ;
IPage page = null;
if ( paramObj instanceof IPage ) { ……
public static String getOriginalCountSql ( String originalSql) {
return String. format ( "SELECT COUNT(1) FROM ( %s ) TOTAL" , originalSql) ;
} ……
originalSql = DialectFactory. buildPaginationSql ( page, buildSql, dbType, this . dialectClazz) ; ……
public String buildPaginationSql ( String originalSql, long offset, long limit) {
StringBuilder sql = new StringBuilder ( originalSql) ;
sql. append ( " LIMIT " ) . append ( offset) . append ( "," ) . append ( limit) ;
return sql. toString ( ) ;
}
IDEA
插件
Lombok : 快速生成getter、setter等 Alibaba Java Coding Guidelines :阿里规约扫描 Rainbow Brackets :彩色括号 HighlightBracketPair :高亮提示 MyBatisX :mabatisPlus提供的xml和mapper转换的插件,小鸟图标 CamelCase :大小写、驼峰、下划线、中划线转换插件
使用shift+Alt+u 进行转换(很方便) 可以在Editor中设置CamelCase的转换,一般只保留下划线 和驼峰 两种 String Manipulation :字符串工具(未使用) RestfulToolkit http :Restful请求工具
打开idea,在右侧边栏会有一个标签(RestServices),打开可以看到里面是url路径 ctrl+\或者ctrl+alt+n会检索路径 Ctrl + Enter格式化json 没有记忆功能,也不能加token,只是查找请求路径使用 easycode :代码生成工具(个人觉得很好用,常用于生成实体类)
支持自定义模板 支持添加自定义列,不影响数据库 支持多表同时生成 支持自定义类型映射 支持配置导入导出 支持动态调试 支持自定义属性 Power Mode 11 :打字特效(纯属装逼) Nyan Progress Bar :漂亮的进度条(纯属装逼)
Other
***Vo:数据持久化模型 ***Query:数据查询模型 ***Dto:数据传输模型