当前位置: 首页 > news >正文

基于SpringBoot3+mybatis搭建的历史上的今天API接口服务 及 Mybatis 应该有个更好的方法来隐藏 Pojo 类中的字段

一、Mybatis有没有比较好的方法隐藏 Pojo 类中的字段

        使用 Mybatis 时,为了实现通用的CURD,在定义实体类pojo时,会尽量将能用得上的数据库字段都定义到 pojo中,但是在查询的时候却有不一样的需求。mybatis的文档地址链接:XML 映射器_MyBatis中文网icon-default.png?t=O83Ahttps://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 时&#xff0c;为了实现通用的CURD&#xff0c;在定义实体类pojo时&#xff0c;会尽量将能用得上的数据库字段都定义到 pojo中&#xff0c;但是在查询的时候却有不一样的需求。mybatis的文档地址链接&#xff…...

Python 3 字符串

Python 3 字符串 字符串在Python中是一种基本的数据类型&#xff0c;用于存储文本数据。Python中的字符串是不可变的&#xff0c;这意味着一旦创建了一个字符串&#xff0c;就不能更改其内容。字符串可以用单引号&#xff08;&#xff09;、双引号&#xff08;"&#xff…...

Android集成FCM(Firebace Cloud Messaging )

集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面&#xff0c;创建自己的项目 2、点击自己创建好的项目&#xff0c;在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…...

基于 RBF 神经网络辨识的单神经元 PID 模型参考自适应控制

这是一个基于 RBF 神经网络辨识 和 单神经元 PID 模型参考自适应控制 的系统框图&#xff0c;包含以下主要部分&#xff1a; RBF 神经网络模块&#xff1a;用于对系统进行辨识&#xff0c;输入误差 e(t)e(t)e(t) 和误差变化量 Δe(t)\Delta e(t)Δe(t)&#xff0c;输出与系统特…...

2024年 Web3开发学习路线全指南

Web3是一个包含了很多领域的概念&#xff0c;不讨论币圈和链圈的划分&#xff0c;Web3包括有Defi、NFT、Game等基于区块链的Dapp应用的开发&#xff1b;也有VR、AR等追求视觉沉浸感的XR相关领域的开发&#xff1b;还有基于区块链底层架构或者协议的开发。 这篇文章给出的学习路…...

Ubuntu22.04LTS 部署前后端分离项目

一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库&#xff0c;过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 &#xff08;停止mysql的命令为&#xff1a;sudo service mysql stop&#xff0…...

「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型

本篇将详细讲解Cangjie中的整数类型&#xff0c;探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景&#xff0c;帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。 关键词 有符号整数与无符号整数表示范围与溢出进制表示类型转换字面量与操作 一、整数类型概…...

渗透测试导学

渗透测试导学 渗透测试概念 渗透测试是干什么&#xff1f; 渗透测试的定义和目的&#xff1a;渗透测试是一种通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全性能的评估方法。它的目的是通过识别安全问题&#xff0c;帮助了解当前的安全状况&#xff0c;从而…...

Django实现智能问答助手-基础配置

设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑&#xff0c;并设计用户界面。下面是一步一步的简要说明&#xff1a; 目录&#xff1a; QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...

亚马逊商品详情API接口解析,Json数据示例返回

亚马逊的商品详情API接口&#xff08;如Amazon Product Advertising API&#xff09;允许开发者获取商品的详细信息&#xff0c;包括价格、描述、图片URL等。以下是一个示例的JSON数据返回结构&#xff0c;以及相应的解析说明。请注意&#xff0c;实际返回的数据结构可能会根据…...

git根据远程分支创建本地新分支

比如我当前本地仓库有4个 remote 仓库&#xff0c;我希望根据其中的一个 <remote>/<branch> 创建本地分支&#xff1a; 先使用 github fetch <remote> 拉取 <remote> 的分支信息&#xff0c;然后在 git checkout -b 创建新分支时使用 -t <remote>…...

Android U 多任务启动分屏——SystemUI流程(更新中)

前文 Android U 多任务启动分屏——Launcher流程&#xff08;下分屏&#xff09; 前文说到通过ISplitScreen接口跨进程调用到了SystemUI进程&#xff0c;我们继续分析分屏在systemui中的实现。 wmshell实现分屏 实现ISplitScreen接口 代码路径&#xff1a;frameworks/base/…...

使用SaaS化的Aurora应用快速搭建私人ChatGPT助手

使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介&#xff1a; Aurora是一个带UI且免费的GPT私人聊天助手&#xff0c;可切换GPT-3.5&#xff0c;4&#xff0c;4o等常用版本。用户可通过部署Aurora&#xff0c;快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录&#xff08;Record&#xff09;类型 使用方式&#xff1a; public record Person(string FirstName, string LastName); 适用场景&#xff1a;当需要创建不可变的数据结构&#xff0c;且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景&#xff1a;当数据结构需…...

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学习&#xff0c;对ROS2相关指令进行了总结&#xff0c;方便学习和回顾。 古月居ROS2博文链接&#xff1a;https://book.guyuehome.com/ 本文会持续进行更新&#xff0c;觉得有帮助的朋友可以点赞收藏。 1. ROS2安装命令 $ sudo apt update &am…...

IPTV智慧云桌面,后台服务器搭建笔记

环境CentOs7.9 &#xff0c;安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔&#xff0c;修改服务器端口安全组端口 26029 注意&#xff01;&#xff01;&#xff01;&#xff01…...

徒手从零搭建一套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 …...

LInux(gcc处理器,库文件,动静态库)

//Dbug版本为可调试版本 生成的可执行的文件在包含调试信息 //Release版本为用户版本 无可调试信息 用gcc生成的就是Release版本 //用gcc生成的就是Release版本 -g 可以变成Dbug版本 //e.g gcc 1.c -o 1 -g // 变成Dbug版本后 输入gdb 文件名 进入调试模式 // 在完成调试…...

AI智能体编排平台OpenClaw-Core:构建标准化、可复用的AI工作流

1. 项目概述&#xff1a;从“单打独斗”到“交响乐团”的AI协作革命 如果你和我一样&#xff0c;在过去几年里深度使用过各种大语言模型&#xff0c;那你一定经历过这种“甜蜜的烦恼”&#xff1a;ChatGPT在创意写作上天马行空&#xff0c;但在代码生成上偶尔会“一本正经地胡说…...

FinRL_Podracer:基于深度强化学习的高性能量化交易框架解析

1. 项目概述&#xff1a;当强化学习遇上量化交易最近几年&#xff0c;量化交易圈子里有个词儿越来越热&#xff0c;那就是“强化学习”。你可能听说过AlphaGo下围棋&#xff0c;或者AI在星际争霸里打败人类高手&#xff0c;这些背后都是强化学习在发力。简单来说&#xff0c;它…...

NotebookLM未公开的Obsidian插件桥接协议(内部文档泄露版),仅限前500名技术决策者获取

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM与Obsidian整合的架构全景图 NotebookLM&#xff08;Google 推出的 AI 原生研究助手&#xff09;与 Obsidian&#xff08;本地优先、双向链接的知识图谱工具&#xff09;的整合&#xff0c;正…...

AI Agent配置安全扫描:AgentLint工具实战与供应链风险防护

1. 项目概述&#xff1a;AI Agent配置的“安全门卫”最近在折腾Claude Code和Cursor这类AI编程助手时&#xff0c;我发现了一个既让人兴奋又有点不安的事实&#xff1a;这些工具的配置文件&#xff08;比如.claude/目录、CLAUDE.md或.cursorrules&#xff09;功能强大到可以执行…...

ARM动态内存控制器与SDRAM地址映射技术详解

1. ARM动态内存控制器基础解析动态内存控制器&#xff08;Dynamic Memory Controller&#xff0c;简称DMC&#xff09;是现代嵌入式系统中管理SDRAM等易失性存储器的核心组件。作为处理器与存储设备之间的桥梁&#xff0c;DMC通过高效的地址映射技术实现两者间的数据通信。在AR…...

通过Taotoken官方价折扣与活动价降低大模型API使用门槛

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken官方折扣与活动价降低大模型API使用门槛 对于开发者而言&#xff0c;大模型API的成本是项目落地和持续迭代中必须考量…...

MAX31856在工业温控项目中的实战应用:从选型、电路设计到故障诊断避坑指南

MAX31856工业温控系统设计全流程&#xff1a;从芯片选型到抗干扰实战 工业温度监测系统的可靠性直接关系到生产安全与产品质量。在钢铁冶炼、化工反应等场景中&#xff0c;一个温度传感器的失效可能导致数百万损失。MAX31856作为工业级热电偶数字转换器&#xff0c;其45V过压保…...

那些“假装很忙”的员工,正成为中小企业老板最大的管理黑洞

作为一名常年给企业做数字化诊断的顾问&#xff0c;我发现很多老板都有一个共同的“心病”&#xff1a;走进办公室&#xff0c;满屋子都是噼里啪啦的打字声&#xff0c;每个人看起来都在埋头苦干&#xff0c;但一到交付节点&#xff0c;进度总是莫名其妙地卡壳。这种“办公室伪…...

Cursor Pro永久免费使用终极指南:如何绕过试用限制完整教程

Cursor Pro永久免费使用终极指南&#xff1a;如何绕过试用限制完整教程 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...