新用户注册入口 老用户登录入口

[转载]Java Work

文章作者:转载 更新时间:2023-05-26 23:30:52 阅读数量:267
文章标签:判空MybatisJSON动态SQLIDEA插件
本文摘要:本文介绍了Java开发中常见的判空操作,涉及List、Map、对象和数组等类型,并推荐使用Apache Commons Lang库中的工具类进行高效判断。在Mybatis框架及其实现扩展MybatisPlus的使用场景中,演示了如何书写动态SQL以及利用其单表操作优势。此外,文章还提到了JSON处理库Fastjson的解析方法,以及Excel处理工具EasyExcel的特性与API应用。IDEA开发环境中推荐的实用插件如Lombok、MyBatisX等也有所涉及,以提升开发效率。同时强调了集合处理时应正确判空并选择合适的遍历方式,以及在实际项目开发中Vo、Query、Dto数据模型的应用规范。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/qq_40910781/article/details/111416185。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

判空

  • 对于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:数据传输模型

本篇文章为转载内容。原文链接:https://blog.csdn.net/qq_40910781/article/details/111416185。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
CollectionUtils.isEmpty()这是一个来自Apache Commons Lang库中的工具方法,用于判断给定的List或Map集合是否为空。在编程语境下,“空”有两种含义,一是对象引用为null,二是对象实例存在但其大小(如List的size或Map的entry数量)为0。CollectionUtils.isEmpty()方法能够同时处理这两种情况,简化了开发者的代码逻辑,避免了因空指针异常而导致的问题。
EasyExcelEasyExcel是阿里巴巴开源的一个Java处理Excel工具,专注于让Excel数据处理变得简单、快速且占用内存低。通过使用EasyExcel,开发者可以轻松实现Excel文件的读写操作,支持大文件流式读写、自定义样式和模板填充等功能,并提供了丰富的API及回调接口以满足复杂场景下的表格数据处理需求。
MybatisPlusMybatisPlus是在Mybatis的基础上进行扩展的一套持久层框架,它提供了丰富的增强功能,例如单表基本的CRUD操作、分页查询、性能分析插件以及动态表名、自动填充字段等特性。MybatisPlus简化了开发人员对数据库的操作,降低了SQL编写的工作量,尤其在处理简单的单表操作时,极大地提升了开发效率和代码可读性。
JSONJSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在文中提到的Fastjson是一个Java语言编写的高性能功能完备的JSON库,它可以将Java对象转换成JSON字符串,也可以将JSON字符串反序列化成Java对象,广泛应用于Web服务与前后端数据交互、配置文件存储、日志记录等多种场景。
IPageIPage是MybatisPlus中封装的分页对象,用来进行数据分页查询。它包含了当前页码、每页显示条数以及总记录数等信息。在执行SQL查询时,MybatisPlus会根据IPage对象的内容自动拼接SQL分页语句,从而实现了数据的高效分页加载,减轻了数据库压力并优化了应用程序性能。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入探讨Java开发中的判空处理、Mybatis框架的运用以及Excel数据操作等技术要点后,我们发现随着软件工程实践的发展与进步,这些基础技术正不断得到优化和升级。例如,在判空方面,Java 14引入了Optional类的改进,使得开发者能够以更简洁安全的方式处理潜在的空值异常;而在数据库操作层面,Spring Framework近期发布的版本中对Mybatis整合支持进行了增强,简化了配置并提升了性能表现。
针对Excel处理工具EasyExcel,阿里巴巴团队持续对其进行迭代更新,新增了如模板导出、大数据量分块读写等功能,进一步满足企业级应用对数据导入导出高效稳定的需求。此外,随着云原生和微服务架构的普及,JSON作为跨语言的数据交换格式,其解析库如Fastjson也积极跟进,强化安全性的同时提升解析速度。
对于IDEA这类集成开发环境,JetBrains官方及社区开发者们也在不断丰富和完善各种插件的功能,如Lombok插件已兼容至最新Java版本,提供更多便捷的注解生成方式,并且有更多新颖实用的插件(如SonarLint for IntelliJ)帮助开发者遵循编码规范、提高代码质量。
总之,紧跟时代步伐,关注技术动态,通过阅读最新的博客文章、官方文档或参与开发者论坛讨论,能让我们更好地理解和掌握上述技术工具的最新进展,从而在实际项目开发中更加游刃有余。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
cat <(command1) <(command2) > output.txt - 将两个命令的输出合并到一个文件中。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
响应式抖音课程培训学院类企业前端模板下载 01-21 jQuery点击显示隐藏更多文字内容插件 01-15 黑色设计师简历响应式网页模板下载 01-14 [转载]Tomcat启动时卡在“ Deploying web application directory ”很久的解决方法 12-19 Saiku LDAP集成登录失效问题:排查配置错误、身份验证及解决方案实操 12-01 Spring Cloud微服务架构中注册中心的必要性与服务间通信实践:服务发现、API契约与高可用性考量 11-23 MahoutIllegalArgumentException在Apache Mahout中的应用场景:矩阵维度不匹配与向量索引异常解析及参数有效性的API调用实践 10-16 [转载]Docker 相关配置文件路径 09-08 蓝色精品美容整形机构网站模板 08-29 本次刷新还10个文章未展示,点击 更多查看。
Gradle在持续集成中的关键作用:自动化构建、依赖管理与多项目构建实践及CI服务器集成 07-06 化妆品购物商城通用网站模板下载 06-27 响应式建筑装饰设计类企业前端CMS模板下载 04-14 微服务架构下用户认证鉴权:网关层统一处理与服务内部处理的比较及选择考量 04-09 响应式会议活动主题着陆页网站模板 03-24 Tomcat内存泄漏问题在Web应用程序中的解决方案:Servlet上下文管理、全局变量引用与弱引用实践及监控工具应用 03-15 Kafka消费者消费偏移量设置:auto.offset.reset策略与手动控制方法详解 02-10 [转载]JavaScript中的时间与日期、正则表达式和Function类型 01-24 大气简洁手机电子产品展示柜台前端模板 01-22 项目案例展示设计公司企业网站模板 01-18 Bootstrap博客后台管理系统网站模板 01-08
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"