用mybatis访问数据库也用了一些时间,今天和平时一样,增加了一张,表中有一个TIMESTAMP字段,我还是跟往常一样写mapper和定义domain对象,但是写好后,启动时确报如下错:
aused by:org.springframework.core.NestedIOException: Failed to parse mapping resource:'file [D:\ *****************************\mapper\IdGenerator-SqlMapper.xml]';nested exception is org.apache.ibatis.builder.BuilderException: Error parsingMapper XML. Cause: java.lang.IllegalStateException: No typehandler found forproperty lastUpdateTime
atorg.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:522)
atorg.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:381)
atorg.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:546)
atorg.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.sqlSessionFactory(MybatisAutoConfiguration.java:130)
atorg.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$173b3739.CGLIB$sqlSessionFactory$0(<generated>)
atorg.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$173b3739$$FastClassBySpringCGLIB$$6affb2ad.invoke(<generated>)
atorg.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
atorg.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
atorg.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$173b3739.sqlSessionFactory(<generated>)
atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
atjava.lang.reflect.Method.invoke(Method.java:498)
atorg.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 48 more
仔细检查了一个sqlmapper.xml文件的配置,确实没有问题,没办法,只能根据下的报错分析了一下mybatis的TypeHandleRegistry,看到typeHandleResitry里注册的timestamp是java.sql.Timestamp,恍然大悟,肯定是我在定义domain对象时引入的timestamp类不同,果然检查确实不对,我引用的是java.security.Timestamp.