mybatis No enum const class org.apache.ibatis.type.JdbcType.Date 坑爹的配置

转自:https://lihaiming.iteye.com/blog/2248059

在ibatis中不需要关注这些参数 而转到mybatis后 如果字段值为空 必须设置jdbcType

insert into testTable

(ID,

NAME,

DESCRIPTION,

IMAGEURL,

LINKURL,

ISALWAYS,

ISDISPLAYINDEX,

DISPLAYWEIGHT,

STARTTIME,

ENDTIME,

CREATOR,

CREATTIME,

MODIFYTIME)

values

(SEQ_ACTIVITY_TABLE.NEXTVAL,

#{name},

#{desc,jdbcType=VARCHAR},

#{imageUrl,jdbcType=VARCHAR},

#{linkUrl,jdbcType=VARCHAR},

#{isAlways,jdbcType=CHAR},

#{isDisplayIndex,jdbcType=CHAR},

#{displayWeight,jdbcType=VARCHAR},

#{startTime,jdbcType=DATE},

#{endTime,jdbcType=DATE},

#{creator,jdbcType=VARCHAR},

sysdate,

sysdate

)

</insert>

这些设置之多,太烦了,最让人烦的是 jdbcType = DATE,类型还必须大写,不能小写。

如下面的例子,将DATE 改成 Date 。结果让人很抓狂啊!!!

insert into testTable

(ID,

NAME,

DESCRIPTION,

IMAGEURL,

LINKURL,

ISALWAYS,

ISDISPLAYINDEX,

DISPLAYWEIGHT,

STARTTIME,

ENDTIME,

CREATOR,

CREATTIME,

MODIFYTIME)

values

(SEQ_ACTIVITY_TABLE.NEXTVAL,

#{name},

#{desc,jdbcType=VARCHAR},

#{imageUrl,jdbcType=VARCHAR},

#{linkUrl,jdbcType=VARCHAR},

#{isAlways,jdbcType=CHAR},

#{isDisplayIndex,jdbcType=CHAR},

#{displayWeight,jdbcType=VARCHAR},

#{startTime,jdbcType=Date},

#{endTime,jdbcType=DATE},

#{creator,jdbcType=VARCHAR},

sysdate,

sysdate

)

</insert>

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType. Cause: java.lang.IllegalArgumentException: No enum const class org.apache.ibatis.type.JdbcType.Date
        org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
        org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:368)

更坑爹的在后面,上面insert时的时候用#{endTime,jdbcType=DATE},可以将时间插入成功,且可以精确到时分秒

但如果在update语句中也这样使用,那你得到的只会有日期,这够坑爹的了吧 ,尼玛 比起ibatis方便之处差远了

要想在update语句中 将时间格式化成时分秒 不得不再加一个类型 如下面:

startTime = #{startTime,javaType=DATE, jdbcType=VARCHAR}