mybatis的原因!!!!!

数据库这个样子

在postman中调用接口:SQL

select * from T_TRAIN_MARSHALLING where	TRAIN_NUM is null and PRE_TRAIN_NUMBER is null and RECEIVE_SEND=#{RECEIVE_SEND}
union all
select * from T_TRAIN_MARSHALLING where TRAIN_NUM = #{TRAIN_NUM} and PRE_TRAIN_NUMBER is null

  

查询结果:

在SQLserver中的测试如下:

然后就开始找原因,解决方案就是加trim,这个很恶心,或者mybaits下就不要用char了

select * from T_TRAIN_MARSHALLING where TRAIN_NUM is null and PRE_TRAIN_NUMBER is null and trim(RECEIVE_SEND)=#{RECEIVE_SEND}
union all
select * from T_TRAIN_MARSHALLING where TRAIN_NUM = #{TRAIN_NUM} and PRE_TRAIN_NUMBER is null

最终解决方案,
在mapper-config中,注册你实现的转换器类,其中jdbcType可以指定的类型在Mybatis的枚举类org.apache.mybatis.type.JdbcType中有明确的定义,不能为该枚举以外的值,不然会出错。这里因为枚举中没有我们需要的XMLType类型,所以指定为UNDEFINED。(也可以不指定具体的类型,在使用时用typeHandler指定具体的类即可):
 
mybatis-config.xml中增加
<typeHandlers>
<!--Oracle CHAR fix -->
<typeHandler handler="cn.com.git.cbs.mybatis.typehandler.OracleCharStringTypeHandler" javaType="String" jdbcType="CHAR" />
</typeHandlers>

  

 
然后写一个转换的类
/*
* @author XueWeiWei
* @date 2019/8/14 14:01
*/
public class OracleCharStringTypeHandler implements TypeHandler<String> {
@Override
public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
OraclePreparedStatement ops = ps.unwrap(OraclePreparedStatement.class);
ops.setFixedCHAR(i, parameter);
}
}

  

char类型在传参时接收不到数据的原因的更多相关文章

  1. URL传参时中文参数乱码的解决方法

    URL传参时,中文参数乱码的解决: 今天在工作中遇到了这样的一个问题,在页面之间跳转时,我将中文的参数放入到url中,使用location进行跳转传参,但是发现接收到的参数值是乱码.我的代码是这样写的 ...

  2. C++ 传参时传内置类型时用传值(pass by value)方式效率较高

    来源:唐磊的个人博客<C++ 传参时传内置类型时用传值(pass by value)方式效率较高> 在<Effective C++>里提到对内置(C-like)类型在函数传参时 ...

  3. MyBatis中传参时为什么要用#{}

    MyBatis中传参时为什么要用#{},这个问题和MyBatis如何防止SQL注入类似.不过在解释这个问题之前,先解释一下什么是SQL注入,还有些称作注入攻击这个问题. SQL注入就是SQL 对传入参 ...

  4. asp.net Get和Post传参和接收参数

    asp.netGet和Post传参和接收参数 Get请求: 对于传参:test.aspx?name=%e5%bc%a0%e4%b8%89 接收参数的方法: Request.QueryString[&q ...

  5. .NET 内存基础(通过内存体验类型、传参、及装箱拆箱)

    该随笔受启发于<CLR Via C#(第三版)>第四章4.4运行时的相互联系 一.内存分配的几个区域 1.线程栈 局部变量的值类型 和 局部变量中引用类型的指针(或称引用)会被分配到该区域 ...

  6. Mybatis 中在传参时,${} 和#{} 的区别

    介绍 MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型. 在SQL中引用这些参数 ...

  7. vue 路由传参 、接收参数

    传参组件 一. <router-link :to='"/main/course?navName=" +item.columnName + "&id=&quo ...

  8. axios的post传参时,将参数转为form表单格式

    import axios from 'axios'; import alert from './alert.js'; import Qs from 'qs' //引入qs 时axios的自带模块 le ...

  9. RestTemplate post请求使用map传参 Controller 接收不到值的解决方案 postForObject方法源码解析.md

    结论 post方法中如果使用map传参,需要使用MultiValueMap来传递 RestTemplate 的 postForObject 方法有四个参数 String url => 顾名思义 ...

随机推荐

  1. 8.Struts2拦截器

    1. 拦截器的概述 * 拦截器就是AOP(Aspect-Oriented Programming)的一种实现.(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.) * ...

  2. 13. this关键字

    1.this的概述 this关键字代表是对象的引用.也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用. 2.this实例,初始化成员变 class Employee { privat ...

  3. Ruby 环境变量

    Ruby 环境变量 Ruby 解释器使用下列环境变量来控制它的行为.ENV 对象包含了所有当前设置的环境变量列表. 变量 描述 DLN_LIBRARY_PATH 动态加载模块搜索的路径. HOME 当 ...

  4. NTT数论变换

    数论变换NTT 前置知识 FFT:NTT的思想和FFT一样(FFT介绍) 概述 数论变换,即NTT(Number Theory Transformation?),是基于数论域的FFT,一般我们默认FF ...

  5. mysql删除字段为null的数据

    delete FROM main_bussiness_cost1 where date is null; 不能用 date = null:

  6. 导出lab动态命名文件夹文件名

    set tmp=%date:~0,10%echo %tmp:/=-%mkdir %tmp:/=-%cd %tmp:/=-%exp meet/meet@orcl_11 file=%tmp:/=-%.dm ...

  7. 10、 导出python脚本进行数据驱动的接口测试

    postman自带脚本导出功能,对于代码小白来说,可以不错的学习代码级接口测试 第一步:输入接口地址,点击send 第二步:点击code,导出脚本文件,为python脚本 第三步:安装python3以 ...

  8. PAT_A1102#Invert a Binary Tree

    Source: PAT A1102 Invert a Binary Tree (25 分) Description: The following is from Max Howell @twitter ...

  9. DRF的序列化组件

    目录 DRF的序列化组件 Serializer组件 序列化 反序列化 ModelSerializer组件 序列化和反序列化 自定义Response方法 基表相关 DRF中ORM的多表关联操作 外键设计 ...

  10. Merge k Sorted Arrays【合并k个有序数组】【优先队列】

    Given k sorted integer arrays, merge them into one sorted array. Example Given 3 sorted arrays: [ [1 ...