//需要的查询条件为 a and (b or c or d) 可以转换为 (a and b) or (a and c) or (a and d)
//第一种方式 使用andEqualTo拼接条件
private Example madeExample(R request) {
Example example = new Example(C.class);
example.setOrderByClause("createddat desc");
Example.Criteria c = example.createCriteria();
Example.Criteria c1 = example.createCriteria();
Example.Criteria c2 = example.createCriteria();
c.andEqualTo("activityType", (byte) 1);
c1.andEqualTo("activityType", (byte) 1);
c2.andEqualTo("activityType", (byte) 1);
c.andEqualTo("deleteState", (byte) 1);
c1.andEqualTo("deleteState", (byte) 1);
c2.andEqualTo("deleteState", (byte) 1);
if (StringUtils.isNotBlank(request.getCompanyId())) {
c.andEqualTo("companyId", request.getCompanyId());
c1.andEqualTo("companyId", request.getCompanyId());
c2.andEqualTo("companyId", request.getCompanyId());
}
if (StringUtils.isNotBlank(request.getActivityState())) {
c.andEqualTo("activityState", request.getActivityState());
c1.andEqualTo("activityState", request.getActivityState());
c2.andEqualTo("activityState", request.getActivityState());
}
if (StringUtils.isNotBlank(request.getCreatedby())) {
c.andEqualTo("createdby", request.getCreatedby());
c1.andEqualTo("createdby", request.getCreatedby());
c2.andEqualTo("createdby", request.getCreatedby());
}
if (StringUtils.isNotBlank(request.getCreateddatStart()) && StringUtils.isNotBlank(request.getCreateddatEnd())) {
c.andGreaterThanOrEqualTo("createddat", request.getCreateddatStart());
c1.andGreaterThanOrEqualTo("createddat", request.getCreateddatStart());
c2.andGreaterThanOrEqualTo("createddat", request.getCreateddatStart());
String endDate = request.getCreateddatEnd();
if (!endDate.contains(" ")) {
endDate += " 23:59:59";
}
c.andLessThanOrEqualTo("createddat", endDate);
c1.andLessThanOrEqualTo("createddat", endDate);
c2.andLessThanOrEqualTo("createddat", endDate);
}
if (StringUtils.isNotBlank(request.getMerchandise())) {
c.andLike("activityRule", "%" + request.getMerchandise() + "%");
c1.andLike("activityRule", "%" + request.getMerchandise() + "%");
c2.andLike("activityRule", "%" + request.getMerchandise() + "%");
}
//校验有效期
if (StringUtils.isNotBlank(request.getValidStart()) && StringUtils.isNotBlank(request.getValidEnd())) {
String endDate = request.getValidEnd();
if (!endDate.contains(" ")) {
endDate += " 23:59:59";
}
c.andBetween("validStart", request.getValidStart(),endDate);
c1.andBetween("validEnd",request.getValidStart(),endDate);
c2.andCondition("valid_start <=",request.getValidStart());
c2.andCondition("valid_end >=",endDate);
example.or(c1);
example.or(c2);
}
return example;
} //第二种方式 使用andCondition拼接sql
private Example madeExample1(ZnyOilActivityConsumeRequest request) {
Example example = new Example(ZnyOilActivityMerch.class);
example.setOrderByClause("createddat desc");
Example.Criteria c = example.createCriteria();
c.andEqualTo("activityType", (byte) 1);
c.andEqualTo("deleteState", (byte) 1);
if (StringUtils.isNotBlank(request.getEnterpriseId())) {
c.andCondition("company_id = '"+request.getEnterpriseId()+"'");
}
if (StringUtils.isNotBlank(request.getActivityState())) {
c.andCondition("activity_state = "+request.getActivityState());
}
if (StringUtils.isNotBlank(request.getCreatedby())) {
c.andCondition("createdby = '"+request.getCreatedby()+"'");
}
if (StringUtils.isNotBlank(request.getCreateddatStart()) && StringUtils.isNotBlank(request.getCreateddatEnd())) {
String createddatStart = request.getCreateddatStart();
String createddatEnd = request.getCreateddatEnd();
if (!createddatEnd.contains(" ")) {
createddatEnd += " 23:59:59";
}
c.andCondition("createddat between '"+createddatStart+"' and '"+createddatEnd+"'");
}
if (StringUtils.isNotBlank(request.getMerchandise())) {
c.andCondition("activity_rule like '%" + request.getMerchandise() + "%'");
}
//校验有效期逻辑
//1.活动有效期限起在查询日期起止范围之内
//2.活动有效期限止在查询日期起止范围之内
//3.活动有效期限起止在查询日期起止范围之内符合1,2情况
//4.查询开始日期起止包含在活动有效期限起止之内
if (StringUtils.isNotBlank(request.getValidStart()) && StringUtils.isNotBlank(request.getValidEnd())) {
String validStart = request.getValidStart();
String validEnd = request.getValidEnd();
if (!validEnd.contains(" ")) {
validEnd += " 23:59:59";
}
c.andCondition("((valid_start between '"+validStart+"' and '"+validEnd+"') or (valid_end between '"+validStart+"' and '"+validEnd+"') or (valid_start <= '"+validStart+"' and valid_end >= '"+validEnd+"'))");
}
return example;
} //第三种方式 可以直接在CustomMapper文件里面用Mybatis方法写查询sql

tk.mybatis Example 多个or条件拼接的更多相关文章

  1. java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】

    一.概述 三款框架的功能对比 Mybatis-generator 通用Mapper Mybatis-Plus 代码生成器 支持自动生成Model,Mapper,Mapper XML文件 生成方式不够灵 ...

  2. SpringBoot框架之通用mapper插件(tk.mybatis)

    一.Tkmybatis的好处 Tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效.这个插件里面封装好了我们需要用到的很多sql语句,不过这个插件是通过我们去调用它封装的各种 ...

  3. 初识 tk.mybatis.mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

  4. 初识 tk.mybatis.mapper 通用mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

  5. 使用tk.mybatis快速开发curd

    使用mybatis已经是可以快速开发程序了,对于单表的curd似乎是一种可抽象的结果,下面介绍tk.mybatis的使用方式. maven引用 我使用的是这个版本,所以相关功能介绍也是这个版本. 使用 ...

  6. 使用mybatis-generator插件结合tk.mybatis自动生成mapper二三事

    本篇文章将介绍使用spring boot框架,引入mybatis-generator插件,结合tk.mybatis自动生成Mapper和Entity的一整套流程,其中包括最重要的踩坑与填坑.     ...

  7. tk.mybatis扩展通用接口

    一.tk.mybatis已经为我们封装好了许多拆箱即用的通用mapper,但在实际的项目开发中想必不少小伙伴在数据库设计中都会采用逻辑删除这种方案,再去使用通用的mapper接口就不行了.这时候就需要 ...

  8. 使用mybatis-generator插件结合tk.mybatis自动生成mapper

    本篇文章将介绍使用spring boot框架,引入mybatis-generator插件,结合tk.mybatis自动生成Mapper和Entity的一整套流程,其中包括最重要的踩坑与填坑.     ...

  9. tk.mybatis中常用方法的使用(最实用)

    一.前言 不知道环境和maven依赖怎么配置的,先看一下这个: SpringBoot整合tk.mybatis 二.方法的介绍和使用 插入方法 int insertSelective(T var1); ...

随机推荐

  1. 全网排名第一的免费开源ERP Odoo Git源代码部署教程

    文/开源智造联合创始人老杨 本文来自<开源自主OdooERP部署架构指南>试读:第三章-Git源代码部署 .书籍尚未出版,请勿转载.欢迎您反馈阅读意见. 我们将从git源代码部署Odoo ...

  2. ldap第一天 编译安装LDAP + ldapadmin

    此文整理学习此大神的博客:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26168435&id=5746284 一.环 ...

  3. idea dao使用@Mapper注解 业务类使用@Autowired 注入dao 爆红问题

    实际项目跑起来无影响,但是看起来不太爽. 可以在dao类添加org.springframework.stereotype.Repository 注解 或者可以在service类中使用 javax.an ...

  4. H5页面开发的touchmove事件

    在做一屏滚动的H5页面的时候,必须移除touchmove事件,如果不移除,在安卓机上会触发微信原生的向下滚动拉出刷新.在IOS上出现上下都可以继续滑动,所以需要移除document的touchmove ...

  5. 前端 HTML-CSS 规范

    黄金定律 一个项目应该永远遵循同一套编码规范! 不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的. HTML 语法 用两个空格来代替制表符(tab) – 这是唯一能保证在所有环境 ...

  6. 我在B站学习 清华大学教授带你学习c++(进阶)类与对象

    B站av11459203的一系列视频,跳过了基础篇直接进入进阶,从此难度开始加大.这里做出一些笔记分享一下. 我是1.25速度看的..对应分P 34-36 对象:现实中对象的模拟,具有属性和行为,对象 ...

  7. JS——json、ajax、jsonp

    json: data.json: { "code":1, "data": { "name": "kid", " ...

  8. 004 Median of Two Sorted Arrays 两个有序数组的中位数

    There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two ...

  9. windows中以管理员身份运行cmd

    开始->所有程序->附件->命令提示符->右键,以管理员身份运行(win10可以直接搜索cmd,右键,以管理员身份运行)

  10. 小小粉丝度度熊 二分答案 + two pointer

    http://acm.hdu.edu.cn/showproblem.php?pid=6119 发现自己的two pointer能力超弱. 这题是合并时间后,二分答案. 可以知道对于每个时间区间,合法的 ...