mybatis No enum const class org.apache.ibatis.type.JdbcType.Date 坑爹的配置
Posted on 2013-11-26 21:02 云云 閱讀(21436) 評論(1) 編輯 收藏在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>
但如果在update語句中也這樣使用,那你得到的只會有日期,這夠坑爹的了吧 ,尼瑪 比起ibatis方便之處差遠了
要想在update語句中 將時間格式化成時分秒 不得不再加一個類型 如下面:
startTime = #{startTime,javaType=DATE, jdbcType=VARCHAR}
如
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}