//需要的查询条件为 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. js默认事件汇总

    默认事件 就是浏览器通过HTML标签或DOM元素提供的一些功能性的默认行为.比如在a标签href属性上的跳转,右键呼出的菜单等等.我们可以通过js取消或更改这些默认事件. 取消默认事件 默认事件都是定 ...

  2. Spring AOP 自定义注解实现统一日志管理

    一.AOP的基本概念: AOP,面向切面编程,常用于日志,事务,权限等业务处理.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容(Spring核心之一),是函数式编程 ...

  3. shell括号和linux算术运算

    一.小括号() 1. 单小括号() a).命令组 (a=0;touch a.txt) 小括号中的内容会开启一个子shell独立运行:括号中以分号连接,最后一个命令不需要:各命令和括号无空格 b).命令 ...

  4. JavaScript中内置对象的一些属性及方法

    Javascript对象总结 JS中内置了17个对象,常用的是Array对象.Date对象.正则表达式对象.string对象.Global对象 Array对象中常用方法: Concat():表示把几个 ...

  5. Angular2.0的学习(五)

    第五节课: 1.组件的输入输出属性 2.使用中间人模式传递数据 3.组件生命周期以及Angular的变化发现机制

  6. QQ的全国地址编码

    D:\Program Files (x86)\Tencent\QQ\I18N\2052\LocList.xml

  7. Spark 概述

    Spark 是什么? ● 官方文档解释:Apache Spark is a fast and general engine for large-scale data processing. 通俗的理解 ...

  8. C# 几种数据类型转换方式

    1.(int)变量名[强制类型转换] 该转换方式主要用于数字类型之间的转换,从int类型向long,float,double,decimal 类型转换可以使用隐式转换,但从long型到int 就需要使 ...

  9. java 核心技术 读后总结

    总结 1.少用八进制,以及二进制. 那么就是直接用16进制或10进制吗?额,想当年有这样搞过,后面就uuid了. 2.>>>用0填充高位>>用符号位填充高位<< ...

  10. ElasticSearch服务器操作命令

    在win7环境,进入elasticsearch安装目录的bin目录: 1. elasticsearch.bat 就可以启动elasticsearch了.运行这个插件的好处是:elasticsearch ...