通用型自定义拼接 SQL 脚本,摆脱重复工作量

本文主要是介绍通用型自定义拼接 SQL 脚本,摆脱重复工作量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通用型自定义拼接sql脚本,摆脱重复工作量

在开发 Restful 接口时,我们经常需要根据前端传递的参数动态拼接 SQL 查询语句,以满足不同的查询需求。本文将介绍一个通用的自定义拼接 SQL 脚本的方法,帮助开发人员减少重复工作量。

首先,我们定义了一个名为 SqlParmDTO 的传参实体类,其中包含了需要传递给 SQL 查询的各个参数,如 where 条件、排序字段 sort、排序方式 order、结果集偏移量 offset 和结果集限制数量 limit

接下来,我们提供了一个方法 listPageBysql() 来根据传入的 SqlParmDTO 对象执行 SQL 查询,并返回分页结果。该方法首先判断是否存在唯一字段 unique,如果不存在,则执行普通的 SQL 查询,否则执行带有去重功能的 SQL 查询。查询结果封装在 PageInfo 对象中返回。

在 MyBatis 的 XML 配置文件中,我们定义了四个 SQL 查询语句,分别是 selectSqlselectSqlCountselectUniqueSql 和 selectUniqueSqlCount。这些查询语句根据传入的参数动态拼接 SQL 语句,并执行相应的查询操作。

以下就是通用型自定义拼接 SQL 脚本的示例代码。通过这种方式,开发人员可以根据不同的查询需求,灵活地拼接 SQL 语句,从而避免了重复的工作量。

Rest Full接口联调

{
“order”: “desc”,
“sort”: “id”,
“unique”: “field1, field2, field3”,
“where”: “field1 IN ( ‘A00000020231017001’) AND field2 IN (‘62284613461111198’) AND time1>= ‘2017–09–08’ AND time2<= ‘2024–11–16 23:59:59’ “
}

自定义传参实体类:

public class SqlParmDTO implements Serializable{
private static final long serialVersionUID = 1L;private String where;private String unique;private String sort;private String order;private int offset;private int limit;
}

方法类:

@Override
public PageInfo<PhoneBill> listPageBysql(SqlParmDTO sqlParm) {
if (StringUtils.isEmpty(sqlParm.getUnique())) {long total = this.mapper.selectSqlCount(sqlParm.getWhere());List<PhoneBill> lists = this.mapper.selectSql(sqlParm.getWhere(), sqlParm.getSort(), sqlParm.getOrder(), sqlParm.getOffset(), sqlParm.getLimit());PageInfo<PhoneBill> pageInfo = new PageInfo<>(lists);pageInfo.setTotal(total);pageInfo.setPageNum(sqlParm.getOffset());pageInfo.setPageSize(sqlParm.getLimit());return pageInfo;} else {long total = this.mapper.selectUniqueSqlCount(sqlParm.getWhere(), sqlParm.getUnique());List<PhoneBill> lists = this.mapper.selectUniqueSql(sqlParm.getWhere(), sqlParm.getSort(), sqlParm.getOrder(), sqlParm.getOffset(), sqlParm.getLimit(), sqlParm.getUnique());PageInfo<PhoneBill> pageInfo = new PageInfo<>(lists);pageInfo.setTotal(total);pageInfo.setPageNum(sqlParm.getOffset());pageInfo.setPageSize(sqlParm.getLimit());return pageInfo;}
}

#mybastis xml文件:

<select id="selectSql" resultType="map">select * from jz_phone_bill<where><if test="where != null and where !=''">${where}</if></where><if test="sort != null and sort !=''">order by${sort}<if test="order != null and order !=''">${order}</if></if></select>
<select id="selectSqlCount" resultType="java.lang.Long">select count(1) from jz_phone_bill<where><if test="where != null and where !=''">${where}</if></where></select>
<select id="selectUniqueSql" resultType="map">select * from ( select t.*, ROW_NUMBER ( ) OVER (PARTITION BY<if test="unique != null and unique !=''">${unique}</if><if test="sort != null and sort !=''">order by${sort}<if test="order != null and order !=''">${order}</if></if>) AS `row_number1`from jz_phone_bill t<where><if test="where != null and where !=''">${where}</if></where>) t2 where `row_number1` = 1</select><select id="selectUniqueSqlCount" resultType="java.lang.Long">select count(1) from ( select t.*, ROW_NUMBER ( ) OVER (PARTITION BY<if test="unique != null and unique !=''">${unique}</if>) AS `row_number1`from jz_phone_bill t<where><if test="where != null and where !=''">${where}</if></where>) t2 where `row_number1` = 1
</select>

这篇关于通用型自定义拼接 SQL 脚本,摆脱重复工作量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931333

相关文章

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI