mybatis查询时传递对象问题,始终报类型错误,求哪位前辈进来看看

匆匆z2 发布于 2016/06/08 16:25
阅读 6K+
收藏 1
java接口方法:   
public int getCount(ProjectCriteria criteria);
ProjectCriteria类:只有String name属性
xml配置:   
<select id="getCount" parameterType="ProjectCriteria" resultType="int">
select count(1) from project
where `name` like '%#{name,jdbcType=VARCHAR}%'
</select>
junit报错:
 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='name', mode=IN, javaType=class java.lang.String, jdbcType=VARCHAR, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType VARCHAR . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

配置什么的都没问题,其他项目也这样用,同一个项目中insert,update方法都好着呢,就select这个方法里边不能用,不知道为什么

报错是类型异常,但是String 不就对应jdbcType的VARCHAR吗?



加载中
0
jianyun
jianyun
resultType="int">改成resultClass="java.lang.Integer"

匆匆z2
匆匆z2
试了,并不是这里的问题
0
公孙二狗
公孙二狗
jdbcType=VARCHAR
0
公孙二狗
公孙二狗
<selectid="getCount"parameterType="ProjectCriteria"resultType="int">
select count(1) from project
where `name` like '%#{name,jdbcType=VARCHAR}%'

</select>

1. MyBatis 里 like 不是这么写的

2. 把 jdbcType 去掉就可以

公孙二狗
公孙二狗
回复 @匆匆z2 : 我写的都不用呢,一切正常
匆匆z2
匆匆z2
你的意思是不用jdbcType,我之前是写在mybatis判断语句里边的,后来报错就直接这样写方便点了,官方文档里边的说法是,对于可能为空的类型需要给出jdbcType,如果为空的话,这样就不行了,去掉之后还是报错555
0
公孙二狗
公孙二狗

引用来自“jorneyr”的评论

<selectid="getCount"parameterType="ProjectCriteria"resultType="int">
select count(1) from project
where `name` like '%#{name,jdbcType=VARCHAR}%'

</select>

1. MyBatis 里 like 不是这么写的

2. 把 jdbcType 去掉就可以

<!-- 查询学生 list,like 姓名 --> <select id="getStudentListLikeName" parameterType="StudentEntity" resultMap="studentResultMap"> SELECT * from STUDENT_TBL ST     
WHERE ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%') </select>
匆匆z2
匆匆z2
恩,是的,谢谢你
0
LucEsape
LucEsape
谁教你 %#{name}% 可以这样拼字符串?
匆匆z2
匆匆z2
谢谢你,已经解决了
0
匆匆z2
匆匆z2

已经解决了,参数会自带引号

where name like “%"#{name,jdbcType=VARCHAR}"%"

whatwhowhy
whatwhowhy
parameterType写错了吧
0
maradona
maradona
where `name` like '%'||#{name,jdbcType=VARCHAR}||'%'
0
祝网
祝网

name like '%${name}%' 

name like '%'||#{name,jdbcType=VARCHAR}||'%'

返回顶部
顶部