Mybatis SQL构建器类 - SqlBuilder and SelectBuilder (已经废弃)

news/2024/10/22 18:35:09/

在3.2版本之前,我们采用了一种略有不同的方法,通过利用ThreadLocal变量来掩盖一些使Java DSL有点繁琐的语言限制。然而,这种方法现在已被弃用,因为现代框架已经普及了使用构建器模式和匿名内部类的概念。因此,SelectBuilder和SqlBuilder类已被弃用。

以下方法仅适用于已弃用的SqlBuilder和SelectBuilder类。

Method(方法)Description(描述)
BEGIN() / RESET()这些方法用于清除SelectBuilder类的ThreadLocal状态,并准备构建新的语句。BEGIN()在开始一个新语句时使用效果最佳。RESET()在执行中清除语句时使用效果最佳,可能是因为逻辑要求在某些条件下完全不同的语句。
SQL()这个方法返回生成的SQL语句,并重置SelectBuilder的状态(就像调用了BEGIN()或RESET()一样)。因此,这个方法只能调用一次!

SelectBuilder和SqlBuilder类并不具有神奇的功能,但了解它们的工作原理很重要。SelectBuilder和SqlBuilder使用静态导入和ThreadLocal变量的组合,以实现干净的语法,可以轻松地与条件语句交织在一起使用。要使用它们,您可以像这样静态导入类中的方法(选其中一个导入,不要同时导入两个):

import static org.apache.ibatis.jdbc.SelectBuilder.*;
import static org.apache.ibatis.jdbc.SqlBuilder.*;

这使我们可以创建以下类似的方法:

/* DEPRECATED */
public String selectBlogsSql() {BEGIN(); // Clears ThreadLocal variableSELECT("*");FROM("BLOG");return SQL();
}
/* DEPRECATED */
private String selectPersonSql() {BEGIN(); // Clears ThreadLocal variableSELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");FROM("PERSON P");FROM("ACCOUNT A");INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");WHERE("P.ID = A.ID");WHERE("P.FIRST_NAME like ?");OR();WHERE("P.LAST_NAME like ?");GROUP_BY("P.ID");HAVING("P.LAST_NAME like ?");OR();HAVING("P.FIRST_NAME like ?");ORDER_BY("P.ID");ORDER_BY("P.FULL_NAME");return SQL();
}


http://www.ppmy.cn/news/1287382.html

相关文章

十大排序算法归纳

目录 排序算法的分类 插入排序算法模板 选择排序算法模板 冒泡排序算法模板 希尔排序算法模板 快速排序算法模板 归并排序算法模板 堆排序算法模板 基数排序算法模板 计算排序算法模板 桶排序算法模板 排序算法的分类 插入:插入,折半插入&am…

大数据应用领域:数据驱动一切

大数据出现的时间只有十几年,被人们广泛接受并应用只有几年的时间,但就是这短短几年的时间,大数据呈现出爆炸式增长的态势。在各个领域,大数据的身影几乎无处不在。今天我们通过一些大数据典型的应用场景分析,一起来看…

【Unity入门】MenuItem 和 ContextMenu 的使用方法

目录 一、ContextMenu描述使用示例ContextMenuItem使用示例 二、MenuItem描述使用示例 三、MenuItem 和 ContextMenu 的区别 一、ContextMenu 描述 ContextMenu 属性用于向上下文菜单添加命令。 在该附加脚本的 Inspector 中,当用户选择该上下文菜单时&#xff0c…

算法学习系列(十八):字符串哈希

目录 引言一、字符串哈希概念二、代码实现 引言 这个字符串哈希还是比较厉害的啊,只要是有关字符串的题目,这个字符串哈希都是可以轻松水过,所以说这个还是得好好掌握啊,话不多说,直接开始。 一、字符串哈希概念 这…

TypeScript 基础知识:基本数据类型

TypeScript 是一种强类型的编程语言,它在 JavaScript 的基础上增加了静态类型检查。在 TypeScript 中,我们可以使用类型注解和类型推断来声明和推断变量的类型。本篇专栏文章将深入探索 TypeScript 中的基本数据类型,并提供实际示例代码。 一…

如何通过 useMemo 和 useCallback 提升你的 React 应用性能

背景 在 React 中,useMemo 和 useCallback 这两个 hook 是我们优化应用性能的有力工具。它们会返回 memoized 版本的值或函数,只在依赖项发生变化时才进行重新计算或定义。 Hook 介绍 useMemo useMemo 的作用是返回一个 memoized 值,它接…

详解信道容量,信道速率,安全速率的区别

目录 一. 信道容量与信道速率 二. 小结 三. 安全速率与物理层安全 3.1 香农物理层安全模型 3.2 安全信道速率 四. 补充安全中断概率(Secrecy Outage Probability, SOP) 五. 补充安全分集度(Secrecy Diversity Order, SDO) …

非科班,培训出身,怎么进大厂?

今天分享一下我是怎么进大厂的经历,希望能给大家带来一点点启发! 阿七毕业于上海一所大学的管理学院,在读期间没写过一行 Java 代码。毕业之后二战考研失利。 回过头来看,也很庆幸这次考研失利,因为这个时候对社会一…