符串和集合是否为空的方法

简介: 本文介绍了编程中判断字符串和集合是否为空的方法,强调在判断集合时应先检查是否初始化,避免空指针异常(NPE)。同时讲解了逻辑或(||)的执行规则,以及 AOP 中环绕通知与其他通知的区别,最后介绍了各层返回结果的规范及三层架构的协作原则。

判断是否为空

判断字符串 :要判断是否为和是否为 string a   a==null and a=''

判断集合:dataList == null || dataList.isEmpty() 不能写反,,要先判断是否初始化,在判断是否为空

List未初始化(list = null),直接调用list.isEmpty()会抛出NullPointerException(NPE)。

List已初始化为空集合(list = new ArrayList<>()),list != nulltrue,但list.isEmpty()true

正确方式:先判断null,再判断isEmpty()
if (dataList == null || dataList.isEmpty())
  • 逻辑或(||)的执行规则:当第一个条件为true时,第二个条件不会被执行。
  • 具体执行流程
  1. 先判断dataList == null
  2. 如果dataList确实为null,第一个条件成立,整个表达式结果为truedataList.isEmpty()不会被执行,因此不会触发 NPE。
  3. 只有当dataList != null时,才会执行dataList.isEmpty()。此时dataList已被确认非空,调用isEmpty()是安全的。

dto.getProjectPlans() != null && !dto.getProjectPlans().isEmpty()){  //空集合无法避免为空,保证的是,已初始化且不为null,无法避免sql插入空值,仍然要在sql中进行大于0的判断

数据返回的结果是两列的数据,就是map的list集合(list<map>)  如果要求返或,两列的集合

一:可以定义

过滤器(先于拦截器)java实现

拦截器 springmvc实现的

在 AOP(面向切面编程)中,环绕通知(Around Advice) 需要显式调用 joinPoint.proceed() 来执行目标方法,而前置通知(Before)、后置通知(After)和返回通知(AfterReturning)不需要,这是由它们的执行时机和职责决定的

  • 环绕通知需要显式调用 proceed(),因为它负责完全控制目标方法的执行。
  • 其他通知不需要调用目标方法,因为它们的执行时机是在目标方法执行前、执行后或返回后,Spring 框架会自动处理目标方法的调用。
  • 选择合适的通知类型:根据需要增强的逻辑位置,选择对应的通知类型(如仅前置处理用 @Before,完全控制用 @Around)。

环绕通知(Around)的拦截逻辑

  • 若某环绕通知捕获异常并吞掉(不重新抛出)
    异常终止传播,后续切面的环绕通知不会执行,但@After通知仍会触发。
  • 若某环绕通知捕获异常后重新抛出
    异常继续传播,后续切面的环绕通知可能被触发(取决于异常类型是否匹配)。

2. 异常后通知(AfterThrowing)的作用

  • @AfterThrowing仅用于处理已抛出的异常无法阻止异常传播
    即使在@AfterThrowing中捕获异常,原始异常仍会继续向上传播。

around 如果针对异常未进行抛出,那么最终会导致,异常未抛出(会抑制异常的传播),Afterthrowing不会阻止异常的抛出


各层返回结果规范

  1. Mapper 层:这一层要返回精准的数据结构。
  • 当返回单条记录时,可使用实体类进行封装。
  • 若返回多条记录,则采用List<实体类>的形式。
  • 只有在结果列不固定的情况下,才考虑使用List<Map>
  1. Service 层:该层要返回业务对象或者状态。
  • 对于单个业务对象,直接返回。
  • 多个业务对象,就返回List<业务对象>
  • 涉及增删改操作时,返回布尔值或者自定义的Result对象。
  1. Controller 层:此层要返回统一的 API 响应。
  • 一般会返回封装好的Result<T>,其中包含状态码、消息以及数据。
  1. 结果列不固定的场景
  • 动态查询(多条件组合)
  • 聚合统计(自定义字段)
  • 多表关联(字段冗余)
  • 动态计算字段
  1. 业务对象的特点
  • 封装业务逻辑
  • 可能包含计算字段或组合数据
  • 与业务需求强相关,而非数据库结构
  1. 三层架构协作原则
  • Mapper 层:返回原始数据(实体类或 Map)
  • Service 层:将原始数据转换为业务对象
  • Controller 层:直接返回业务对象给前端

2025.6.26 针对mapper常用就是实体类,mapper有聚合函数才用map

  1. SQL 查询结果:提供值(value)
  2. 实体类:通过属性名定义键(key)值的类型
  3. ORM 映射:负责将 SQL 列值填入实体类属性
  4. JSON 序列化:将实体类属性名→JSON 的 key,属性值→JSON 的 value

最终的 JSON 结构完全由实体类决定,与 SQL 列名无关(除非通过 ORM 显式配置映射)。

ORM 映射配置(以 MyBatis 为例)(当属性名与字段名不一致时)

通过@Results注解显式指定列名到属性名的映射:

@Select("SELECT id AS user_id, name FROM user WHERE id = #{id}")
@Results({
    @Result(column = "user_id", property = "id"),  // 列名→属性名映射
    @Result(column = "name", property = "name")
})
User getUserById(Long id);


相关文章
|
2月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
|
2月前
|
XML Java Maven
@Bean`注解的使用方法及其作用
本文介绍了Spring框架中`@Bean`注解的使用方法及其作用,包括如何将第三方类库加入Spring容器,配置类与`@Configuration`的配合使用,以及通过`@ConditionalOnClass`、`@ConditionalOnMissingBean`等条件注解控制Bean的加载。同时讲解了Maven父子模块间的依赖关系及配置方式,帮助开发者更好地管理项目结构与依赖注入。
|
机器学习/深度学习 人工智能 搜索推荐
Codewave学习体验分享:低代码开发世界的黑马
Codewave学习体验分享:低代码开发世界的黑马
|
云安全 负载均衡 网络协议
阿里云waf简介和如何配置​
阿里云WAF(Web应用程序防火墙)是一种高效、智能的云安全服务,旨在保护Web应用程序免受各种网络攻击的威胁。它可防止诸如SQL注入、跨站点脚本(XSS)和跨站点请求伪造(CSRF)等攻击,有效保障了Web应用程序的安全性与稳定性。 阿里云WAF在Web应用程序与互联网之间构建一道安全屏障,通过拦截和检测恶意流量,防止攻击者对您的Web应用程序进行攻击。它不仅覆盖了常见的网络攻击类型,还针对新兴的攻击手段进行了防护设计,确保您的Web应用程序在面对各种威胁时都能得到全方位的保护。
|
2月前
|
SQL Java 数据库连接
事务的七种传播行为及其应用场景
本文介绍了事务的七种传播行为及其应用场景,包括 PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_REQUIRES_NEW 等,帮助开发者理解事务管理机制。同时讲解了 Java 中 SQL 操作与对象数据不同步的问题,强调重新查询与手动管理的必要性,并说明 MyBatis 批量操作的最佳实践。
|
Java 数据库连接 mybatis
mybatis注解@Select中添加判断条件<script>
mybatis注解@Select中添加判断条件<script>
1068 0
|
监控 JavaScript 前端开发
Vue 3+Sentry,轻松实现错误追踪!
Vue 3+Sentry,轻松实现错误追踪!
|
人工智能 分布式计算 Java
说说XXLJob分片任务实现原理?
说说XXLJob分片任务实现原理?
1423 0
说说XXLJob分片任务实现原理?
|
Java 关系型数据库 数据库连接
SpringBoot(八)之JdbcTemplate
在 application.properties 或 application.yml 文件中配置数据库连接信息。
634 0