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

无锡手机网站开发宁波网站建设运营

无锡手机网站开发,宁波网站建设运营,沈阳妇科医院哪家好,wordpress 关掉缓存📌 正文: 有时候我们项目底层是 JdbcTemplate 查询,没法像 MyBatisPlus 一样用 Wrapper 拼接条件,但我们又不想手撸字符串。那怎么办?我今天就给你整了个 SqlBuilder 工具类,支持 eq、ne、like、in、gt、l…

📌 正文:

有时候我们项目底层是 JdbcTemplate 查询,没法像 MyBatisPlus 一样用 Wrapper 拼接条件,但我们又不想手撸字符串。那怎么办?我今天就给你整了个 SqlBuilder 工具类,支持 eqnelikeingtltorderBylimit,像 MyBatisPlus 一样链式调用,直接拼接最终 SQL!


📌 工具类源码:

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;/*** SQL 动态拼接工具类* <p>* 支持常用条件操作:eq(等于)、ne(不等于)、like(模糊匹配)、in(集合匹配)、gt(大于)、lt(小于),* 以及排序 orderBy 和结果数量限制 limit。* 采用链式调用方式,方便优雅地拼接 WHERE、ORDER BY、LIMIT 子句。* <p>* 示例:* <pre>* String sql = new SqlBuilder("SELECT * FROM user")*     .eq("status", 1)*     .like("name", "张三")*     .orderBy("create_time", false)*     .limit(10)*     .build();* </pre>* * @author lhj* @date 2025/06/03*/
public class SqlBuilder {private final String baseSql;  // 基础SQL语句,包含SELECT和FROM部分private final List<String> whereConditions = new ArrayList<>(); // 存放WHERE条件private String orderByClause = "";  // ORDER BY子句private String limitClause = "";    // LIMIT子句/*** 构造方法,传入基础SQL语句(通常包含SELECT和FROM)** @param baseSql 基础SQL语句*/public SqlBuilder(String baseSql) {this.baseSql = baseSql;}/*** 拼接等于条件* 仅当value不为空时,添加"column = 'value'"条件** @param column 列名* @param value  比较值* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder eq(String column, Object value) {if (ObjectUtil.isNotEmpty(value)) {whereConditions.add(column + " = '" + value + "'");}return this;}/*** 拼接不等于条件* 仅当value不为空时,添加"column <> 'value'"条件** @param column 列名* @param value  比较值* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder ne(String column, Object value) {if (ObjectUtil.isNotEmpty(value)) {whereConditions.add(column + " <> '" + value + "'");}return this;}/*** 拼接模糊匹配条件* 仅当value不为空时,添加"column LIKE '%value%'"条件** @param column 列名* @param value  模糊匹配的值* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder like(String column, Object value) {if (ObjectUtil.isNotEmpty(value)) {whereConditions.add(column + " LIKE '%" + value + "%'");}return this;}/*** 拼接IN条件* 仅当values集合不为空时,添加"column IN ('value1','value2',...)"条件** @param column 列名* @param values 值集合* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder in(String column, List<?> values) {if (CollUtil.isNotEmpty(values)) {String inValues = values.stream().map(v -> "'" + v + "'").collect(Collectors.joining(","));whereConditions.add(column + " IN (" + inValues + ")");}return this;}/*** 拼接大于条件* 仅当value不为空时,添加"column > 'value'"条件** @param column 列名* @param value  比较值* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder gt(String column, Object value) {if (ObjectUtil.isNotEmpty(value)) {whereConditions.add(column + " > '" + value + "'");}return this;}/*** 拼接小于条件* 仅当value不为空时,添加"column < 'value'"条件** @param column 列名* @param value  比较值* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder lt(String column, Object value) {if (ObjectUtil.isNotEmpty(value)) {whereConditions.add(column + " < '" + value + "'");}return this;}/*** 拼接排序子句* 仅当column不为空时,添加"ORDER BY column ASC|DESC"** @param column 排序字段* @param asc    是否升序(true升序,false降序)* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder orderBy(String column, boolean asc) {if (ObjectUtil.isNotEmpty(column)) {orderByClause = " ORDER BY " + column + (asc ? " ASC" : " DESC");}return this;}/*** 拼接结果限制条数子句* 仅当size大于0时,添加"LIMIT size"** @param size 限制返回结果条数* @return 当前SqlBuilder对象,支持链式调用*/public SqlBuilder limit(int size) {if (size > 0) {limitClause = " LIMIT " + size;}return this;}/*** 构建最终完整SQL语句* 根据已拼接的条件、排序和限制,生成完整SQL字符串** @return 完整SQL字符串*/public String build() {StringBuilder finalSql = new StringBuilder(baseSql);if (!whereConditions.isEmpty()) {finalSql.append(" WHERE ").append(String.join(" AND ", whereConditions));}finalSql.append(orderByClause).append(limitClause);return finalSql.toString();}/*** 简单示例演示SqlBuilder用法*/public static void main(String[] args) {String sql = new SqlBuilder("SELECT * FROM user").eq("status", 1).eq("score", "") // 空字符串不拼接.like("name", "").in("type", Arrays.asList(1)).gt("create_time", "2024-01-01").orderBy("create_time", false).limit(50).build();System.out.println(sql);}
}

📌 使用效果:

控制台输出👇

SELECT * FROM user WHERE status = '1' AND type IN ('1') AND create_time > '2024-01-01' ORDER BY create_time DESC LIMIT 50

📌 总结:

✔️ 支持链式调用
✔️ 条件判空自动过滤
✔️ 格式统一规范
✔️ 灵感来自 MyBatisPlus 的 Wrapper 写法


📌 铁子们,点赞、收藏、转发,别白嫖!

有需要的直接拿走用,或者留言,我帮你继续扩展功能版本,比如 betweenorgroupByhaving 版本 🚀


http://www.dtcms.com/a/523345.html

相关文章:

  • 深圳市住房和建设局官网站首页做卖车网站需要什么手续费
  • 新编asp.net 2.0网站开发从入门到精通 代码唐山移动互联网开发
  • 上海市建设项目施工审图网站群晖 wordpress 外网
  • 网站结构形式有哪些没网站怎么做cpa
  • 哪个网站可以做公众号封面怎样可以查到做网站公司
  • 英文网站建设流程羽毛球赛事2022直播
  • wordpress网站出现域名加两个双引号的图片死链接电子商务网站建设的需求
  • 网站建设的提升外包公司有哪些
  • 建设部科技中心网站惠州外发加工网
  • 无锡网站seo报价互联网行业都有哪些公司
  • 旅游网站建设推广网站建设(信奈辉煌电商)
  • 什么网站做简历免费网站备案是在哪里查
  • 用vs2012做网站教程建网站的公司
  • 彩票网站多少钱可以做建设商城网站公司百度百科
  • 门户网站建设经验交流好推建站
  • 福州做网站优化介绍湛江网站
  • 高端做网站哪家好wordpress启用多站点
  • 大学生网站建设申报书深圳市建设管理中心
  • 网站建设90g 吾爱破解深圳建模板网站
  • 安阳哪里做网站校园推广的方式有哪些
  • 网站建设和实现论文wordpress评论框不见了
  • 做视频网站用什么服务器配置汽车租赁企业网站源码
  • 建筑人才网站asp网站无法上传图片
  • 中明建投建设集团 网站pconline太平洋电脑网
  • 廊坊网站推广外包私募网站建设
  • 青岛网站建设哪家好 网络服务wordpress 多语言版本号
  • 湘潭网站公司横琴网站建设公司
  • .net网站项目有哪些苏州公司做网站
  • 英文网站模板制作安卓应用开发用什么语言
  • 专业的集团网站开发开发济南企业建站排行榜