Spring boot + MyBatis返回map中null值显示

本文详细介绍了如何在SpringBoot结合MyBatis的项目中配置以显示数据库查询结果中的null值,通过调整mybatis配置项call-setters-on-nulls为true实现这一需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring boot + MyBatis返回map中null值默认不显示,如要调整为null值显示
需要在配置文件中添加属性,如下图红框中所示:


spring:
    datasource:
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=gktj
      username: sa
      password: 123

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.example.demo.bean
  configuration:
    call-setters-on-nulls: true

 

### 技术整合方案概述 在现代Web应用开发中,技术栈的选择至关重要。对于一个完整的全栈项目,可以采用 **Spring Boot + MyBatis-Plus + Spring Security + JWT + MySQL + Redis + Vue3 + Element Plus + ECharts** 的组合来构建高效、安全的应用程序。 以下是该技术栈的核心组件及其作用: #### 后端部分 1. **Spring Boot**: 提供快速搭建微服务框架的能力,简化配置流程。 2. **MyBatis-Plus**: 在MyBatis基础上扩展的功能增强工具,支持CRUD操作自动化以及分页查询等功能[^1]。 3. **Spring Security & JWT**: 负责系统的身份验证和授权管理,JWT用于无状态的身份令牌传递[^4]。 4. **MySQL**: 关系型数据库,存储业务数据。 5. **Redis**: 缓存中间件,提升系统性能并减少数据库压力。 #### 前端部分 1. **Vue3**: 新一代渐进式JavaScript框架,提供高效的UI渲染能力。 2. **Element Plus**: 高质量的Vue3 UI组件库,适用于桌面设备的设计与开发。 3. **ECharts**: 百度开源的数据可视化图表库,适合展示复杂数据分析结果。 --- ### 示例项目的整体架构设计 #### 1. 系统分层架构 客户端请求经过Nginx负载均衡转发至网关(如Spring Cloud Gateway),再由具体的微服务处理逻辑,最终返回给前端页面显示。具体层次如下: - 客户端:Vue3 + Element Plus 构建交互界面; - API网关:Spring Cloud Gateway 或 Zuul 进行路由管理和权限控制; - 微服务模块:订单服务或其他业务逻辑单元; - 数据访问层:MyBatis-Plus 结合 ShardingSphere 实现分布式事务管理[^1]; - 缓存层:Redis 存储会话信息及热点数据; - 持久化层:MySQL 分库分表策略优化读写效率; #### 2. 核心功能实现细节 ##### (1)用户认证与鉴权 利用 `CustomUserDetailsService` 自定义用户详情加载器完成用户名密码校验,并通过JWT生成加密Token,在每次HTTP请求头携带Authorization字段进行合法性判断[^4]。 ```java @Service @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { private final UserService userService; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userService.getUserByUsername(username); if (user == null) { throw new UsernameNotFoundException("用户不存在"); } return new org.springframework.security.core.userdetails.User( user.getUsername(), user.getPassword(), getAuthorities(user.getRole()) ); } private Collection<? extends GrantedAuthority> getAuthorities(String role) { List<GrantedAuthority> authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority(role)); return authorities; } } ``` ##### (2)RESTful 接口响应封装 为了统一API输出格式,创建通用VO类作为载体,便于前后端对接调试[^3]。 ```java @Data @AllArgsConstructor @NoArgsConstructor public class Vo<T> { private int code; private String message; private T data; } @RestController @RequestMapping("/api/user") public class UserController { @GetMapping("/info") public ResponseEntity<Vo<?>> userInfo(@AuthenticationPrincipal Jwt jwt) { Map<String, Object> info = new HashMap<>(); info.put("username", jwt.getSubject()); return ResponseEntity.ok(new Vo<>(HttpStatus.OK.value(), "获取成功", info)); } } ``` ##### (3)前端视图绑定事件触发异步调用 借助Axios发起网络请求到后端接口地址,同时引入ECharts绘制动态图形辅助决策分析。 ```javascript <script setup> import axios from 'axios'; import * as echarts from 'echarts'; const fetchData = async () => { try { const response = await axios.get('/api/statistics'); initChart(response.data); } catch (error) { console.error('Error fetching data:', error); } }; const initChart = (data) => { let chartDom = document.getElementById('main'); let myChart = echarts.init(chartDom); let option = { title: { text: '统计报表' }, tooltip: {}, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] }, yAxis: { type: 'value' }, series: [{ data: data.values, type: 'line' }] }; myChart.setOption(option); }; </script> <template> <div id="app"> <el-button @click="fetchData">刷新数据</el-button> <div id="main" style="width: 600px;height:400px;"></div> </div> </template> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值