基于SpringBoot3+mybatis搭建的历史上的今天API接口服务 及 Mybatis 应该有个更好的方法来隐藏 Pojo 类中的字段
一、Mybatis有没有比较好的方法隐藏 Pojo 类中的字段
使用 Mybatis 时,为了实现通用的CURD,在定义实体类pojo时,会尽量将能用得上的数据库字段都定义到 pojo中,但是在查询的时候却有不一样的需求。mybatis的文档地址链接:XML 映射器_MyBatis中文网
https://mybatis.net.cn/sqlmap-xml.html#Result_Maps
业务中会有不同的人、不同的权限、不同的业务需要读取的字段不尽相同,我们不可能为这种大量重复的内容来定义多个类似的 pojo,但目前我看 Mybatis 里的方法并没有一个好方法。如下,是我将一个业务中拥有十几个字段的表简化一下,只呈现三个字段: pojo 类定义了和数据库表相同的字段列表:
package cn.fangha.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Event {private Integer id;private String title;private Integer count;}
在定义的 mapper.xml中,如果我在一个SQL查询里只想取出 pojo中的两个字段,有些地方的介绍说使用 resultMap 定义一下字段关联,但进行尝试,其根本不会把 pojo 中其它的类除去,而只是其值为 null, 但字段会依然存在,这就有点繁琐。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.test.mapper.EventMapper"><resultMap type="Event" id="SimpleEventList" ><result property="id" column="ls_id" /><result property="title" column="ls_title" /></resultMap><select id="getEventList" resultMap="SimpleEventList">select ls_id,ls_title from table limit 2;</select></mapper>
并不是说这种情况下没有解决办法,但目前所知道的解决办法都是通过非 mybatis 的方法处理,比如再定义一些不包括这些字段的 pojo,但这个我认为不可取。比如有的说通过在 javaBean 上加注解在序列化的时候忽略此字段,但其会影响所有的地方,如果这样处理,那就直接不要这个pojo属性了:
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)是Jackson库中的注解,用于指定在序列化和反序列化过程中属性的访问权限。
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)用于标记一个属性,在序列化(对象转为JSON字符串)时忽略该属性,只在反序列化(JSON字符串转为对象)时使用该属性。这意味着该属性的值只能从JSON字符串中读取,而不能通过对象转为JSON字符串时输出。
这个注解通常用于保护敏感信息,例如密码字段。在用户注册或更新密码时,密码字段需要从JSON字符串中读取,但在返回用户信息时,密码字段不应该被包含在JSON字符串中。
使用@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)的优势是可以灵活地控制属性的序列化和反序列化行为,提高数据的安全性和隐私保护。
也还有一个很简单的解决办法,就是不使用映射集,在定义 select 的时候直接使用 resultType="map",是能解决问题,而且很简洁,但这又不符合JAVA的风格和规范,在IDEA的编辑器中也会提示返回类型报错。
还有通过对 最后json 处理前操作,通过忽略 null 值字段来实现,如在配置文件中配置spring中 配置 jackson: default-property-inclusion: non_null1,但这就更有点曲线救国了(但目前来看,这个算是较好的解决方法吧)。从而在进行json处理的时候不要这个字段,Mybatis造成的问题要在最后进行 json 响应的时候解决。
我认为较好的解决办法是在使用 resultMap 的时候有属性指定范围,比如 scope 属性,默认值是使用 pojo 的完整字段, 然后指定其它值如 current 之类就直接使用当前定义的 resultMap 字段为准,忽略 pojo 中其它多余的字段,当然这只是一个初步设想,可以完善更多的值和意义,但这应该是 mybatis 本身应该考虑到的功能,目前来看 resultMap 上只有 autoMapping 和 extends 属性。使用一个 extends 继承类似于多个 pojo ,实现繁琐上会稍微好些。当下比较好的解决方法还只能是在 javaBean 上加注解。扩展一点:
二、基于SpringBoot3+mybatis搭建的历史上的今天API接口服务
历史上的今天API可以提供历史上的今天国际国内发生的各种大事件记录,包括中英文版本内容。历史上的今天的意义在于提醒人们关注过去发生的重要事件和人物,从中汲取经验和教训,更好地理解现在和未来,了解到人类社会的发展历程,认识到历史的演进和进步。非授权用户只能查看10条事件。页面截图如下:

本API接口基于SpringBoot3 + Mybatis + Mysql开发,整合Swagger3模块,提供历史上的今天发生的事件明细API接口,同时包括阴历阳历日期、中英文事件内容描述。主要提供二个接口:一是根据日期调取历史上发生的事件明细列表;二是根据事件ID调取事件的详细内容描述,包括中英文版本。
详细请进入网站查看:www.fangha.cn 放哈API接口 ,其中有链接进入此API接口文档。
如下为历史上的今天事件列表接口示例图,日期格式示例: 12月20日 请输入 1220

如下为历史上的今天事件详细 API 接口示例截图,提供事件ID参数。

相关文章:
基于SpringBoot3+mybatis搭建的历史上的今天API接口服务 及 Mybatis 应该有个更好的方法来隐藏 Pojo 类中的字段
一、Mybatis有没有比较好的方法隐藏 Pojo 类中的字段 使用 Mybatis 时,为了实现通用的CURD,在定义实体类pojo时,会尽量将能用得上的数据库字段都定义到 pojo中,但是在查询的时候却有不一样的需求。mybatis的文档地址链接ÿ…...
Python 3 字符串
Python 3 字符串 字符串在Python中是一种基本的数据类型,用于存储文本数据。Python中的字符串是不可变的,这意味着一旦创建了一个字符串,就不能更改其内容。字符串可以用单引号()、双引号("ÿ…...
Android集成FCM(Firebace Cloud Messaging )
集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面,创建自己的项目 2、点击自己创建好的项目,在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…...
基于 RBF 神经网络辨识的单神经元 PID 模型参考自适应控制
这是一个基于 RBF 神经网络辨识 和 单神经元 PID 模型参考自适应控制 的系统框图,包含以下主要部分: RBF 神经网络模块:用于对系统进行辨识,输入误差 e(t)e(t)e(t) 和误差变化量 Δe(t)\Delta e(t)Δe(t),输出与系统特…...
2024年 Web3开发学习路线全指南
Web3是一个包含了很多领域的概念,不讨论币圈和链圈的划分,Web3包括有Defi、NFT、Game等基于区块链的Dapp应用的开发;也有VR、AR等追求视觉沉浸感的XR相关领域的开发;还有基于区块链底层架构或者协议的开发。 这篇文章给出的学习路…...
Ubuntu22.04LTS 部署前后端分离项目
一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库,过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 (停止mysql的命令为:sudo service mysql stop࿰…...
「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
本篇将详细讲解Cangjie中的整数类型,探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景,帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。 关键词 有符号整数与无符号整数表示范围与溢出进制表示类型转换字面量与操作 一、整数类型概…...
渗透测试导学
渗透测试导学 渗透测试概念 渗透测试是干什么? 渗透测试的定义和目的:渗透测试是一种通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全性能的评估方法。它的目的是通过识别安全问题,帮助了解当前的安全状况,从而…...
Django实现智能问答助手-基础配置
设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑,并设计用户界面。下面是一步一步的简要说明: 目录: QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...
亚马逊商品详情API接口解析,Json数据示例返回
亚马逊的商品详情API接口(如Amazon Product Advertising API)允许开发者获取商品的详细信息,包括价格、描述、图片URL等。以下是一个示例的JSON数据返回结构,以及相应的解析说明。请注意,实际返回的数据结构可能会根据…...
git根据远程分支创建本地新分支
比如我当前本地仓库有4个 remote 仓库,我希望根据其中的一个 <remote>/<branch> 创建本地分支: 先使用 github fetch <remote> 拉取 <remote> 的分支信息,然后在 git checkout -b 创建新分支时使用 -t <remote>…...
Android U 多任务启动分屏——SystemUI流程(更新中)
前文 Android U 多任务启动分屏——Launcher流程(下分屏) 前文说到通过ISplitScreen接口跨进程调用到了SystemUI进程,我们继续分析分屏在systemui中的实现。 wmshell实现分屏 实现ISplitScreen接口 代码路径:frameworks/base/…...
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介: Aurora是一个带UI且免费的GPT私人聊天助手,可切换GPT-3.5,4,4o等常用版本。用户可通过部署Aurora,快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...
.NET 9与C# 13革新:新数据类型与语法糖深度解析
记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…...
2.fs文件系统模块
文章目录 [TOC](文章目录)2.5.练习-成绩管理2.5.1在files文件夹下新建成绩.txt文件2.5.2.新建对应的js文件 2.6.fs模块-路径动态拼接的问题 3.path路径模块3.1什么是path路径模块3.2.路径拼接3.3.获取路径中的文件名3.4.获取路径中的文件扩展名3.5.案例3.5.1.步骤13.5.2.调用fs…...
Ubuntu24.04LTS设置root用户可远程登录
Ubuntu24.04LTS设置root用户可远程登录 文章目录 Ubuntu24.04LTS设置root用户可远程登录1. 设置root密码2. 设置root用户可远程登录1. 查看ssh服务是否安装2. 安装ssh服务3. 再次查看ssh服务是否安装4. 配置ssh文件5. 重启ssh服务6. root远程登录 1. 设置root密码 Ubuntu安装后…...
ROS2指令总结(跟随古月居教程学习)
博主跟随古月居博客进行ROS2学习,对ROS2相关指令进行了总结,方便学习和回顾。 古月居ROS2博文链接:https://book.guyuehome.com/ 本文会持续进行更新,觉得有帮助的朋友可以点赞收藏。 1. ROS2安装命令 $ sudo apt update &am…...
IPTV智慧云桌面,后台服务器搭建笔记
环境CentOs7.9 ,安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔,修改服务器端口安全组端口 26029 注意!!!!…...
徒手从零搭建一套ELK日志平台
徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…...
udp_socket
文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen UDP服务器封装 系统调用socket …...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
