本文主要是介绍通用型自定义拼接 SQL 脚本,摆脱重复工作量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通用型自定义拼接sql脚本,摆脱重复工作量
在开发 Restful 接口时,我们经常需要根据前端传递的参数动态拼接 SQL 查询语句,以满足不同的查询需求。本文将介绍一个通用的自定义拼接 SQL 脚本的方法,帮助开发人员减少重复工作量。
首先,我们定义了一个名为 SqlParmDTO
的传参实体类,其中包含了需要传递给 SQL 查询的各个参数,如 where
条件、排序字段 sort
、排序方式 order
、结果集偏移量 offset
和结果集限制数量 limit
。
接下来,我们提供了一个方法 listPageBysql()
来根据传入的 SqlParmDTO
对象执行 SQL 查询,并返回分页结果。该方法首先判断是否存在唯一字段 unique
,如果不存在,则执行普通的 SQL 查询,否则执行带有去重功能的 SQL 查询。查询结果封装在 PageInfo
对象中返回。
在 MyBatis 的 XML 配置文件中,我们定义了四个 SQL 查询语句,分别是 selectSql
、selectSqlCount
、selectUniqueSql
和 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 脚本,摆脱重复工作量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!