码迷,mamicode.com
首页 > 其他好文 > 详细

char类型在传参时接收不到数据的原因

时间:2019-08-14 14:34:25      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:text   枚举类   开始   org   server   map   size   传参   union   

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类型在传参时接收不到数据的原因

标签:text   枚举类   开始   org   server   map   size   传参   union   

原文地址:https://www.cnblogs.com/xww115/p/11351567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!