【开端】一个看的奇奇怪怪类的解析

news2024/11/27 12:55:01

一、绪论

Java中正常的类语法如下:

public class TmpMUser   implements Serializable{

@Data
public class TmpMUser   implements Serializable{
	/**
	 * 序列
	 */
	private static final long serialVersionUID = 1L;
	
 
    /**
     * 
     */
    private String rowId;
 
    /**
     * 
     */
    private String cellphone;
     
    /**
     * 
     */
    private String phone;
    
    /**
     * 
     */
    private String origPhone;
    
    /**
     * 
     */
    private String cellphoneSha;
    
    
     
 
}

看一下复杂的一个类

public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
    implements Query<QueryWrapper<T>, T, String> {

@SuppressWarnings("serial")
public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
    implements Query<QueryWrapper<T>, T, String> {

    /**
     * 查询字段
     */
    private final SharedString sqlSelect = new SharedString();

    public QueryWrapper() {
        this(null);
    }

    public QueryWrapper(T entity) {
        super.setEntity(entity);
        super.initNeed();
    }

    public QueryWrapper(T entity, String... columns) {
        super.setEntity(entity);
        super.initNeed();
        this.select(columns);
    }

    /**
     * 非对外公开的构造方法,只用于生产嵌套 sql
     *
     * @param entityClass 本不应该需要的
     */
    private QueryWrapper(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
                         Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments, SharedString paramAlias,
                         SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
        super.setEntity(entity);
        super.setEntityClass(entityClass);
        this.paramNameSeq = paramNameSeq;
        this.paramNameValuePairs = paramNameValuePairs;
        this.expression = mergeSegments;
        this.paramAlias = paramAlias;
        this.lastSql = lastSql;
        this.sqlComment = sqlComment;
        this.sqlFirst = sqlFirst;
    }

    @Override
    public QueryWrapper<T> select(String... columns) {
        if (ArrayUtils.isNotEmpty(columns)) {
            this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
        }
        return typedThis;
    }

    @Override
    public QueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
        super.setEntityClass(entityClass);
        this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
        return typedThis;
    }

    @Override
    public String getSqlSelect() {
        return sqlSelect.getStringValue();
    }

    @Override
    protected String columnSqlInjectFilter(String column) {
        return StringUtils.sqlInjectionReplaceBlank(column);
    }

    /**
     * 返回一个支持 lambda 函数写法的 wrapper
     */
    public LambdaQueryWrapper<T> lambda() {
        return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), sqlSelect, paramNameSeq, paramNameValuePairs,
            expression, paramAlias, lastSql, sqlComment, sqlFirst);
    }

    /**
     * 用于生成嵌套 sql
     * <p>
     * 故 sqlSelect 不向下传递
     * </p>
     */
    @Override
    protected QueryWrapper<T> instance() {
        return new QueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
            paramAlias, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
    }

    @Override
    public void clear() {
        super.clear();
        sqlSelect.toNull();
    }
}

二、一个看的奇奇怪怪类的解析

那么这个public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
    implements Query<QueryWrapper<T>, T, String> {

的每一个单词表示什么

看上去和我们平时写的类有点不同或者他看起来更加复杂一点。。

public: 权限修饰符,表示 这个类是可以被实现,可以被继承的,

class :用来修饰这是一个类

QueryWrapper<T>: 类名本身,但是它多了一个<T>是什么意思呢

定义了一个公开的类QueryWrapper,它是一个泛型类,泛型参数为T。这里的T代表了你想要查询的实体类的类型,例如UserProduct等。

extends:表示继承一个父类。

AbstractWrapper<T, String, QueryWrapper<T>> 这个也是个奇奇怪怪得到东西

  • T:实体类类型,与QueryWrapper的泛型参数相同。
  • String:表示数据库字段的类型。在这里,字段名被假定为String类型,因为大多数数据库中的列名都是字符串。
  • QueryWrapper<T>:表示当前类自己,这是一个自引用的泛型参数,用于在父类中实现链式调用的支持。

implements:表示实现一个类


    implements Query<QueryWrapper<T>, T, String> 这又是一个起奇怪怪的东西,它有表示是什么

mplements Query<QueryWrapper<T>, T, String>QueryWrapper类实现了Query接口,这是一个泛型接口,用于定义条件构造器的基本行为。这里的泛型参数分别为:

  • QueryWrapper<T>:条件构造器自身的类型,用于链式调用。
  • T:实体类类型。
  • String:字段类型,同样假定为String

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

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

相关文章

贪心算法篇--代码随想录算法训练营第二十七天| 134. 加油站,135. 分发糖果,860.柠檬水找零

134. 加油站 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 贪心算法&#xff0c;得这么加油才能跑完全程&#xff01;LeetCode &#xff1a;134.加油站 题目描述&#xff1a; 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加…

如何设置 Visual Studio Code 的滚轮缩放功能

Visual Studio Code (VSCode) 是一个强大的代码编辑器&#xff0c;提供了许多便捷的功能来提高开发效率。其中之一就是通过滚轮缩放字体大小。以下是详细的设置步骤&#xff1a; 步骤 1&#xff1a;打开设置页面 首先&#xff0c;启动 Visual Studio Code。在左上角点击 “文…

【网红时代】揭秘网红IP分析与打造,专业自媒体运营攻略

在这个互联网高速发展的时代&#xff0c;网红IP和自媒体的影响力日益凸显&#xff0c;成为品牌传播和市场营销的重要力量。如何分析和打造网红IP&#xff0c;进行专业的自媒体运营&#xff0c;成为许多企业和个人关注的焦点。今天&#xff0c;让我们一起探索网红IP的奥秘&#…

2024高端网站制作公司推荐TOP3

2024这个数字化高度发达的时间段&#xff0c;一个专业、高端的网站不仅是企业形象的展示窗口&#xff0c;更是连接用户与品牌的重要桥梁。 随着技术的不断进步和设计理念的不断创新&#xff0c;许多高端网站制作公司凭借其卓越的技术实力、创新的设计理念和丰富的项目经验&…

逻辑判断1-逻辑基础知识

目录 一、命题1.命题介绍2.复合命题1. 联合命题(且)2. 选言命题(或者、要么)3. 假言命题(如果、才、否则)3.模态命题(可能必然)4.直言命题(所有有些)5.充分必要条件二、推理方式一、命题 1.命题介绍 命题的四种形式和关系 命题传递规则 A→B,B→C,可联立,得出A→…

视频汇聚/安防综合管理系统EasyCVR非管理员账户能调用分配给其他用户的通道是什么原因?

视频汇聚/安防综合管理系统EasyCVR视频监控平台&#xff0c;作为一款智能视频监控综合管理平台&#xff0c;凭借其强大的视频融合汇聚能力和灵活的视频能力&#xff0c;在各行各业的应用中发挥着越来越重要的作用。平台不仅具备视频资源管理、设备管理、用户管理、网络管理和安…

请求转发与重定向

一、介绍 设想这样一种情况&#xff0c;在我们登录某个网站时&#xff0c;登录页面会要求我们输入账号密码以及其他信息&#xff0c;当我们点击登录按钮时&#xff0c;浏览器会将我们的信息以及请求的一些信息发送到服务器端&#xff0c;在服务器端&#xff0c;我们可以从requ…

haralyzer 半自动,一次性少量数据采集快捷方法

使用场景&#xff1a;半自动&#xff0c;一次性少量数据采集需求在工作中还是不少遇到的&#xff0c;无论使用模拟的方式&#xff0c;或者破解都不太划算。其实这种需求&#xff0c;使用半自动爬虫是最简单的。不需要考虑网站反爬虫的问题&#xff0c;因为你使用的就是真实的浏…

【MySQL】用户管理——用户、用户信息、创建用户、删除用户、修改用户密码、数据库的权限、给用户权限、回收权限

文章目录 MySQL1. 用户管理1.1 用户1.1.1 用户信息1.1.2 创建用户1.1.3 删除用户1.1.4 修改用户密码 1.2 数据库的权限1.2.1 给用户权限1.2.2 回收权限 MySQL 1. 用户管理 为什么MySQL要引入用户管理&#xff1f; 如果我们只能使用root用户&#xff0c;这样存在安全隐患。因为r…

【JavaEE初阶】文件内容的读写—数据流

目录 &#x1f4d5; 引言 &#x1f334; 数据流的概念 &#x1f6a9; 数据流分类 &#x1f333; 字节流的读写 &#x1f6a9; InputStream&#xff08;从文件中读取字节内容) &#x1f6a9; OutputStream&#xff08;向文件中写内容&#xff09; &#x1f384; 字符流的…

Java、python、php版的邮件发送与过滤系统的设计与实现 (源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

iMES工厂管家:强大的工厂管理系统

iMES工厂管家&#xff1a;强大的工厂管理系统 在现代工厂管理中&#xff0c;iMES工厂管家作为一款功能强大的MES系统&#xff0c;为用户提供了全面的管理解决方案。本文将介绍iMES工厂管家的基本信息、特点、以及如何快速部署和使用。 软件简介 iMES工厂管家是一款基于.NetCor…

Android Studio设置 offline 模式

gradle3.6之前版本 在setting中选中Offline Work选项 gradle3.6之后的版本

Tied and Anchored Stereo Attention Network for Cloud Removal in Optical

论文名称 基于固定锚定立体注意力网络的光学遥感图像去云方法代码运行 论文代码 https://github.com/ningjin00/TASANet?tabreadme-ov-file 论文地址 1环境创建 模型环境给了这几个包&#xff0c;如果你自带环境 那就运行代码 提示缺哪个装哪个 python 3.12rasterio 1.3.10…

330进口高强度螺丝产品优势

330进口高强度螺丝是一种高性能紧固件&#xff0c;广泛应用于汽车、航空航天、重型机械、能源、基础设施建设等多个领域。这些螺丝之所以受到青睐&#xff0c;是因为它们在设计、材料选择、制造工艺等方面都达到了非常高的标准&#xff0c;确保了产品的卓越性能。以下是330进口…

四款录屏大师,一键搞定!新手也能快速上手?

现在随着新媒体的记录设备的不断更新迭代之下&#xff0c;我们记录生活的工具也愈来愈强大&#xff0c;不过如果需要记录电脑中的重要信息时&#xff0c;我们就需要借助录屏工具来实现了&#xff0c;所以今天整理了四款实用靠谱的录屏大师&#xff0c;有需要的朋友可以试试&…

浅谈C语言位段

1、位段的定义 百度百科中是这样解释位段的: 位段&#xff0c;C语言允许在一个结构体中以位为单位来指定其成员所占内存长度&#xff0c;这种以位为单位的成员称为“位段”或称“位域”( bit field) 。利用位段能够用较少的位数存储数据。 以下&#xff0c;我们均在VS2022的…

靶机:DC-4

一、信息收集 1、主机发现 nmap 192.168.236.0/24 2、端口扫描 nmap 192.168.236.175 -p- -A 3、目录扫描 dirb http://192.168.236.175 二、漏洞探测 访问80端口&#xff0c;发现登录页面 尝试爆破密码 hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.236…

python媒体下载工具 you-get

you-get 是一个基于 Python 3 的强大的命令行工具&#xff0c;使用方式简单&#xff0c;使用 you-get 可以很轻松的下载到网络上的各种媒体文件&#xff08;视频、图片及音乐等&#xff09;。 相关功能和配置选项&#xff0c;可以查阅以下以获取详细信息&#xff1a; GitHub 官…

【对抗性训练】FGM、AWP

FGM&#xff08;Fast Gradient Method&#xff09;和 AWP&#xff08;Adversarial Weight Perturbation&#xff09;是两种与对抗训练相关的技术&#xff0c;旨在提高深度学习模型的鲁棒性和防御能力。它们主要应用于对抗攻击&#xff08;adversarial attacks&#xff09;背景下…