本文主要内容:
1:mybatis查询时候提示错误:JDBC requires that the JdbcType
2:mysql常用的连接、截取、case when format等函数使用
3:mybatis 怎么模糊查询
正文:
在使用mybatis的时候,有时候我们在查询的时候提示错误:
JDBC requires that the JdbcType must be specified for all nullable parameter。
原因有二:
原因一:查询条件中,必填的,在执行查询的时候没有填写。
各种搜索,都是说存在空值。可是在mapper中做了判断了。
分析:
在直接访问的时候,没有报错。通过查询条件的时候,就会报错。经过对比发现,直接访问对象属性有值,但是在点击查询的时候,form中隐藏域,只有id而没有name属性。当页面中的数据传递给后台,实体赋值的时候,都是空了。而sql语句中:
正好使用到了。所以会一直报错。
错误前:
修改后:
添加name属性就可以了。
原因二:有时候需要指定参数类型:jdbcType=VARCHAR
如果在遇到类似错误,不妨从这两个方面下手,排除下。就因为自己不认真,浪费了一个小时实际。
最后奉献上一条sql语句:
select x.*,REPLACE(x.usedSize1,'.00','') AS 'usedSize' ,CASE WHEN x.hasFiled=1 THEN x.fileName1
ELSE
REPLACE(x.fileName1,CONCAT(CONCAT('.',x.fileSuffix)),'')
END
AS 'fileName' FROM (
SELECT a.id 'id' ,a.file_name 'fileName1',FORMAT (a.file_size/1024,2 ) 'fileSize',a.used_size 'usedSize1', a.update_date 'updateDate'
,a.update_by ,a.create_date,a.file_suffix 'fileSuffix',a.field_id as 'fieldId' ,u.name AS "updateBy.name",a.has_filed 'hasFiled',file_pid 'filePid'
FROM doc_detail a JOIN sys_user u
ON u.id = a.update_by
WHERE a.pro_id=#{proId}
AND a.financing_id=#{financingId}
AND a.file_pid=#{filePid}
AND a.del_flag='0'
)x
<where>
<if test="fileName1 != null and fileName1 != ''">
AND x.fileName1 LIKE CONCAT('%', #{fileName1}, '%')
</if>
</where>
order by x.create_date desc
sql使用到的常用参数说明:
1:使用到replace替換函数
2:使用case when選擇函数
3:使用CONCAT连接函数
4:使用FORMAT 格式化函數
以及在mybatis中 模糊查询的使用