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

Mybatis SQL构建器类 - 问题答案

问题

Java开发人员可能会碰到的最棘手的事情之一就是在Java代码中嵌入SQL语句。通常情况下,这是因为需要动态生成SQL语句 - 否则可以将其外部化到文件或存储过程中。正如你已经了解到的,MyBatis在其XML映射功能中有一个强大的解决方案来生成动态SQL。然而,有时候在Java代码中构建SQL语句字符串是必要的。在这种情况下,MyBatis还有一个特性可以帮助您,避免陷入典型的加号、引号、换行、格式化问题和嵌套条件语句处理额外逗号或AND连接符的混乱中。实际上,在Java中动态生成SQL代码可能会成为一场真正的噩梦。例如:

String sql = "SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, "
"P.LAST_NAME,P.CREATED_ON, P.UPDATED_ON " +
"FROM PERSON P, 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 AND P.FIRST_NAME like ?) " +
"OR (P.LAST_NAME like ?) " +
"GROUP BY P.ID " +
"HAVING (P.LAST_NAME like ?) " +
"OR (P.FIRST_NAME like ?) " +
"ORDER BY P.ID, P.FULL_NAME";
答案

MyBatis 3提供了一个便利的工具类来帮助解决这个问题。通过使用SQL类,您只需创建一个实例,然后可以调用其方法逐步构建SQL语句。重写上面的示例问题时,可以使用SQL类来实现如下:

private String selectPersonSql() {return new SQL() {{SELECT("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");}}.toString();
}

这个示例有什么特别之处?嗯,如果你仔细看的话,它不必担心意外重复出现“AND”关键字,也不需要在“WHERE”和“AND”之间进行选择或者两者都不需要。SQL类会处理好理解何时需要插入“WHERE”,何时使用“AND”以及所有的字符串拼接工作。

相关文章:

Mybatis SQL构建器类 - 问题答案

问题 Java开发人员可能会碰到的最棘手的事情之一就是在Java代码中嵌入SQL语句。通常情况下,这是因为需要动态生成SQL语句 - 否则可以将其外部化到文件或存储过程中。正如你已经了解到的,MyBatis在其XML映射功能中有一个强大的解决方案来生成动态SQL。然…...

React 是什么?有什么特性?有哪些优势?

一、是什么 React,用于构建用户界面的 JavaScript 库,只提供了 UI 层面的解决方案 这句话的意思是,React 是一个专注于构建用户界面的 JavaScript 库,它主要关注于解决 UI 层面的问题。它并不是一个全功能的框架,而是…...

瑞吉外卖项目详细总结

文章目录 瑞吉外卖1.技术栈2.项目文件架构3.业务功能模块(例子)3.1管理员登录接口层(Controller)3.2管理员登录实现层(ServiceImpl)3.3管理员登录服务层(Service)3.4管理员登录Mapper层 4.公共模块4.1 BaseContext(保存…...

Cytoscape 3.10安装包下载及安装教程

Cytoscape3.10下载链接:https://docs.qq.com/doc/DUkpuR0RVU0JVWkFP 1、选中下载好的安装包,右键选择解压到“Cytoscape 3.10”文件夹 2、双击打开“Cytoscape_3_10_0_windows_64bit.exe” 3.点击“Download”,请耐心等待“Java”完成 4、点击…...

data.TensorDataset解析

data.TensorDataset 是 PyTorch 中的一个类,用于创建一个包含多个张量的数据集。这个类的主要作用是将输入的张量组合成一个数据集,使得在训练过程中可以方便地进行数据加载和迭代。 具体来说,TensorDataset 接受一系列的张量作为输入参数&a…...

贝锐花生壳全新功能:浏览器一键远程访问SSHRDP远程桌面

为了满足特定场景的远程访问需求,如:远程群晖NAS设备、远程SQL Server数据库/MySQL数据库、3389远程桌面(RDP远程桌面)、远程SSH、我的世界游戏联机…… 贝锐花生壳推出了场景映射服务,不仅提供满足相应场景的网络带宽…...

2024 年度 AAAI Fellows 揭晓!清华大学朱军教授入选!

今日,国际人工智能领域最权威的学术组织 AAAI 揭晓 2024 年度 Fellows 评选结果,新增 12 位 Fellow。 其中,清华大学计算机系教授朱军因「在机器学习理论与实践方面做出的重大贡献」而成功入选,成为本年度入选的唯一华人学者&…...

Linux(openssl):用CA证书签名具有SAN的CSR

Linux(openssl):创建CA证书,并用其对CSR进行签名_生成ca证书签名请求文件csr-CSDN博客 提供了方法为CSR进行签名。 对于有SAN的CSR如何签名呢? 1.创建CA证书,与下面的帖子一样...

从零开始了解大数据(七):总结

系列文章目录 从零开始了解大数据(一):数据分析入门篇-CSDN博客 从零开始了解大数据(二):Hadoop篇-CSDN博客 从零开始了解大数据(三):HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四):MapReduce篇-CSDN博客 从零开始了解大…...

增量预训练经验积累(3)

站在巨人的肩膀上才能走的更远~本文主要是针对《千亿参数开源大模型 BLOOM 背后的技术》进行学习和提取关键经验。 1、BLOOM与Megatron-DeepSpeed 1.1 BLOOM训练细节 BLOOM 的模型架构与 GPT3 非常相似,只是增加了一些改进,176B BLOOM 模型的训练于 2022 年 3 月至 7 月期…...

R语言【CoordinateCleaner】——cc_dupl():根据物种名称和坐标以及用户定义的附加列删除或标记重复的记录

Package CoordinateCleaner version 2.0-20 Parameters cc_dupl(x,lon "decimallongitude",lat "decimallatitude",species "species",additions NULL,value "clean",verbose TRUE ) 参数【x】:data.frame。包含地…...

Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

将下发的ds_db01.sql数据库文件放置mysql中 12、编写Scala代码,使用Spark将MySQL的ds_db01库中表user_info的全量数据抽取到Hive的ods库中表user_info。字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String&am…...

python数据分析之交叉验证

python数据分析之交叉验证 1、常用的分类算法 有监督:SVM向量机、梯度提升、决策树(随机森林)、朴素贝叶斯、逻辑斯蒂回归、神经网络(cnn、rnn) 无监督:k-means、隐马尔可夫 2、数据分析过程 1、采集数据 2、数据预处理 3、特征选择 4、模型训练、评估、保存 5、模型…...

机器人技能学习--数据集剖析

文章目录 前言数据总览数据介绍actionsrobot0_eef_poserobot0_eef_quatstatesobject 参考资料 前言 一切为了能自己构建属于自己的数据集,所以,从现有数据集剖析入手。    目前,基于 MimicGen 官方提供的数据集,初始数据集有11组…...

Jenkins的Transfers路径怎么配置,解决Transfers配置不生效的问题

Transfers配置: 1.配置Source files: 要填写jar包的相对路径,从当前项目工作空间的根目录开始,看看我的工作空间你就懂了 !如图 我填的是 parent/build/libs/parent-1.0.0.jar,即不要 fdw1/ 的前缀 2.配置Remote directory: 远程目标文件夹,也就是你jar包要放到远程…...

php安装扩展event 提示 No package ‘openssl‘ found 解决方法

在使用pecl编译安装最新版event模块的时候提示 No package openssl found , 可是本机是安装了openssl的, 编译时找不到, 大概率就是环境配置的问题了, 增加 OPENSSL_CFLAGS OPENSSL_LIBS环境变量即可解决. 异常提示信息: checking for openssl > 1.0.2... no configure: …...

基于SpringBoot的动物领养平台的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的动物领养平台的设计与实…...

计算机网络期末复习——计算大题(一)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...

2024年深度学习、计算机视觉与大模型面试题综述,六大专题数百道题目

DeepLearning-Interview-Awesome-2024 本项目涵盖了大模型(LLMs)专题、计算机视觉与感知算法专题、深度学习基础与框架专题、自动驾驶、智慧医疗等行业垂域专题、手撕项目代码专题、优异开源资源推荐专题共计6大专题模块。我们将持续整理汇总最新的面试题并详细解析这些题目&a…...

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致

Solmash 是 Solana 生态中由社区主导的铭文资产 LaunchPad 平台,该平台旨在为 Solana 原生铭文项目,以及通过其合作伙伴 SoBit 跨链桥桥接到 Solana 的 Bitcoin 生态铭文项目提供更广泛的启动机会。有了 Solmash,将会有更多的 Solana 生态的铭…...

从苹果AirTag到国产车钥匙:拆解UWB芯片厂商格局与选型指南(附功耗实测参考)

从苹果AirTag到国产车钥匙:拆解UWB芯片厂商格局与选型指南 当你的手机靠近车门自动解锁,或是通过AirTag精准定位背包位置时,背后都离不开一项关键技术——UWB(超宽带)。这种厘米级精度的空间感知能力,正在重…...

FLUX.1-dev LoRA微调指南:基于像素幻梦输出数据集训练专属风格

FLUX.1-dev LoRA微调指南:基于像素幻梦输出数据集训练专属风格 1. 前言:为什么需要LoRA微调 在像素艺术创作领域,每个艺术家都渴望拥有独特的视觉风格。FLUX.1-dev作为当前最先进的扩散模型,配合像素幻梦(Pixel Dream Workshop)…...

AsyncSerial:嵌入式非阻塞串口通信实现

1. AsyncSerial 库深度解析:面向嵌入式实时系统的非阻塞串口通信实现 在嵌入式系统开发中,串口(UART/USART)通信因其硬件资源占用少、协议简单、调试便捷等优势,始终是固件层最基础且高频使用的外设接口。然而&#xf…...

终极Windows远程桌面多用户破解指南:让家庭版也能同时登录15人!

终极Windows远程桌面多用户破解指南:让家庭版也能同时登录15人! 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版只能一个人远程连接而烦恼吗?🤔 …...

CasRel开源镜像部署教程:适配低显存(12GB)GPU的轻量级方案

CasRel开源镜像部署教程:适配低显存(12GB)GPU的轻量级方案 1. 前言:为什么选择这个方案 如果你正在处理文本数据,想要自动提取人物、地点、事件之间的关系,那么关系抽取技术就是你需要的工具。CasRel作为…...

Phi-4-Reasoning-Vision部署案例:基于torch.bfloat16的双卡显存优化实操

Phi-4-Reasoning-Vision部署案例:基于torch.bfloat16的双卡显存优化实操 1. 项目背景与核心价值 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为双卡RTX 4090环境优化。这个工具解决了大模型部署中…...

Lumerical圆锥建模避坑指南:从参数计算到3D旋转生成的完整流程

Lumerical圆锥建模避坑指南:从参数计算到3D旋转生成的完整流程 在光学仿真领域,精确的几何建模往往是获得可靠结果的第一步。对于圆锥结构这种在光子晶体、超表面和纳米天线设计中广泛应用的形状,其建模过程看似简单却暗藏玄机。许多研究人员…...

17:L关注AI伦理:蓝队的道德防御

作者: HOS(安全风信子) 日期: 2026-03-17 主要来源平台: GitHub 摘要: 当基拉开始利用AI的伦理漏洞时,传统的安全防御已无法应对。L将AI伦理原则融入安全防御,构建符合道德规范的安全体系。本文拆解L如何在…...

实战指南:基于OpenSpec规范,使用快马平台生成可直接集成的微服务客户端代码

今天在微服务开发中遇到一个典型需求:我们的支付网关服务已经用OpenAPI 3.0规范定义好了接口,现在需要在另一个Java服务中调用这些接口。传统做法要手动写HTTP客户端代码,既耗时又容易出错。最近发现InsCode(快马)平台能基于OpenSpec文档自动…...

SDXL-Turbo在虚拟现实中的应用:实时环境生成技术

SDXL-Turbo在虚拟现实中的应用:实时环境生成技术 想象一下,在虚拟世界中每走一步,周围的景色就随之变化——茂密的森林在你眼前生长,古老的城堡在远处拔地而起,这一切都发生在眨眼之间。这不是魔法,而是SDX…...