zoukankan      html  css  js  c++  java
  • char类型在传参时接收不到数据的原因

    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);
        }
    }
    

      

  • 相关阅读:
    Laravel 5.7 RCE (CVE-2019-9081)
    Laravel 5.8 RCE 分析
    CVE-2018-12613 的一些思考
    2019CISCN华南线下两道web复现
    Intellij idea导入项目时没有目录结构
    [BZOJ4907]柠檬
    [BZOJ3675]序列分割
    aes加解密
    java:基于redis实现分布式定时任务
    PBKDF2加密
  • 原文地址:https://www.cnblogs.com/xww115/p/11351567.html
Copyright © 2011-2022 走看看