Java Work

判空

  • 对于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) 解析List
  • parseObject(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(); // nextToken() => ...if ("null".equalsIgnoreCase(ident))   this.token = 8;
        list = null;
    } 
}
  • String toJSONString(Object object) 将对象转为String
  • toJSONBytes(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); // 对象转JSON字符串
mapper.readValue(s,Admin.class );  // JSON字符串转对象

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中“<” 和 “>” 号要用转义字符 “&lt;” 和 ”&gt;“ (分号要带)
  • 动态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
    1. collection=“map” index=“key” item=“value”,#{key}获取建,#{value}获取值,$亦可
    2. collection=“map.entrySet()” index=“key” item=“value”,同上
    3. 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

插件
  1. Lombok : 快速生成getter、setter等
  2. Alibaba Java Coding Guidelines :阿里规约扫描
  3. Rainbow Brackets :彩色括号
  4. HighlightBracketPair :高亮提示
  5. MyBatisX :mabatisPlus提供的xml和mapper转换的插件,小鸟图标
  6. CamelCase :大小写、驼峰、下划线、中划线转换插件
    • 使用shift+Alt+u进行转换(很方便)
    • 可以在Editor中设置CamelCase的转换,一般只保留下划线驼峰两种
  7. String Manipulation :字符串工具(未使用)
  8. RestfulToolkit http :Restful请求工具
    • 打开idea,在右侧边栏会有一个标签(RestServices),打开可以看到里面是url路径
    • ctrl+\或者ctrl+alt+n会检索路径
    • Ctrl + Enter格式化json
    • 没有记忆功能,也不能加token,只是查找请求路径使用
  9. easycode :代码生成工具(个人觉得很好用,常用于生成实体类)
    • 支持自定义模板
    • 支持添加自定义列,不影响数据库
    • 支持多表同时生成
    • 支持自定义类型映射
    • 支持配置导入导出
    • 支持动态调试
    • 支持自定义属性
  10. Power Mode 11 :打字特效(纯属装逼)
  11. Nyan Progress Bar :漂亮的进度条(纯属装逼)

Other

  • ***Vo:数据持久化模型
  • ***Query:数据查询模型
  • ***Dto:数据传输模型
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息技术王凤龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值