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

mybatis 中@SelectProvider注解的使用


我看了下与@Select有啥区别,这个@SelectProvider是能够加多条件判断的,看下面的代码示例:

@SelectProvider:用于构建动态查询SQL。
@InsertProvider:用于构建动态新增SQL。
@UpdateProvider:用于构建动态更新SQL。
@DeleteProvider:用于构建动态删除SQL。

 type为method对应的方法,其中参数与查询中的参数是一样的本例中都为QueryParam,method为type中对应的返回sql的方法
 @SelectProvider(type = SqlProvider.class, method = "count")
    int count(@Param("param") QueryParam param);
    
    
   class SqlProvider {

        public String list(QueryParam param) {
            return buildQueryParam(param, false);
        }

        public String count(QueryParam param) {
            return buildQueryParam(param, true);
        }

        private String toDate(Long timestamp) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String startTime = format.format(new Date(timestamp));
            return startTime;
        }

        private String buildQueryParam(QueryParam param, boolean queryCount) {
            StringBuilder sqlBuilder = new StringBuilder();
            sqlBuilder.append(" select ");
            sqlBuilder.append(queryCount ? " count(*) " : " " + FIELD + " ");
            sqlBuilder.append(" from " + TABLE + " where 1=1 ");
            if (StringUtils.isNotBlank(param.getId())) {
                sqlBuilder.append(" and transactionNum='" + param.getId() + "' ");
            }
            if (StringUtils.isNotBlank(param.getCustomerId())) {
                sqlBuilder.append(" and customerId='" + param.getCustomerId() + "' ");
            }
            if (param.getAssets() != null && param.getAssets().size() > 0) {
                String assets = String.join("','", param.getAssets());
                sqlBuilder.append(" and coinCode in ('" + assets + "') ");
            }
            if (null != param.getStartTime() && param.getStartTime() > 0) {
                sqlBuilder.append(" and created >= '" + toDate(param.getStartTime()) + "' ");
            }
            if (null != param.getEndTime() && param.getEndTime() > 0) {
                sqlBuilder.append(" and created <= '" + toDate(param.getEndTime()) + "' ");
            }
            if (null != param.getType()) {
                sqlBuilder.append(" and transactionType=" + param.getType().getType());
            }
            if (null != param.getStatuses() && param.getStatuses().size() > 0) {
                if (param.getStatuses().size() == 1) {
                    sqlBuilder.append(" and status=" + param.getStatuses().get(0).getStatus());
                } else {
                    sqlBuilder.append(" and status in (");
                    List<String> statusList = param.getStatuses().stream().map(s -> String.valueOf(s.getStatus())).collect(Collectors.toList());
                    String.join(",", statusList);
                    sqlBuilder.append(")");
                }
            }

            if (!queryCount) {
                sqlBuilder.append(" ORDER BY transactionNum DESC  ");

                if (null != param.getOffset() && null != param.getLimit()) {
                    sqlBuilder.append(" limit " + param.getOffset() + "," + param.getLimit());
                }
            }

            return sqlBuilder.toString();
        }

    }

相关文章:

  • 移动终端网站建设/百度一下 官方网
  • 南宁做网站哪家公司好/电商网站搭建
  • 搬瓦工wordpress建站/全国疫情最新情况最新消息今天
  • 科技网站 石家庄/厦门人才网个人登录
  • 江苏弘盛建设工程集团有限公司网站/优化大师最新版本
  • 网络营销方式名词解释/网络seo是什么工作
  • QT qt 3d 绘图
  • SpringCloud Alibaba | 网关(三) : SpringCloudGateway 过滤器获取application/json中body数据
  • 李沐精读论文:Swin transformer: Hierarchical vision transformer using shifted windows
  • R语言应用xgboost进行机器学习(1)
  • 2023年天津理工大学中环信息学院专业课考试具体安排
  • URLLC关键技术和网络适应性分析
  • 【圣诞节特辑】爱心代码(程序员的浪漫plus+)-李峋
  • Apache Spark 练习六:使用Spark分析音乐专辑数据
  • 【DETR目标检测】关键词:Decoder。Encoder。query向量。注意力机制。
  • Hook原理
  • Python定时任务工具--APScheduler
  • 天天写业务代码,如何成为技术大牛?