java:sqlj2ava的静态字段保护

不论是Thrift RPC还是SpringWeb服务,服务方法的输入和输出参数都要通过网络在Server/Client之间传输。实现数据对象传输,发送端需要对数据对象进行序列化(JSON或二进制数据流),接收端需要对收到的数据反序列化还原为原始的数据对象。

从3.32.0版本开始,sql2java增加了静态字段过滤功能,是指在生成sql2java的数据库表记录对象类时,允许指定字段的可见度(ColumnVisibility)。

sql2java的完整使用示例参见码云仓库: sql2java-example: sql2java调用示例 (gitee.com)

可见度是指字段对数据接收端是否可见,只要控制数据库表对象在序列化/反序列化时忽略不可见字段,数据接收端最终收到数据库对象中就不会包含该字段。

具体实现就是sql2java-generator会根据字段的可见度要求,对于不可见字段,在生成对应字段代码时增加Jackson,Fastjson,Thrift注解(Annotation)指定在表对象序列化/反序列化时忽略该字段。

字段可见度定义

sql2java中字段可见度定义对应枚举类型gu.sql2java.ColumnVisibility

枚举变量JSON是否可见Thrift是否可见说明
DEFAULTtruetrue默认:全可见
LOCALfalsefalse仅本地可见,与远端(Spring WEB,Thrift RPC)交互时不可见
THRIFTfalsetrueThrift RPC 传输时可见,Thrft RPC 客户端与服务端交互时可见
JSONtruefalseJSON序列化时可见,Spring WEB 客户端与服务端 交互时可见(Spring WEB是基于jackson实现序列化和反序列化的),使用fastjson对数据库对象进行序列化和反序列化时同样有效。

定义可见度

字段注释标记 SCOPE@@EPOSC 用于定义字段可见度,具体格式为

SCOPE@(LOCAL|JSON|THRIFT)@EPOSC

标记中的LOCAL,JSON,THRIFT对应着上述的三种可见度

如下示例,下面的表定义中,private_time字段定义了SCOPE@@EPOSC注释标记,指定了该字段仅本地可见。也就是说只有服务端本身可以读写该字段。

CREATE TABLE IF NOT EXISTS dc_device (`id`             int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'X@NAME:设备id@X',`name`           varchar(32) DEFAULT NULL COMMENT 'X@NAME:设备名称@X,用户指定',`physical_address` varchar(32) NOT NULL UNIQUE COMMENT '设备X@NAME:物理地址@X,MAC地址,IMEI或其他设备识别码',`private_time`     bigint DEFAULT 0 COMMENT 'SCOPE@LOCAL@EPOSC设备令牌创建的时间戳(毫秒)',`os_arch`        varchar(64) DEFAULT NULL COMMENT 'X@NAME:操作系统平台@X,操作系统名称及版本及硬件架构名称,例如:Windows-x86_64,Linux-x86_64,Android-arm...'
) COMMENT 'X@NAME:前端设备记录@X,前端设备基本信息' DEFAULT CHARSET=utf8;

sql2java-generator生成的DeviceBean对象中dc_device.private_time字段的对应成员privateTime定义代码如下:

    /** comments:设备令牌创建的时间戳(毫秒) */@ApiModelProperty(value = "设备令牌创建的时间戳(毫秒)"  ,dataType="Long")@CodegenDefaultvalue("0")@CodegenInvalidValue("-1")@ExcelColumn(sort=9)@com.alibaba.fastjson.annotation.JSONField(serialize = false,deserialize = false)@com.fasterxml.jackson.annotation.JsonIgnoreprivate Long privateTime;/*** Getter method for {@link #privateTime}.<br>* Meta Data Information (in progress):* <ul>* <li>full name: dc_device.private_time</li>* <li>comments: 设备令牌创建的时间戳(毫秒)</li>* <li>default value: '0'</li>* <li>column size: 19</li>* <li>JDBC type returned by the driver: Types.BIGINT</li>* </ul>** @return the value of privateTime*/@JsonIgnorepublic Long getPrivateTime(){return privateTime;}

可以看到,privateTime成员定义的Jackson注解@JsonIgnore和fastjson注解@JSONField指定该字段在JSON序列化和反序列化时忽略应该字段。同时privateTime的getter方法上也没有thrift字段注解@ThriftField,代表应该字段没有被定义为Thrift Struct成员字段。

swift2thrift-maven-plugin插件生成的IDL中就不会有privateTime字段:

struct DeviceBean {1: required bool _new;2: required i32 modified;3: required i32 initialized;4: optional i32 id;5: optional string name;6: optional string physicalAddress;7: optional string osArch;
}

完整说明

参见 sql2java: 轻量级数据库(SQL)访问代码(java)生成器 (gitee.com) README.md的《静态字段过滤》章节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

萤石视频接入api接口示例

api官方文档 文档概述 萤石开放平台API文档 (ys7.com) 方法层: @Value("${video.appKey}")private String appKey;@Value("${video.appSecret}")private String appSecret;@Overridepublic String getToken(String appKey, String appSecret) {OkHtt…

3D视觉引导机器人提升生产线的自动化水平和智能化程度

随着智能化技术的不断发展&#xff0c;汽车制造企业正积极寻求提升智能化水平的途径。富唯智能的3D视觉引导机器人抓取技术为汽车制造企业提供了一种高效、智能的自动化解决方案。 项目目标 某汽车制造企业希望通过引入智能化技术提升生产线的自动化水平和智能化程度。他们希望…

小抄 20240610

1 不要轻易主动帮人&#xff0c;你一主动&#xff0c;本来是他的事&#xff0c;现在成了你的事&#xff0c;你做的稍微有点不如愿&#xff0c;他还要反过来埋怨你。 2 网上经常炫富的有两种人&#xff0c; 一种是穷人&#xff0c;通过炫富来掩盖自己自卑的内心。 一种是靠炫富…

数字时代PLM系统的重要性

什么是 PLM&#xff08;产品生命周期管理&#xff09;&#xff1f; 从最基本的层面上讲&#xff0c;产品生命周期管理 (PLM)是管理产品从最初构思、开发、服务和处置的整个过程的战略流程。换句话说&#xff0c;PLM 意味着管理产品从诞生到消亡所涉及的一切。 什么是 PLM 软件…

43.139.152.26 P2315 分数计算

从键盘读入一个分数算式&#xff0c;为2个分数做加法或者减法&#xff0c;请输出分数算式的结果&#xff0c;结果也用分数表达&#xff0c;且约分到最简形式。&#xff08;请注意&#xff1a;做减法可能得到负的分数&#xff0c;如果是负数要输出负号-&#xff0c;如1/15-4/15结…

python错题(3)

round四舍五入 title()把单词首字母大写 all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE&#xff0c;如果是返回 True&#xff0c;否则返回 False。 元素除了是 0、空、None、False 外都算 True 。空元组、空列表返回值为True&#xff0c;这里要特…

2023数A题——WLAN网络信道接入机制建模

A题——WLAN网络信道接入机制建模 思路&#xff1a;该题主要考察的WLAN下退避机制建模仿真。 资料获取 问题1&#xff1a; 假设AP发送包的载荷长度为1500Bytes&#xff08;1Bytes 8bits&#xff09;&#xff0c;PHY头时长为13.6μs&#xff0c;MAC头为30Bytes&#xff0c;MA…

是否可以外链代发?

当然是可以的&#xff0c;代发外链是一种有效的提升网站SEO排名和流量的方法。通过在高质量的网站上发布包含你网站链接的内容&#xff0c;可以提高你网站的权重和可信度。而在所有代发外链的方式中&#xff0c;GPB外链无疑是最好的选择。 GPB外链&#xff0c;每一条GPB外链都是…

【UE4】角色御剑飞行的蓝图实现

沉沉更鼓急&#xff0c;渐渐人声绝 吹灯窗更明&#xff0c;月照一天雪 UE4简单的实现御剑飞行的功能 契子✨ 所谓的御剑飞行的原理就跟 《御板》 飞行的原理差不多&#xff0c;不过是在人物脚上插把剑在飞行的时候显示出来罢了。简单来讲就是只要渲染做的足够牛&#xff0c;土鸡…

App上架和推广前的准备

众所周知&#xff0c;App推广的第一步是上架各大应用下载市场&#xff0c;然后才是其他推广渠道。所以本文主要分两部分&#xff0c;第一部分主要介绍的是上架各大应用市场方面的准备&#xff0c;第二部分主要介绍的是其他渠道推广方面的准备。 一、App上架前的准备 1.1 上架…

李光明从程序员到架构师的逆袭之路(二)

李光明是一名已经走过了两个年头的程序员&#xff0c;身处快节奏、高强度的IT行业&#xff0c;每天的生活几乎被996的工作模式所填满。他渐渐觉得&#xff0c;自己仿佛被无尽的代码海洋淹没&#xff0c;每一天都在重复着枯燥无味的编码工作&#xff0c;心灵上的疲惫让他对工作失…

程序员做电子书产品变现的复盘(5)

源码开发者是巴西人&#xff0c;只适配了英文和一些小语种&#xff0c;把中文epub电子书文件拖进去后经常会报错和程序崩溃&#xff08;中文epub文件在制作时很多并没有按行业规范&#xff09;。 通过邮箱找到开发者&#xff0c;当然先是赞扬这套源码超级无敌好用&#xff0c;顺…

CSP-J/S初赛02 计算机软件与操作系统

1 计算机软件 计算机软件可分为系统软件和应用软件两大类。 系统软件 用来支持应用软件的开发和运行的&#xff0c;主要是操作系统软件&#xff0c;如&#xff1a;DOS、Windows95/98/2000、Unix、Linux、WindowsNT&#xff1b; 应用软件 为了某个应用目的而编写的软件&…

Spring (65)什么是Spring Expression Language(SpEL)

Spring Expression Language&#xff08;SpEL&#xff09;是一个强大的表达式语言&#xff0c;允许在运行时查询和操作一个对象图。SpEL是Spring框架的一个组成部分&#xff0c;提供了丰富的表达式用于运行时逻辑和数据操作。 SpEL 的核心功能 Literal Expressions&#xff0…

Servlet基础(续集2)

HttpServletResponse web服务器接收到客户端的http的请求&#xff0c;针对这个请求&#xff0c;分别创建一个代表请求的HttpServletRequest对象&#xff0c;代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数&#xff1a;找HttpServletRequest如果要给客户端…

【前端面试】二叉树递归模板和题解

递归模板和步骤 递归题目的通用步骤递归模板总结1. 树的遍历&#xff08;DFS&#xff09;2. 二叉树的最大深度3. 二叉树的最近公共祖先 递归题目的记忆技巧 递归题目的通用步骤 明确递归函数的功能&#xff1a;确定递归函数的输入参数和返回值&#xff0c;明确函数的功能。基准…

从入门到精通:Linux多线程

前言 多线程编程是现代计算机科学中至关重要的技术&#xff0c;它能够显著提升程序的并行性和性能。特别是在Linux环境中&#xff0c;多线程编程变得尤为重要&#xff0c;因为Linux提供了丰富的多线程支持。在这篇文章中&#xff0c;我们将深入探讨Linux多线程编程&#xff0c…

如何在本地部署ChatTTS? 完美部署 简单几步 cpu gpu cuda

前言 最近,24-05-27号,github上出现了一个新项目,ChatTTS。该项目提供了一个文本转语音(Text To Speech)的开源方案,同时支持中文和英文。在官网的演示视频中,可以看到合成效果高度接近真人。 到目前(06-04)为止,已经有18.3k的star。 那我们就来看看这个模型的基本…

判断一个矩形是否在一个多边形内部的python代码

要判断一个矩形是否在一个多边形内部&#xff0c;可以使用点在多边形内的判断方法。具体步骤如下&#xff1a; 1.定义多边形的顶点坐标列表&#xff08;多边形的每个顶点的x和y坐标&#xff09; 2.判断矩形的四个顶点是否都在多边形内部 下面是一个简单的Python代码示例来实现…

63、上海大学:MSConvNet-多尺度卷积神经网络解码大鼠运动疲劳数据[攒劲的模型来喽]

1、介绍&#xff1a; 文章&#xff1a;<A multiscale convolutional neural network based on time-frequency features for decoding rat exercise fatigue LFP >&#xff0c;本文由上海大学于2024.4.8日发表于<Biomedical Signal Processing and Control >&…