ORACLE中关于使用between在MyBatis中取不同的区间值和取反
最近在项目中使用between取不同的区间值问题,由于区间跨度大,而且区间多,又是前端传过来的参数,所以使用in和exists比较麻烦。然后就考虑使用between。现将使用方法记录一下。
假如表有个字段param_key,参数区间值为:100-300、1000-1999、3050-5000。
首先是between的用法是:param_key between value1 and value2。如果是有多个between则是:param_key between 100 and 300 and param_key between 1000 and 1999 and param_key between 3050 and 5000。
这杨很容易理解,也能很容易知道怎么写SQL,比较麻烦的就是我们使用的是Mybatis,所以拼接动态SQL和参数的传递方式很重要。
首先我们会想到使用mybatis的foreach去遍历。但是参数是param_key,所以就会想到把区间值给拆分成两部分来传递。具体作法如下:
1.首先创建一个类,用来封装区间值:
public class ParamKey{
private String startKey;
private String endKey;
//getter,setter
}
2.创建请求类:
public class ParamRequest{
private List<ParamKey> key;//不同区间值的集合
private String operator;//1:取区间值,0:取反
private String code;//区间值代码
//getter,setter
}
3.业务处理:
public class ServiceImpl{
public void queryData( ParamRequest request){
//假如区间值是:100-200,3000-4500,5005-5020
request.setCode("[100-200],[3000-4500],[5005-5020]");
request.setOperator('1');
List<ParamKey> list = new ArrayList<>();
String code = request.getCode();
String [] aplit = code.split(",");
for( int i = 0 ; i ++ ; i < aplit.length){
ParamKey key = new ParamKey();
String [] param = aplit[i].split("-");
key.setStartKey(param[0].subString(1,param[0].length));
key.setEndKey(param[1].subString(0,param[1].length-1));
list.add(key);
}
request.setKey(list);
//业务处理,调用dao层方法
}
}
4.Mybatis中SQL:
<where>
1=1
<choose>
<when test="operator == 1">
and (
<!-- 取区间值 -->
<foreach collection="key" index="index" item="item" open="" separator="or" close="">
param_key between #{item.startKey} and #{item.endKey}
</foreach>
)
</when>
<when test="operator == 0">
and (
<!-- 取区间值之外的 -->
<foreach collection="param.codes" index="index" item="item" open="" separator="and" close="">
param_key not between #{item.startKey} and #{item.endKey}
</foreach>
)
</when>
</choose>
</where>
ORACLE中关于使用between在MyBatis中取不同的区间值和取反的更多相关文章
- mybatis中的动态SQL
在实际开发中,数据库的查询很难一蹴而就,我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时,mybatis给我们提供了动态SQL,可以让我们根据具体 ...
- Mybatis中的缓存管理
目录 Mybatis中的缓存管理 查询缓存工作原理: 配置缓存: 默认配置: 使用二级缓存: 刷新缓存过程: 配置EHcache 产生脏数据 使用原则: Mybatis中的缓存管理 查询缓存工作原理: ...
- Mybatis中实现oracle的批量插入、更新
oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.S ...
- mybatis中mysql和oracle的差异
1.applicationContext.xml中的配置差异: 在applicationContext.xml的数据源dataSource的配置中,mysql数据库需要心跳包的配置,而oracle中不 ...
- Mybatis使用- Mybatis JdbcType与Oracle、MySql数据类型对应列表 ; Mybatis中javaType和jdbcType对应关系
Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType BIG ...
- Oracle使用MyBatis中RowBounds实现分页查询
Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便. 使用MyBatis中的RowBounds进行 ...
- mybatis中Oracle分页语句的写法
最近一段时间使用oracle数据库查询分页, 用的是springboot. Oracle数据库中没有像mysql中limit的写法, 只能换其他方式写. 考虑到oracle中的ROWNUM变量, 使用 ...
- mybatis中oracle in>1000的处理
oracle数据库中,如果你使用in,然后括号对应的是一个子查询,当查询出来的结果>1000的时候就会报错. 这个是数据库的规定,我们无法改变它. 如何解决这个问题呢? 现在我看到了三种解决方式 ...
- mybatis中的查询缓存
一: 查询缓存 Mybatis提供查询缓存,用于减轻数据压力,提高数据库压力. Mybatis提供一级缓存和二级缓存. 在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(Hash ...
随机推荐
- Specified version of key is not available (44)
-- ::, ERROR [HiveServer2-Handler-Pool: Thread-]: transport.TSaslTransport (TSaslTransport.java:open ...
- Linux操作系统配置Go语言编程环境
之前一直在windows下写Go,现在工作环境切换至Linux下,因此写下此文,记录安装Go环境的过程. 操作系统:CentOS7.5 一.安装步骤 1,下载Go语言安装包 yum install g ...
- class ObjectOutputStream也是过滤流,使节点流直接获得输出对象。
class ObjectOutputStream也是过滤流,使节点流直接获得输出对象. 最有用的方法:WriteObject(Object b) 用流传输对象称为对象的序列化,但并不使所有的对象都可以 ...
- error connecting: Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
[参考]Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 [参考][数据库-MySql] MySqlConnection error connec ...
- 【深入Java虚拟机】二 类加载与双亲委派
https://blog.csdn.net/zhangliangzi/article/details/51338291 -参考 双亲委派过程:当一个类加载器收到类加载任务时,立即将任务委派给它的父类 ...
- 企业SaaS模式的优缺点
好处: 1.降低成本 项目成本.人员成本 2.使用简单 无需系统维护,用户只需登录就可以享受系统的功能 3.安全性 SaaS模式下,企业用户最关注的是自己的数据能不能得到安全保护. A.涉及的数据有哪 ...
- GCH实践经验
服务器: 终端整机: 办公套件: 杀毒软件: 打印机:
- java基础---->String中的split方法的原理
这里面主要介绍一下关于String类中的split方法的使用以及原理. split函数的说明 split函数java docs的说明: When there is a positive-width m ...
- 【Zookeeper系列】Zookeeper命令操作(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4031881.html 一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他 ...
- win10图片恢复默认照片查看器
文件名: win10图片恢复默认照片查看器.reg 双击该文件导入到注册表 Windows Registry Editor Version 5.00 ; Change Extension's File ...